#region Disclaimer / License
// Copyright (C) 2010, Jackie Ng
// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie@gmail.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//
#endregion
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using OSGeo.MapGuide.MaestroAPI;
using OSGeo.MapGuide.MaestroAPI.Resource;
using OSGeo.MapGuide.MaestroAPI.Services;
using Res = OSGeo.MapGuide.MaestroAPI.Properties.Resources;
using OSGeo.MapGuide.ObjectModels.ApplicationDefinition;
using OSGeo.MapGuide.ObjectModels.Common;
using OSGeo.MapGuide.ObjectModels.DrawingSource;
using OSGeo.MapGuide.ObjectModels.FeatureSource;
using OSGeo.MapGuide.ObjectModels.LayerDefinition;
using OSGeo.MapGuide.ObjectModels.LoadProcedure;
using OSGeo.MapGuide.ObjectModels.MapDefinition;
using OSGeo.MapGuide.ObjectModels.PrintLayout;
using OSGeo.MapGuide.ObjectModels.SymbolDefinition;
using OSGeo.MapGuide.ObjectModels.SymbolLibrary;
using OSGeo.MapGuide.ObjectModels.WebLayout;
using OSGeo.MapGuide.ObjectModels.ApplicationDefinition_1_0_0;
using System.Collections.Specialized;
using OSGeo.MapGuide.ObjectModels.WatermarkDefinition;
namespace OSGeo.MapGuide.ObjectModels
{
///
/// Factory method signature for creating layer definitions
///
public delegate ILayerDefinition LayerCreatorFunc(LayerType type);
///
/// Factory method signature for creating load procedures
///
public delegate ILoadProcedure LoadProcCreatorFunc();
///
/// Factory method signature for creating web layouts
///
public delegate IWebLayout WebLayoutCreatorFunc(string mapDefinitionId);
///
/// Factory method signature for creating compound symbol definitions
///
public delegate ICompoundSymbolDefinition CompoundSymbolDefCreatorFunc();
///
/// Factory method signature for creating simple symbol definitions
///
public delegate ISimpleSymbolDefinition SimpleSymbolDefCreatorFunc();
///
/// Factory method signature for creating watermarks
///
///
public delegate IWatermarkDefinition WatermarkCreatorFunc(SymbolDefinitionType type);
///
/// Factory method signature for creating map definitions
///
///
public delegate IMapDefinition MapDefinitionCreatorFunc();
///
/// Factory class to create MapGuide resource objects with either pre-defined or
/// sensible default values. This is recommended over creating the objects directly
/// as this ensures that there are no null child properties where the XML schema forbids
/// it.
///
/// By default this class will only create v1.0.0 of any specified top-level resource unless specified. In order to be able to create
/// newer versions, you need to register the appropriate methods that can create resources of this version:
///
/// - for Layer Definitions
///
/// This registration needs to be done as part of your application's startup/initialization phase.
///
/// In the context of Maestro, this registration is automatically done as part of the addin's startup process
///
public static class ObjectFactory
{
private static Dictionary _layerFactories;
private static Dictionary _loadProcFactories;
private static Dictionary _wlFactories;
private static Dictionary _simpleSymbolFactories;
private static Dictionary _compoundSymbolFactories;
private static Dictionary _mapDefinitionFactories;
private static Dictionary _watermarkFactories;
static ObjectFactory()
{
_layerFactories = new Dictionary();
_wlFactories = new Dictionary();
_loadProcFactories = new Dictionary();
_simpleSymbolFactories = new Dictionary();
_compoundSymbolFactories = new Dictionary();
_mapDefinitionFactories = new Dictionary();
_watermarkFactories = new Dictionary();
_layerFactories.Add(
new Version(1, 0, 0),
new LayerCreatorFunc(OSGeo.MapGuide.ObjectModels.LayerDefinition_1_0_0.LdfEntryPoint.CreateDefault));
_loadProcFactories.Add(
LoadType.Sdf,
new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure_1_0_0.LoadProcEntryPoint.CreateDefaultSdf));
_loadProcFactories.Add(
LoadType.Shp,
new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure_1_0_0.LoadProcEntryPoint.CreateDefaultShp));
_loadProcFactories.Add(
LoadType.Dwf,
new LoadProcCreatorFunc(OSGeo.MapGuide.ObjectModels.LoadProcedure_1_0_0.LoadProcEntryPoint.CreateDefaultDwf));
_wlFactories.Add(
new Version(1, 0, 0),
new WebLayoutCreatorFunc(OSGeo.MapGuide.ObjectModels.WebLayout_1_0_0.WebLayoutEntryPoint.CreateDefault));
_compoundSymbolFactories.Add(
new Version(1, 0, 0),
new CompoundSymbolDefCreatorFunc(OSGeo.MapGuide.ObjectModels.SymbolDefinition_1_0_0.CompoundSymbolDefinition.CreateDefault));
_simpleSymbolFactories.Add(
new Version(1, 0, 0),
new SimpleSymbolDefCreatorFunc(OSGeo.MapGuide.ObjectModels.SymbolDefinition_1_0_0.SimpleSymbolDefinition.CreateDefault));
_mapDefinitionFactories.Add(
new Version(1, 0, 0),
new MapDefinitionCreatorFunc(OSGeo.MapGuide.ObjectModels.MapDefinition_1_0_0.MdfEntryPoint.CreateDefault));
}
///
/// Registers the compound symbol factory method
///
///
///
public static void RegisterCompoundSymbolFactoryMethod(Version ver, CompoundSymbolDefCreatorFunc func)
{
if (_compoundSymbolFactories.ContainsKey(ver))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + ver);
_compoundSymbolFactories[ver] = func;
}
///
/// Regsiters the simple symbol factory method
///
///
///
public static void RegisterSimpleSymbolFactoryMethod(Version ver, SimpleSymbolDefCreatorFunc func)
{
if (_simpleSymbolFactories.ContainsKey(ver))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + ver);
_simpleSymbolFactories[ver] = func;
}
///
/// Registers the layer factory method.
///
/// The ver.
/// The method.
public static void RegisterLayerFactoryMethod(Version ver, LayerCreatorFunc method)
{
if (_layerFactories.ContainsKey(ver))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + ver);
_layerFactories[ver] = method;
}
///
/// Registers the load procedure factory method.
///
/// The type.
/// The method.
public static void RegisterLoadProcedureFactoryMethod(LoadType type, LoadProcCreatorFunc method)
{
if (_loadProcFactories.ContainsKey(type))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.LoadProcFactoryMethodAlreadyRegistered + type);
_loadProcFactories[type] = method;
}
///
/// Registers the web layout factory method.
///
/// The version.
/// The method.
public static void RegisterWebLayoutFactoryMethod(Version version, WebLayoutCreatorFunc method)
{
if (_wlFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + version);
_wlFactories[version] = method;
}
///
/// Register the map definition factory method
///
///
///
public static void RegisterMapDefinitionFactoryMethod(Version version, MapDefinitionCreatorFunc method)
{
if (_mapDefinitionFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + version);
_mapDefinitionFactories[version] = method;
}
///
/// Registers the Watermark Definition factory method
///
///
///
public static void RegisterWatermarkDefinitionFactoryMethod(Version version, WatermarkCreatorFunc method)
{
if (_watermarkFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.FactoryMethodAlreadyRegistered + version);
_watermarkFactories[version] = method;
}
///
/// Creates the web layout.
///
/// The owner.
/// The version.
/// The map definition id.
///
public static IWebLayout CreateWebLayout(IServerConnection owner, Version version, string mapDefinitionId)
{
Check.NotNull(owner, "owner");
if (!_wlFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownWebLayoutVersion + version.ToString());
var wl = _wlFactories[version](mapDefinitionId);
wl.CurrentConnection = owner;
return wl;
}
///
/// Creates the web layout. The schema version used is the highest supported one by the connection
///
///
///
///
public static IWebLayout CreateWebLayout(IServerConnection owner, string mapDefinitionId)
{
var ver = owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.WebLayout);
return CreateWebLayout(owner, ver, mapDefinitionId);
}
///
/// Creates the default layer. The schema version used is the highest supported one by the connection
///
///
///
///
public static ILayerDefinition CreateDefaultLayer(IServerConnection owner, LayerType type)
{
var ver = owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.LayerDefinition);
return CreateDefaultLayer(owner, type, ver);
}
///
/// Creates the default layer.
///
/// The owner.
/// The type.
/// The version.
///
public static ILayerDefinition CreateDefaultLayer(IServerConnection owner, LayerType type, Version version)
{
Check.NotNull(owner, "owner");
if (!_layerFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownLayerVersion + version.ToString());
var layer = _layerFactories[version](type);
layer.CurrentConnection = owner;
return layer;
}
///
/// Creates the drawing source.
///
/// The owner.
///
public static IDrawingSource CreateDrawingSource(IServerConnection owner)
{
Check.NotNull(owner, "owner");
return new OSGeo.MapGuide.ObjectModels.DrawingSource_1_0_0.DrawingSource()
{
CurrentConnection = owner,
SourceName = string.Empty,
CoordinateSpace = string.Empty,
Sheet = new System.ComponentModel.BindingList()
};
}
///
/// Creates the feature source.
///
/// The owner.
/// The provider.
///
public static IFeatureSource CreateFeatureSource(IServerConnection owner, string provider)
{
Check.NotNull(owner, "owner");
return new OSGeo.MapGuide.ObjectModels.FeatureSource_1_0_0.FeatureSourceType()
{
CurrentConnection = owner,
Provider = provider,
Parameter = new System.ComponentModel.BindingList()
};
}
///
/// Creates the feature source.
///
/// The owner.
/// The provider.
/// The connection properties.
///
public static IFeatureSource CreateFeatureSource(IServerConnection owner, string provider, NameValueCollection values)
{
var fs = CreateFeatureSource(owner, provider);
fs.ApplyConnectionProperties(values);
return fs;
}
///
/// Create a Watermark Definition
///
///
///
///
public static IWatermarkDefinition CreateWatermark(IServerConnection owner, SymbolDefinitionType type)
{
Check.NotNull(owner, "owner");
return CreateWatermark(owner, type, owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.WatermarkDefinition));
}
///
/// Creates a Watermark Definition
///
///
///
///
///
public static IWatermarkDefinition CreateWatermark(IServerConnection owner, SymbolDefinitionType type, Version version)
{
Check.NotNull(owner, "owner");
if (!_watermarkFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownWatermarkDefinitionVersion + version.ToString());
var wdf = _watermarkFactories[version](type);
wdf.CurrentConnection = owner;
return wdf;
}
///
/// Creates the map definition.
///
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, Version version, string name)
{
Check.NotNull(owner, "owner");
if (!_mapDefinitionFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownMapDefinitionVersion + version.ToString());
var mdf = _mapDefinitionFactories[version]();
mdf.CurrentConnection = owner;
return mdf;
}
///
/// Creates the map definition.
///
///
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, Version ver, string name, string coordinateSystemWkt)
{
var map = CreateMapDefinition(owner, ver, name);
map.CoordinateSystem = coordinateSystemWkt;
return map;
}
///
/// Creates the map definition.
///
///
///
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, Version ver, string name, string coordinateSystemWkt, IEnvelope env)
{
var map = CreateMapDefinition(owner, ver, name, coordinateSystemWkt);
map.Extents = env;
return map;
}
///
/// Creates the map definition.
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, string name)
{
Check.NotNull(owner, "owner");
return CreateMapDefinition(owner, owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.MapDefinition), name);
}
///
/// Creates the map definition.
///
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, string name, string coordinateSystemWkt)
{
Check.NotNull(owner, "owner");
return CreateMapDefinition(owner, owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.MapDefinition), name, coordinateSystemWkt);
}
///
/// Creates the map definition.
///
///
///
///
///
///
public static IMapDefinition CreateMapDefinition(IServerConnection owner, string name, string coordinateSystemWkt, IEnvelope env)
{
Check.NotNull(owner, "owner");
return CreateMapDefinition(owner, owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.MapDefinition), name, coordinateSystemWkt, env);
}
///
/// Creates a simple symbol definition.
///
/// The owner.
/// The version.
/// The name.
/// The description.
///
public static ISimpleSymbolDefinition CreateSimpleSymbol(IServerConnection owner, Version version, string name, string description)
{
Check.NotNull(owner, "owner");
if (!_simpleSymbolFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownSymbolDefVersion + version.ToString());
var simp = _simpleSymbolFactories[version]();
simp.CurrentConnection = owner;
simp.Name = name;
simp.Description = description;
return simp;
}
///
/// Creates a simple symbol definition. The schema version used is the highest supported one by the connection
///
///
///
///
///
public static ISimpleSymbolDefinition CreateSimpleSymbol(IServerConnection owner, string name, string description)
{
var ver = owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.SymbolDefinition);
return CreateSimpleSymbol(owner, ver, name, description);
}
///
/// Creates the compound symbol.
///
/// The owner.
/// The version.
/// The name.
/// The description.
///
public static ICompoundSymbolDefinition CreateCompoundSymbol(IServerConnection owner, Version version, string name, string description)
{
Check.NotNull(owner, "owner");
if (!_compoundSymbolFactories.ContainsKey(version))
throw new ArgumentException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnknownSymbolDefVersion + version.ToString());
var comp = _compoundSymbolFactories[version]();
comp.CurrentConnection = owner;
comp.Name = name;
comp.Description = description;
return comp;
}
///
/// Creates the compound symbol. The schema version used is the highest supported one by the connection
///
///
///
///
///
public static ICompoundSymbolDefinition CreateCompoundSymbol(IServerConnection owner, string name, string description)
{
var ver = owner.Capabilities.GetMaxSupportedResourceVersion(ResourceTypes.SymbolDefinition);
return CreateCompoundSymbol(owner, ver, name, description);
}
static readonly string[] parameterizedWidgets =
{
KnownWidgetNames.CTRLClick,
KnownWidgetNames.ZoomOnClick,
KnownWidgetNames.ExtentHistory,
KnownWidgetNames.Buffer,
KnownWidgetNames.Measure,
KnownWidgetNames.InvokeScript,
KnownWidgetNames.InvokeURL,
KnownWidgetNames.Search,
KnownWidgetNames.CursorPosition,
KnownWidgetNames.SelectionInfo,
KnownWidgetNames.ViewSize
};
private static IUIWidget CreateVerticalWidget(IUIWidget widget)
{
var vert = widget.Clone();
vert.Name = "vert" + widget.Name;
vert.Label = string.Empty;
return vert;
}
static Version VER_240 = new Version(2, 4);
///
/// Creates a fusion flexible layout
///
///
/// The name of the template. See for the common pre-defined names
///
public static IApplicationDefinition CreateFlexibleLayout(IServerConnection owner, string templateName)
{
Check.NotNull(owner, "owner");
/*
Check.Precondition(Array.IndexOf(owner.Capabilities.SupportedServices, (int)ServiceType.Fusion) >= 0, "Required Fusion service not supported on this connection");
var fusionSvc = (IFusionService)owner.GetService((int)ServiceType.Fusion);
var templates = fusionSvc.GetApplicationTemplates();
var appDef = DeserializeEmbeddedFlexLayout();
//Find matching template.
var tpl = templates.FindTemplate(templateName);
if (tpl != null)
{
appDef.TemplateUrl = tpl.LocationUrl;
appDef.Title = tpl.Name;
}
appDef.CurrentConnection = owner;
return appDef;
*/
Check.Precondition(Array.IndexOf(owner.Capabilities.SupportedServices, (int)ServiceType.Fusion) >= 0, "Required Fusion service not supported on this connection");
IApplicationDefinition appDef = new ApplicationDefinitionType()
{
CurrentConnection = owner,
MapSet = new System.ComponentModel.BindingList(),
WidgetSet = new System.ComponentModel.BindingList()
};
var fusionSvc = (IFusionService)owner.GetService((int)ServiceType.Fusion);
var templates = fusionSvc.GetApplicationTemplates();
var widgets = fusionSvc.GetApplicationWidgets();
var containers = fusionSvc.GetApplicationContainers();
//Find matching template. If it's a known template we should be able to
//build it programatically, otherwise return a deserialized copy from our
//embedded resource
var tpl = templates.FindTemplate(templateName);
if (tpl != null)
{
appDef.TemplateUrl = tpl.LocationUrl;
appDef.Title = tpl.Name;
}
else
{
//NOTE: Depending on MapGuide Server version, this document may be
//invalid (eg. References to widgets not available in that version)
return DeserializeEmbeddedFlexLayout(owner);
}
//Toolbars, every template has them
var toolbar = appDef.CreateContainer("Toolbar", containers.FindContainer("Toolbar"));
var secToolbar = appDef.CreateContainer("ToolbarSecondary", containers.FindContainer("Toolbar"));
var vertToolbar = appDef.CreateContainer("ToolbarVertical", containers.FindContainer("Toolbar"));
//Context menus, every template has them
var mapContextMenu = appDef.CreateContainer("MapContextMenu", containers.FindContainer("ContextMenu"));
var taskPaneMenu = appDef.CreateContainer("TaskMenu", containers.FindContainer("ContextMenu"));
//Menu
var menu = appDef.CreateContainer("FileMenu", containers.FindContainer("Toolbar"));
//Status bar
var statusbar = appDef.CreateContainer("Statusbar", containers.FindContainer("Splitterbar"));
string mapId = "MainMap";
//Set default map group
appDef.AddMapGroup(mapId, true, string.Empty);
//Create default widget set
var widgetSet = appDef.CreateWidgetSet(appDef.CreateMapWidget(mapId, mapContextMenu.Name));
appDef.AddWidgetSet(widgetSet);
//Add all known non-parameterized widgets to this widget set
foreach (var wgt in widgets.WidgetInfo)
{
if (Array.IndexOf(parameterizedWidgets, wgt.Type) < 0)
{
var widget = appDef.CreateWidget(wgt.Type, wgt);
widgetSet.AddWidget(widget);
}
}
//Add some parameterized ones
//Zoom In
var zoomIn = (IUIWidget)appDef.CreateWidget("ZoomIn", widgets.FindWidget(KnownWidgetNames.ZoomOnClick));
zoomIn.SetValue("Factor", "2");
zoomIn.StatusText = zoomIn.Tooltip = Res.ADF_Widget_ZoomIn_Desc;
zoomIn.Label = Res.ADF_Widget_ZoomIn_Label;
zoomIn.ImageUrl = "images/icons.png";
zoomIn.ImageClass = "zoom-in-fixed";
var vZoomIn = CreateVerticalWidget(zoomIn);
//Zoom Out
var zoomOut = (IUIWidget)appDef.CreateWidget("ZoomOut", widgets.FindWidget(KnownWidgetNames.ZoomOnClick));
zoomOut.SetValue("Factor", "0.5");
zoomOut.StatusText = zoomOut.Tooltip = Res.ADF_Widget_ZoomOut_Desc;
zoomOut.Label = Res.ADF_Widget_ZoomOut_Label;
zoomOut.ImageUrl = "images/icons.png";
zoomOut.ImageClass = "zoom-out-fixed";
var vZoomOut = CreateVerticalWidget(zoomOut);
//Previous View
var prevView = (IUIWidget)appDef.CreateWidget("PreviousView", widgets.FindWidget(KnownWidgetNames.ExtentHistory));
prevView.SetValue("Direction", "previous");
prevView.StatusText = prevView.Tooltip = Res.ADF_Widget_PreviousView_Desc;
prevView.Label = Res.ADF_Widget_PreviousView_Label;
prevView.ImageUrl = "images/icons.png";
prevView.ImageClass = "view-back";
var vPrevView = CreateVerticalWidget(prevView);
//Next View
var nextView = (IUIWidget)appDef.CreateWidget("NextView", widgets.FindWidget(KnownWidgetNames.ExtentHistory));
nextView.SetValue("Direction", "next");
nextView.StatusText = nextView.Tooltip = Res.ADF_Widget_NextView_Desc;
nextView.Label = Res.ADF_Widget_NextView_Label;
nextView.ImageUrl = "images/icons.png";
nextView.ImageClass = "view-forward";
var vNextView = CreateVerticalWidget(nextView);
//Buffer
var buffer = (IUIWidget)appDef.CreateWidget("tbBuffer", widgets.FindWidget(KnownWidgetNames.BufferPanel));
//buffer.SetValue("Target", "TaskPane");
buffer.StatusText = buffer.Tooltip = Res.ADF_Widget_Buffer_Desc;
buffer.Tooltip = Res.ADF_Widget_Buffer_Label;
//Measure
var measure = (IUIWidget)appDef.CreateWidget("Measure", widgets.FindWidget(KnownWidgetNames.Measure));
var measureParams = new NameValueCollection();
measureParams["Type"] = "both";
measureParams["MeasureTooltipContainer"] = "MeasureResult";
measureParams["MeasureTooltipType"] = "dynamic";
measureParams["DistancePrecision"] = "0";
measureParams["AreaPrecision"] = "0";
measureParams["Units"] = "meters";
measureParams["Target"] = "TaskPane";
measure.SetAllValues(measureParams);
measure.StatusText = buffer.Tooltip = Res.ADF_Widget_Measure_Desc;
measure.Tooltip = Res.ADF_Widget_Measure_Label;
//Show Overview
var showOverview = (IUIWidget)appDef.CreateWidget("showOverview", widgets.FindWidget(KnownWidgetNames.InvokeScript));
showOverview.SetValue("Script", "showOverviewMap()");
//Show Task Pane
var showTaskPane = (IUIWidget)appDef.CreateWidget("showTaskPane", widgets.FindWidget(KnownWidgetNames.InvokeScript));
showTaskPane.SetValue("Script", "showTaskPane()");
//Show Legend
var showLegend = (IUIWidget)appDef.CreateWidget("showLegend", widgets.FindWidget(KnownWidgetNames.InvokeScript));
showLegend.SetValue("Script", "showLegend()");
//Show Selection Panel
var showSelectionPanel = (IUIWidget)appDef.CreateWidget("showSelectionPanel", widgets.FindWidget(KnownWidgetNames.InvokeScript));
showSelectionPanel.SetValue("Script", "showSelectionPanel()");
//Coordinate Tracker
var coordTracker = appDef.CreateWidget("statusCoordinates", widgets.FindWidget(KnownWidgetNames.CursorPosition));
coordTracker.SetValue("Template", "X: {x} {units}, Y: {y} {units}");
coordTracker.SetValue("Precision", "4");
coordTracker.SetValue("EmptyText", " ");
//Selection Info
var selInfo = appDef.CreateWidget("statusSelection", widgets.FindWidget(KnownWidgetNames.SelectionInfo));
selInfo.SetValue("EmptyText", "No selection");
//View Size
var viewSize = appDef.CreateWidget("statusViewSize", widgets.FindWidget(KnownWidgetNames.ViewSize));
viewSize.SetValue("Template", "{w} x {h} ({units})");
viewSize.SetValue("Precision", "2");
widgetSet.AddWidget(zoomIn);
widgetSet.AddWidget(zoomOut);
widgetSet.AddWidget(prevView);
widgetSet.AddWidget(nextView);
widgetSet.AddWidget(buffer);
widgetSet.AddWidget(measure);
widgetSet.AddWidget(showOverview);
widgetSet.AddWidget(showTaskPane);
widgetSet.AddWidget(showLegend);
widgetSet.AddWidget(showSelectionPanel);
widgetSet.AddWidget(coordTracker);
widgetSet.AddWidget(selInfo);
widgetSet.AddWidget(viewSize);
widgetSet.AddWidget(vZoomIn);
widgetSet.AddWidget(vZoomOut);
widgetSet.AddWidget(vPrevView);
widgetSet.AddWidget(vNextView);
//Now here's where things may diverge completely between templates
//So let's try for something that is somewhat consistent
//Init primary toolbar
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Print));
//2.2 specific stuff
if (owner.SiteVersion >= new Version(2, 2))
{
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.QuickPlot));
}
toolbar.AddItem(appDef.CreateSeparator());
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.RefreshMap));
//2.4 requires maptips to be a toggle widget
if (owner.SiteVersion >= VER_240)
{
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Maptip));
}
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.SelectRadius));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.SelectPolygon));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.ClearSelection));
toolbar.AddItem(appDef.CreateWidgetReference(buffer.Name));
toolbar.AddItem(appDef.CreateWidgetReference(measure.Name));
//2.2 specific stuff
if (owner.SiteVersion >= new Version(2, 2))
{
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.FeatureInfo));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Query));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Theme));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Redline));
}
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.ViewOptions));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.About));
toolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Help));
//Init secondary toolbar
secToolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Select));
secToolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Pan));
secToolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Zoom));
secToolbar.AddItem(appDef.CreateWidgetReference(zoomIn.Name));
secToolbar.AddItem(appDef.CreateWidgetReference(zoomOut.Name));
secToolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.InitialMapView));
secToolbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.ZoomToSelection));
secToolbar.AddItem(appDef.CreateWidgetReference(prevView.Name));
secToolbar.AddItem(appDef.CreateWidgetReference(nextView.Name));
//Init vertical toolbar
widgetSet.AddWidget(CreateVerticalWidget((IUIWidget)appDef.CreateWidget(KnownWidgetNames.Select, widgets.FindWidget(KnownWidgetNames.Select))));
widgetSet.AddWidget(CreateVerticalWidget((IUIWidget)appDef.CreateWidget(KnownWidgetNames.Pan, widgets.FindWidget(KnownWidgetNames.Pan))));
widgetSet.AddWidget(CreateVerticalWidget((IUIWidget)appDef.CreateWidget(KnownWidgetNames.Zoom, widgets.FindWidget(KnownWidgetNames.Zoom))));
widgetSet.AddWidget(CreateVerticalWidget((IUIWidget)appDef.CreateWidget(KnownWidgetNames.InitialMapView, widgets.FindWidget(KnownWidgetNames.InitialMapView))));
widgetSet.AddWidget(CreateVerticalWidget((IUIWidget)appDef.CreateWidget(KnownWidgetNames.ZoomToSelection, widgets.FindWidget(KnownWidgetNames.ZoomToSelection))));
vertToolbar.AddItem(appDef.CreateWidgetReference("vert" + KnownWidgetNames.Select));
vertToolbar.AddItem(appDef.CreateWidgetReference("vert" + KnownWidgetNames.Pan));
vertToolbar.AddItem(appDef.CreateWidgetReference("vert" + KnownWidgetNames.Zoom));
vertToolbar.AddItem(appDef.CreateWidgetReference(vZoomIn.Name));
vertToolbar.AddItem(appDef.CreateWidgetReference(vZoomOut.Name));
vertToolbar.AddItem(appDef.CreateWidgetReference("vert" + KnownWidgetNames.InitialMapView));
vertToolbar.AddItem(appDef.CreateWidgetReference("vert" + KnownWidgetNames.ZoomToSelection));
vertToolbar.AddItem(appDef.CreateWidgetReference(vPrevView.Name));
vertToolbar.AddItem(appDef.CreateWidgetReference(vNextView.Name));
//Main menu
menu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.MapMenu));
//2.2 specific stuff
if (owner.SiteVersion >= new Version(2, 2))
{
menu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.BasemapSwitcher));
}
var viewMenu = appDef.CreateFlyout(Res.ADF_Flyout_View);
viewMenu.AddItem(appDef.CreateWidgetReference(showOverview.Name));
viewMenu.AddItem(appDef.CreateWidgetReference(showTaskPane.Name));
viewMenu.AddItem(appDef.CreateWidgetReference(showLegend.Name));
viewMenu.AddItem(appDef.CreateWidgetReference(showSelectionPanel.Name));
menu.AddItem(viewMenu);
//status bar
statusbar.AddItem(appDef.CreateWidgetReference(coordTracker.Name));
statusbar.AddItem(appDef.CreateWidgetReference(selInfo.Name));
statusbar.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.EditableScale));
statusbar.AddItem(appDef.CreateWidgetReference(viewSize.Name));
//Map Context Menu
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.RefreshMap));
mapContextMenu.AddItem(appDef.CreateSeparator());
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Pan));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Zoom));
mapContextMenu.AddItem(appDef.CreateSeparator());
mapContextMenu.AddItem(appDef.CreateWidgetReference(zoomIn.Name));
mapContextMenu.AddItem(appDef.CreateWidgetReference(zoomOut.Name));
mapContextMenu.AddItem(appDef.CreateSeparator());
var zoomMenu = appDef.CreateFlyout(Res.ADF_Flyout_Zoom);
mapContextMenu.AddItem(zoomMenu);
mapContextMenu.AddItem(appDef.CreateSeparator());
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Select));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.ClearSelection));
var selectMoreMenu = appDef.CreateFlyout(Res.ADF_Flyout_SelectMore);
mapContextMenu.AddItem(selectMoreMenu);
mapContextMenu.AddItem(appDef.CreateSeparator());
mapContextMenu.AddItem(appDef.CreateWidgetReference(buffer.Name));
mapContextMenu.AddItem(appDef.CreateWidgetReference(measure.Name));
if (owner.SiteVersion >= new Version(2, 2))
{
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.FeatureInfo));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Query));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Theme));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Redline));
}
mapContextMenu.AddItem(appDef.CreateSeparator());
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.ViewOptions));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Help));
mapContextMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.About));
//Tasks Context Menu
taskPaneMenu.AddItem(appDef.CreateWidgetReference(measure.Name));
taskPaneMenu.AddItem(appDef.CreateWidgetReference(buffer.Name));
if (owner.SiteVersion >= new Version(2, 2))
{
taskPaneMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.FeatureInfo));
taskPaneMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Query));
taskPaneMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Theme));
taskPaneMenu.AddItem(appDef.CreateWidgetReference(KnownWidgetNames.Redline));
}
//Now add them all to the main widget set
widgetSet.AddContainer(toolbar);
widgetSet.AddContainer(secToolbar);
widgetSet.AddContainer(vertToolbar);
widgetSet.AddContainer(menu);
widgetSet.AddContainer(statusbar);
widgetSet.AddContainer(mapContextMenu);
widgetSet.AddContainer(taskPaneMenu);
//Set positioning
toolbar.Position = "top";
secToolbar.Position = "top";
menu.Position = "top";
statusbar.Position = "bottom";
mapContextMenu.Position = "top";
taskPaneMenu.Position = "top";
vertToolbar.Position = "left";
return appDef;
}
internal static IApplicationDefinition DeserializeEmbeddedFlexLayout(IServerConnection owner)
{
if (owner.SiteVersion >= VER_240)
return (IApplicationDefinition)ResourceTypeRegistry.Deserialize(OSGeo.MapGuide.MaestroAPI.Properties.Resources.BaseTemplate240_ApplicationDefinition);
else
return (IApplicationDefinition)ResourceTypeRegistry.Deserialize(OSGeo.MapGuide.MaestroAPI.Properties.Resources.BaseTemplate_ApplicationDefinition);
}
///
/// Creates the preview flex layout.
///
/// The owner.
///
public static IApplicationDefinition CreatePreviewFlexLayout(IServerConnection owner)
{
Check.NotNull(owner, "owner");
var appDef = new ApplicationDefinitionType()
{
CurrentConnection = owner,
Title = "Preview",
MapSet = new System.ComponentModel.BindingList(),
WidgetSet = new System.ComponentModel.BindingList()
};
appDef.TemplateUrl = "fusion/templates/mapguide/preview/index.html";
return appDef;
}
///
/// Creates the print layout.
///
/// The owner.
///
public static IPrintLayout CreatePrintLayout(IServerConnection owner)
{
Check.NotNull(owner, "owner");
return new OSGeo.MapGuide.ObjectModels.PrintLayout_1_0_0.PrintLayout()
{
CurrentConnection = owner,
CustomLogos = new System.ComponentModel.BindingList(),
CustomText = new System.ComponentModel.BindingList(),
LayoutProperties = new OSGeo.MapGuide.ObjectModels.PrintLayout_1_0_0.PrintLayoutLayoutProperties()
{
ShowCustomLogos = false,
ShowCustomLogosSpecified = true,
ShowCustomText = false,
ShowCustomTextSpecified = true,
ShowDateTime = false,
ShowDateTimeSpecified = true,
ShowLegend = false,
ShowLegendSpecified = true,
ShowNorthArrow = false,
ShowNorthArrowSpecified = true,
ShowScaleBar = false,
ShowScaleBarSpecified = true,
ShowTitle = false,
ShowTitleSpecified = true,
ShowURL = false,
ShowURLSpecified = true
},
PageProperties = new OSGeo.MapGuide.ObjectModels.PrintLayout_1_0_0.PrintLayoutPageProperties()
{
BackgroundColor = new OSGeo.MapGuide.ObjectModels.PrintLayout_1_0_0.PrintLayoutPagePropertiesBackgroundColor()
{
}
},
};
}
///
/// Creates the load procedure.
///
/// The owner.
/// The type.
/// The file names.
///
public static ILoadProcedure CreateLoadProcedure(IServerConnection owner, LoadType type, IEnumerable fileNames)
{
var proc = CreateLoadProcedure(owner, type);
var fproc = proc.SubType as IBaseLoadProcedure;
if (fproc != null)
{
if (fileNames != null)
{
foreach (var f in fileNames)
{
fproc.SourceFile.Add(f);
}
}
}
return proc;
}
///
/// Creates the load procedure.
///
/// The owner.
/// The type.
///
public static ILoadProcedure CreateLoadProcedure(IServerConnection owner, LoadType type)
{
if (type == LoadType.Dwg || type == LoadType.Raster)
throw new NotSupportedException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.UnsupportedLoadProcedureType);
if (_loadProcFactories.ContainsKey(type))
{
var proc = _loadProcFactories[type]();
proc.CurrentConnection = owner;
return proc;
}
throw new InvalidOperationException(OSGeo.MapGuide.MaestroAPI.Properties.Resources.CannotCreateLoadProcedureSubType + type);
}
///
/// Creates an empty resource document header metadata object
///
///
public static ResourceDocumentHeaderTypeMetadata CreateMetadata()
{
return new ResourceDocumentHeaderTypeMetadata()
{
Simple = new ResourceDocumentHeaderTypeMetadataSimple()
{
Property = new System.ComponentModel.BindingList()
}
};
}
///
/// Creates an envelope (bounding box)
///
///
///
///
///
///
public static IEnvelope CreateEnvelope(double minx, double miny, double maxx, double maxy)
{
if (minx > maxx)
throw new ArgumentException("minx > maxx", "minx");
if (miny > maxy)
throw new ArgumentException("miny > maxy", "miny");
return new Envelope()
{
LowerLeftCoordinate = new EnvelopeLowerLeftCoordinate()
{
X = minx,
Y = miny
},
UpperRightCoordinate = new EnvelopeUpperRightCoordinate()
{
X = maxx,
Y = maxy
}
};
}
///
/// Creates an empty group security object
///
///
public static ResourceSecurityTypeGroups CreateSecurityGroup()
{
return new ResourceSecurityTypeGroups()
{
Group = new System.ComponentModel.BindingList()
};
}
///
/// Creates an empty user security object
///
///
public static ResourceSecurityTypeUsers CreateSecurityUser()
{
return new ResourceSecurityTypeUsers()
{
User = new System.ComponentModel.BindingList()
};
}
///
/// Creates the feature source extension.
///
///
public static IFeatureSourceExtension CreateFeatureSourceExtension()
{
return new OSGeo.MapGuide.ObjectModels.FeatureSource_1_0_0.FeatureSourceTypeExtension()
{
CalculatedProperty = new System.ComponentModel.BindingList(),
AttributeRelate = new System.ComponentModel.BindingList()
};
}
///
/// Creates the calculated property.
///
///
public static ICalculatedProperty CreateCalculatedProperty()
{
return new OSGeo.MapGuide.ObjectModels.FeatureSource_1_0_0.CalculatedPropertyType();
}
///
/// Creates the attribute relation.
///
///
public static IAttributeRelation CreateAttributeRelation()
{
IAttributeRelation rel = new OSGeo.MapGuide.ObjectModels.FeatureSource_1_0_0.AttributeRelateType()
{
RelateProperty = new System.ComponentModel.BindingList(),
};
rel.RelateType = RelateTypeEnum.LeftOuter;
rel.ForceOneToOne = false;
return rel;
}
///
/// Creates a 2d point
///
///
///
///
public static IPoint2D CreatePoint2D(double x, double y)
{
return new Point2DImpl() { X = x, Y = y };
}
///
/// Creates a 3d point
///
///
///
///
///
public static IPoint3D CreatePoint3D(double x, double y, double z)
{
return new Point3DImpl() { X = x, Y = y, Z = z };
}
}
}