[mapguide-commits] r6452 - in trunk/Tools/Maestro: . Maestro Maestro.AddIn.GeoRest Maestro.AddIn.GeoRest/Commands Maestro.AddIn.GeoRest/Model Maestro.AddIn.GeoRest/Properties Maestro.AddIn.GeoRest/Resources Maestro.AddIn.GeoRest/Services Maestro.AddIn.GeoRest/UI Maestro.Shared.UI SDK

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Jan 24 08:34:05 EST 2012


Author: jng
Date: 2012-01-24 05:34:05 -0800 (Tue, 24 Jan 2012)
New Revision: 6452

Added:
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Commands/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Commands/StartupCommand.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Maestro.AddIn.GeoRest.csproj
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Model/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Model/Model.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/AssemblyInfo.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.resx
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/arrow-circle-045-left.png
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/disk.png
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/document-task.png
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/magnifier.png
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/plug.png
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Services/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Services/GeoRestService.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.resx
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.resx
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.resx
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.Designer.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.cs
   trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.resx
Modified:
   trunk/Tools/Maestro/Maestro.Shared.UI/ZonedContainer.resx
   trunk/Tools/Maestro/Maestro/Maestro_All.sln
   trunk/Tools/Maestro/Maestro/changelog.txt
   trunk/Tools/Maestro/SDK/sdk_changelog.txt
Log:
#1913: Add first cut of the GeoREST AddIn. This provides the following functionality:
 - Basic system navigation of the GeoREST root configuration directory
 - Editing of files through an embedded text editor
 - Editing of restcfg.xml through an embedded text editor with support for XML well-formedness checking
 - Previewing representations defined in a selected restcfg.xml document. The current previewable representations are:
    - OData
    - HTML (Many Template)
    - KML (Many Template)
    - KMZ (Many Template)

Modified: trunk/Tools/Maestro/Maestro/Maestro_All.sln
===================================================================
--- trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-01-24 07:59:49 UTC (rev 6451)
+++ trunk/Tools/Maestro/Maestro/Maestro_All.sln	2012-01-24 13:34:05 UTC (rev 6452)
@@ -126,6 +126,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RtMapInspector", "..\RtMapInspector\RtMapInspector.csproj", "{E204559D-EE92-4792-96E2-06F45654FAFC}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Maestro.AddIn.GeoRest", "..\Maestro.AddIn.GeoRest\Maestro.AddIn.GeoRest.csproj", "{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -292,6 +294,10 @@
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E204559D-EE92-4792-96E2-06F45654FAFC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: trunk/Tools/Maestro/Maestro/changelog.txt
===================================================================
--- trunk/Tools/Maestro/Maestro/changelog.txt	2012-01-24 07:59:49 UTC (rev 6451)
+++ trunk/Tools/Maestro/Maestro/changelog.txt	2012-01-24 13:34:05 UTC (rev 6452)
@@ -1,8 +1,10 @@
 4.1
 ---
 
+ - New experimental GeoREST AddIn for creating and editing GeoREST configurations
  - Support for v2.4.0 resources (Web Layout, Map Definition, Layer Definition, Watermark Definition, Symbol Definition)
  - Added extra symbol definition validation rules
+ - New utility for inspecting the state of a Runtime Map (RtMapInspector.exe)
  - Fix: Select font link in Text Symbol Definition dialog does nothing
  - Fix: Incorrect resource being flagged for Map Definition validation issues
  - Fix: Size Context not being saved for composite lines in Line Style Editor


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Commands/StartupCommand.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Commands/StartupCommand.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Commands/StartupCommand.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,42 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.Text;
+using ICSharpCode.Core;
+using Maestro.Base;
+using Maestro.Base.Services;
+using Maestro.Shared.UI;
+using Maestro.AddIn.GeoRest.UI;
+
+namespace Maestro.AddIn.GeoRest.Commands
+{
+    public class StartupCommand : AbstractCommand
+    {
+        public override void Run()
+        {
+            Workbench.WorkbenchInitialized += (s, e) =>
+            {
+                var vmgr = ServiceRegistry.GetService<ViewContentManager>();
+                vmgr.OpenContent(Properties.Resources.GeoRestExplorer, Properties.Resources.GeoRestExplorer, ViewRegion.Right, () => { return new FileSystemView(); });
+            };
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Maestro.AddIn.GeoRest.csproj
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Maestro.AddIn.GeoRest.csproj	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Maestro.AddIn.GeoRest.csproj	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{19A769B5-7CFA-4E9F-90D8-BF4A17F918C4}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Maestro.AddIn.GeoRest</RootNamespace>
+    <AssemblyName>Maestro.AddIn.GeoRest</AssemblyName>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\out\Debug\AddIns\GeoRest\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\out\Release\AddIns\GeoRest\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Commands\StartupCommand.cs" />
+    <Compile Include="Model\Model.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="Services\GeoRestService.cs" />
+    <Compile Include="UI\ConnectDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\ConnectDialog.Designer.cs">
+      <DependentUpon>ConnectDialog.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\TextEditor.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\TextEditor.Designer.cs">
+      <DependentUpon>TextEditor.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\FileSystemView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="UI\FileSystemView.Designer.cs">
+      <DependentUpon>FileSystemView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="UI\RestConfigEditor.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="UI\RestConfigEditor.Designer.cs">
+      <DependentUpon>RestConfigEditor.cs</DependentUpon>
+    </Compile>
+    <Service Include="{94E38DFF-614B-4cbd-B67C-F211BB35CE8B}" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\Maestro.Base\Maestro.Base.csproj">
+      <Project>{F1E2F468-5030-4DBA-968C-9620284AFAA1}</Project>
+      <Name>Maestro.Base</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Maestro.Editors\Maestro.Editors.csproj">
+      <Project>{5AD2CDBA-952E-4148-98A1-31D2E0D540D5}</Project>
+      <Name>Maestro.Editors</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Maestro.Shared.UI\Maestro.Shared.UI.csproj">
+      <Project>{CFD19053-2172-41D3-8460-0FD2123A1E88}</Project>
+      <Name>Maestro.Shared.UI</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
+      <Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
+      <Name>ICSharpCode.Core.WinForms</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\Thirdparty\SharpDevelop\ICSharpCode.Core\ICSharpCode.Core.csproj">
+      <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
+      <Name>ICSharpCode.Core</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\ConnectDialog.resx">
+      <DependentUpon>ConnectDialog.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\TextEditor.resx">
+      <DependentUpon>TextEditor.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\FileSystemView.resx">
+      <DependentUpon>FileSystemView.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="UI\RestConfigEditor.resx">
+      <DependentUpon>RestConfigEditor.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\plug.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\magnifier.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Manifest.addin">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
+    <None Include="Resources\arrow-circle-045-left.png" />
+    <None Include="Resources\document-task.png" />
+    <None Include="Resources\disk.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Copied: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin (from rev 6409, trunk/Tools/Maestro/Maestro.AddIn.FdoToolbox/Manifest.addin)
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Manifest.addin	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,30 @@
+<AddIn name="Maestro.AddIn.GeoRest"
+       author="Jackie Ng"
+       url="http://trac.osgeo.org/mapguide/wiki/maestro"
+       description="GeoRest AddIn for MapGuide Maestro"
+       addInManagerHidden="preinstalled">
+
+    <Manifest>
+        <Identity name="Maestro.AddIn.GeoRest" />
+    </Manifest>
+
+    <Runtime>
+        <Import assembly="../../Maestro.Base.dll" />
+        <Import assembly="Maestro.AddIn.GeoRest.dll" />
+    </Runtime>
+
+    <!-- Application-level services -->
+    <Path name="/Maestro/ApplicationServices">
+        <Class id="GeoRestService" class="Maestro.AddIn.GeoRest.Services.GeoRestService" />
+    </Path>
+
+    <!-- Singleton view content -->
+    <Path name="/Maestro/Shell/SingleViewContent">
+        <Class id="GeoRestExplorer" class="Maestro.AddIn.GeoRest.UI.FileSystemView" />
+    </Path>
+
+    <!-- Auto-start commands -->
+    <Path name="/Workspace/Autostart">
+        <Class id="Startup" class="Maestro.AddIn.GeoRest.Commands.StartupCommand" />
+    </Path>
+</AddIn>

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Model/Model.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Model/Model.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Model/Model.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,193 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.Text;
+
+namespace Maestro.AddIn.GeoRest.Model
+{
+    public class RepresentationPreview
+    {
+        public string Name { get; set; }
+
+        public string Url { get; set; }
+    }
+
+    public class FileSystemEntry
+    {
+        public string Name { get; set; }
+
+        public bool IsFolder { get; set; }
+    }
+
+    public class Resource
+    {
+        public string UriPart { get; set; }
+
+        public Source Source { get; set; }
+
+        public List<Representation> Representations { get; set; }
+    }
+
+    public abstract class Source
+    {
+        public SourceType Type { get; set; }
+    }
+
+    public enum SourceType
+    {
+        FDO,
+        MapGuide
+    }
+
+    public class FdoSource : Source 
+    {
+        public string Provider { get; set; }
+
+        public string ConnectionString { get; set; }
+
+        public string FeatureClass { get; set; }
+    }
+
+    public class MapGuideSource : Source
+    { 
+    }
+
+    public abstract class Representation
+    {
+        public string Renderer { get; private set; }
+
+        public List<Method> Methods { get; set; }
+
+        public RepresentationOrdering Ordering { get; set; }
+    }
+
+    public class RepresentationOrdering
+    {
+        public string Fields { get; set; }
+
+        public string Direction { get;set; }
+    }
+
+    public abstract class RepresentationWithPattern
+    {
+        public string Pattern { get; set; }
+    }
+
+    public class JsonRepresentation : RepresentationWithPattern
+    {
+
+    }
+
+    public class XmlRepresentation : RepresentationWithPattern
+    {
+        
+    }
+
+    public abstract class Method
+    {
+        public RestMethod Name { get; set; }
+    }
+
+    public class GetMethod
+    {
+        public int? MaxCount { get; set; }
+
+        public double? MaxBBOXWidth { get; set; }
+
+        public double? MaxBBOXHeight { get; set; }
+    }
+
+    public class WriteMethod
+    {
+        
+    }
+
+    public enum RestMethod
+    {
+        GET,
+        PUT,
+        POST,
+        DELETE
+    }
+
+    public class Png8Representation : RepresentationWithPattern
+    {
+        public string MapDefinition { get; set; }
+
+        public string SelectionLayer { get; set; }
+
+        public double DefaultZoomFactor { get; set; }
+    }
+
+    public class TemplateRepresentation : RepresentationWithPattern
+    {
+        public string MimeType { get; set; }
+
+        public TemplateSettings Templates { get; set; }
+    }
+
+    public class TemplateSettings
+    {
+        public string Section { get; set; }
+
+        public string Prefix { get; set; }
+
+        public TemplateReference Many { get; set; }
+        public TemplateReference Single { get; set; }
+        public TemplateReference None { get; set; }
+        public TemplateReference Error { get; set; }
+    }
+
+    public class TemplateReference
+    {
+        public string File { get; set; }
+    }
+
+    public class ODataRepresentation : Representation
+    {
+        public ODataFeedOverride FeedOverride { get; set; }
+
+        public ODataEntryOverride EntryOverride { get; set; }
+    }
+
+    public class ODataFeedOverride : Representation
+    {
+        public string Title { get; set; }
+
+        public ODataAuthor Author { get; set; }
+    }
+
+    public class ODataAuthor
+    {
+        public string Name { get; set; }
+
+        public string Uri { get; set; }
+
+        public string Email { get; set; }
+    }
+
+    public class ODataEntryOverride : Representation
+    {
+        public string Title { get; set; }
+
+        public ODataAuthor Author { get; set; }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/AssemblyInfo.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/AssemblyInfo.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/AssemblyInfo.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Maestro.AddIn.GeoRest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Maestro.AddIn.GeoRest")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("4ec348e9-6593-4eed-b03e-04c43646497a")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.Designer.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,242 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:2.0.50727.5448
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Maestro.AddIn.GeoRest.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Maestro.AddIn.GeoRest.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        internal static System.Drawing.Bitmap arrow_circle_045_left {
+            get {
+                object obj = ResourceManager.GetObject("arrow-circle-045-left", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap disk {
+            get {
+                object obj = ResourceManager.GetObject("disk", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap document_task {
+            get {
+                object obj = ResourceManager.GetObject("document-task", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Only files named restcfg.xml can be edited.
+        /// </summary>
+        internal static string ErrCanOnlyEditRestCfg {
+            get {
+                return ResourceManager.GetString("ErrCanOnlyEditRestCfg", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The specified configuration root directory does not exist.
+        /// </summary>
+        internal static string ErrConfigRootDoesNotExist {
+            get {
+                return ResourceManager.GetString("ErrConfigRootDoesNotExist", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to GeoRest URL not specified.
+        /// </summary>
+        internal static string ErrGeoRestUrlNotSpecified {
+            get {
+                return ResourceManager.GetString("ErrGeoRestUrlNotSpecified", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Could not find any previewable representations in this file.
+        /// </summary>
+        internal static string ErrNoPreviewableRepresentations {
+            get {
+                return ResourceManager.GetString("ErrNoPreviewableRepresentations", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to File is not restcfg.xml. Cannot extract previewable representations.
+        /// </summary>
+        internal static string ErrPreviewNotRestCfg {
+            get {
+                return ResourceManager.GetString("ErrPreviewNotRestCfg", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The specified restcfg.xml is missing the top-level &lt;Resource&gt; node. This is probably an invalid document.
+        /// </summary>
+        internal static string ErrRestCfgMissingResourceNode {
+            get {
+                return ResourceManager.GetString("ErrRestCfgMissingResourceNode", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to The specified restcfg.xml is missing a uripart attribute in its &lt;Resource&gt; element. Previewable representations cannot be determined without this attribute.
+        /// </summary>
+        internal static string ErrRestCfgMissingUriPart {
+            get {
+                return ResourceManager.GetString("ErrRestCfgMissingUriPart", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to File saved to: {0}.
+        /// </summary>
+        internal static string FileSaved {
+            get {
+                return ResourceManager.GetString("FileSaved", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to GeoREST Explorer.
+        /// </summary>
+        internal static string GeoRestExplorer {
+            get {
+                return ResourceManager.GetString("GeoRestExplorer", resourceCulture);
+            }
+        }
+        
+        internal static System.Drawing.Bitmap magnifier {
+            get {
+                object obj = ResourceManager.GetObject("magnifier", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        internal static System.Drawing.Bitmap plug {
+            get {
+                object obj = ResourceManager.GetObject("plug", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to HTML (Many template) - {0}.
+        /// </summary>
+        internal static string PreviewTypeHtmlMany {
+            get {
+                return ResourceManager.GetString("PreviewTypeHtmlMany", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to KML (Many template) - {0}.
+        /// </summary>
+        internal static string PreviewTypeKmlMany {
+            get {
+                return ResourceManager.GetString("PreviewTypeKmlMany", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to KMZ (Many template) - {0}.
+        /// </summary>
+        internal static string PreviewTypeKmzMany {
+            get {
+                return ResourceManager.GetString("PreviewTypeKmzMany", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to OData (Raw) - {0}.
+        /// </summary>
+        internal static string PreviewTypeODataRaw {
+            get {
+                return ResourceManager.GetString("PreviewTypeODataRaw", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Choose a Representation to Preview.
+        /// </summary>
+        internal static string PromptSelectPreview {
+            get {
+                return ResourceManager.GetString("PromptSelectPreview", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Select Representation Preview.
+        /// </summary>
+        internal static string TitleSelectPreview {
+            get {
+                return ResourceManager.GetString("TitleSelectPreview", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to XML Document is well-formed.
+        /// </summary>
+        internal static string XmlWellFormed {
+            get {
+                return ResourceManager.GetString("XmlWellFormed", resourceCulture);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Properties/Resources.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="ErrCanOnlyEditRestCfg" xml:space="preserve">
+    <value>Only files named restcfg.xml can be edited</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="document-task" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\document-task.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="disk" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\disk.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="magnifier" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\magnifier.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="ErrGeoRestUrlNotSpecified" xml:space="preserve">
+    <value>GeoRest URL not specified</value>
+  </data>
+  <data name="FileSaved" xml:space="preserve">
+    <value>File saved to: {0}</value>
+  </data>
+  <data name="ErrConfigRootDoesNotExist" xml:space="preserve">
+    <value>The specified configuration root directory does not exist</value>
+  </data>
+  <data name="GeoRestExplorer" xml:space="preserve">
+    <value>GeoREST Explorer</value>
+  </data>
+  <data name="plug" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\plug.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="XmlWellFormed" xml:space="preserve">
+    <value>XML Document is well-formed</value>
+  </data>
+  <data name="arrow-circle-045-left" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\arrow-circle-045-left.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="ErrNoPreviewableRepresentations" xml:space="preserve">
+    <value>Could not find any previewable representations in this file</value>
+  </data>
+  <data name="ErrPreviewNotRestCfg" xml:space="preserve">
+    <value>File is not restcfg.xml. Cannot extract previewable representations</value>
+  </data>
+  <data name="ErrRestCfgMissingResourceNode" xml:space="preserve">
+    <value>The specified restcfg.xml is missing the top-level &lt;Resource&gt; node. This is probably an invalid document</value>
+  </data>
+  <data name="ErrRestCfgMissingUriPart" xml:space="preserve">
+    <value>The specified restcfg.xml is missing a uripart attribute in its &lt;Resource&gt; element. Previewable representations cannot be determined without this attribute</value>
+  </data>
+  <data name="PreviewTypeHtmlMany" xml:space="preserve">
+    <value>HTML (Many template) - {0}</value>
+  </data>
+  <data name="PreviewTypeKmlMany" xml:space="preserve">
+    <value>KML (Many template) - {0}</value>
+  </data>
+  <data name="PreviewTypeKmzMany" xml:space="preserve">
+    <value>KMZ (Many template) - {0}</value>
+  </data>
+  <data name="PreviewTypeODataRaw" xml:space="preserve">
+    <value>OData (Raw) - {0}</value>
+  </data>
+  <data name="PromptSelectPreview" xml:space="preserve">
+    <value>Choose a Representation to Preview</value>
+  </data>
+  <data name="TitleSelectPreview" xml:space="preserve">
+    <value>Select Representation Preview</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/arrow-circle-045-left.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/arrow-circle-045-left.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/disk.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/disk.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/document-task.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/document-task.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/magnifier.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/magnifier.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/plug.png
===================================================================
(Binary files differ)


Property changes on: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Resources/plug.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Services/GeoRestService.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Services/GeoRestService.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/Services/GeoRestService.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,179 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.Text;
+using Maestro.Shared.UI;
+using Maestro.AddIn.GeoRest.Model;
+using System.IO;
+using System.Xml;
+
+namespace Maestro.AddIn.GeoRest.Services
+{
+    public class GeoRestService : ServiceBase
+    {
+        private string _configRootPath;
+        private string _geoRestUrl;
+
+        public void Connect(string configRootPath, string geoRestUrl)
+        {
+            _configRootPath = configRootPath;
+            _geoRestUrl = geoRestUrl;
+        }
+
+        public string ConfigurationRoot { get { return _configRootPath; } }
+
+        public string GeoRestUrl 
+        { 
+            get 
+            {
+                if (!_geoRestUrl.EndsWith("/"))
+                    _geoRestUrl += "/";
+                return _geoRestUrl; 
+            } 
+        }
+
+        public FileSystemEntry[] GetEntries(string path)
+        {
+            var entries = new List<FileSystemEntry>();
+            foreach (var dir in Directory.GetDirectories(path))
+            {
+                entries.Add(new FileSystemEntry() { Name = Path.GetFileName(dir), IsFolder = true });
+            }
+            foreach (var f in Directory.GetFiles(path))
+            {
+                entries.Add(new FileSystemEntry() { Name = Path.GetFileName(f), IsFolder = false });
+            }
+            return entries.ToArray();
+        }
+
+        private static XmlNode FindManyTemplateNode(XmlNode representationNode)
+        {
+            foreach (XmlNode child in representationNode.ChildNodes)
+            {
+                if (child.Name == "Templates")
+                {
+                    foreach (XmlNode tpl in child.ChildNodes)
+                    {
+                        if (tpl.Name == "Many")
+                        {
+                            return tpl;
+                        }
+                    }
+                }
+            }
+            return null;
+        }
+
+        public RepresentationPreview[] GetRepresentationPreviews(string path)
+        {
+            if (!path.ToLower().EndsWith("restcfg.xml"))
+                throw new InvalidOperationException(Properties.Resources.ErrPreviewNotRestCfg);
+
+            XmlDocument doc = new XmlDocument();
+            doc.Load(path);
+
+            XmlNode resNode = doc.SelectSingleNode("//RestConfig/Data/Resource");
+            if (resNode == null)
+                throw new InvalidOperationException(Properties.Resources.ErrRestCfgMissingResourceNode);
+
+            if (resNode.Attributes["uripart"] == null)
+                throw new InvalidOperationException(Properties.Resources.ErrRestCfgMissingUriPart);
+
+            string uripart = resNode.Attributes["uripart"].Value;
+
+            // This is the current list of previewable representations
+            //
+            // - OData
+            // - KML (Many template specified)
+            // - KMZ (Many template specified)
+            // - HTML (Many template specified)
+            // 
+            // Single template reperesentations cannot be previewed as they require identifying
+            // information (ids) that cannot be inferred 
+
+            List<RepresentationPreview> previewableItems = new List<RepresentationPreview>();
+            var representations = doc.GetElementsByTagName("Representation");
+            foreach (XmlNode repNode in representations)
+            {
+                var renAttr = repNode.Attributes["renderer"];
+                if (renAttr != null)
+                {
+                    switch (renAttr.Value)
+                    {
+                        case "Template":
+                            {
+                                var patAttr = repNode.Attributes["pattern"];
+                                if (patAttr != null)
+                                {
+                                    var many = FindManyTemplateNode(repNode);
+                                    if (many != null)
+                                    {
+                                        switch (patAttr.Value)
+                                        {
+                                            case ".kml":
+                                                {
+                                                    previewableItems.Add(new RepresentationPreview()
+                                                    {
+                                                        Name = string.Format(Properties.Resources.PreviewTypeKmlMany, uripart),
+                                                        Url = _geoRestUrl + "data/" + uripart + "/.kml"
+                                                    });
+                                                }
+                                                break;
+                                            case ".kmz":
+                                                {
+                                                    previewableItems.Add(new RepresentationPreview()
+                                                    {
+                                                        Name = string.Format(Properties.Resources.PreviewTypeKmzMany, uripart),
+                                                        Url = _geoRestUrl + "data/" + uripart + "/.kmz"
+                                                    });
+                                                }
+                                                break;
+                                            case ".html":
+                                                {
+                                                    previewableItems.Add(new RepresentationPreview()
+                                                    {
+                                                        Name = string.Format(Properties.Resources.PreviewTypeHtmlMany, uripart),
+                                                        Url = _geoRestUrl + "data/" + uripart + "/.html"
+                                                    });
+                                                }
+                                                break;
+                                        }
+                                    }
+                                }
+                            }
+                            break;
+                        case "OData":
+                            {
+                                previewableItems.Add(new RepresentationPreview()
+                                {
+                                    Name = string.Format(Properties.Resources.PreviewTypeODataRaw, uripart),
+                                    Url = _geoRestUrl + "OData.svc/" + uripart
+                                });
+                            }
+                            break;
+                    }
+                }
+            }
+
+            return previewableItems.ToArray();
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.Designer.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,113 @@
+namespace Maestro.AddIn.GeoRest.UI
+{
+    partial class ConnectDialog
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConnectDialog));
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.txtConfigRoot = new System.Windows.Forms.TextBox();
+            this.txtGeoRestUrl = new System.Windows.Forms.TextBox();
+            this.btnBrowse = new System.Windows.Forms.Button();
+            this.btnConnect = new System.Windows.Forms.Button();
+            this.btnCancel = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // label1
+            // 
+            resources.ApplyResources(this.label1, "label1");
+            this.label1.Name = "label1";
+            // 
+            // label2
+            // 
+            resources.ApplyResources(this.label2, "label2");
+            this.label2.Name = "label2";
+            // 
+            // txtConfigRoot
+            // 
+            resources.ApplyResources(this.txtConfigRoot, "txtConfigRoot");
+            this.txtConfigRoot.Name = "txtConfigRoot";
+            // 
+            // txtGeoRestUrl
+            // 
+            resources.ApplyResources(this.txtGeoRestUrl, "txtGeoRestUrl");
+            this.txtGeoRestUrl.Name = "txtGeoRestUrl";
+            // 
+            // btnBrowse
+            // 
+            resources.ApplyResources(this.btnBrowse, "btnBrowse");
+            this.btnBrowse.Name = "btnBrowse";
+            this.btnBrowse.UseVisualStyleBackColor = true;
+            this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
+            // 
+            // btnConnect
+            // 
+            resources.ApplyResources(this.btnConnect, "btnConnect");
+            this.btnConnect.Name = "btnConnect";
+            this.btnConnect.UseVisualStyleBackColor = true;
+            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+            // 
+            // btnCancel
+            // 
+            resources.ApplyResources(this.btnCancel, "btnCancel");
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.UseVisualStyleBackColor = true;
+            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
+            // 
+            // ConnectDialog
+            // 
+            this.AcceptButton = this.btnConnect;
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.CancelButton = this.btnCancel;
+            resources.ApplyResources(this, "$this");
+            this.ControlBox = false;
+            this.Controls.Add(this.btnCancel);
+            this.Controls.Add(this.btnConnect);
+            this.Controls.Add(this.btnBrowse);
+            this.Controls.Add(this.txtGeoRestUrl);
+            this.Controls.Add(this.txtConfigRoot);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Name = "ConnectDialog";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.TextBox txtConfigRoot;
+        private System.Windows.Forms.TextBox txtGeoRestUrl;
+        private System.Windows.Forms.Button btnBrowse;
+        private System.Windows.Forms.Button btnConnect;
+        private System.Windows.Forms.Button btnCancel;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,69 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.IO;
+
+namespace Maestro.AddIn.GeoRest.UI
+{
+    public partial class ConnectDialog : Form
+    {
+        public ConnectDialog()
+        {
+            InitializeComponent();
+        }
+
+        public string ConfigurationRoot { get { return txtConfigRoot.Text; } }
+
+        public string GeoRestUrl { get { return txtGeoRestUrl.Text; } }
+
+        private void btnBrowse_Click(object sender, EventArgs e)
+        {
+            using (var browser = new FolderBrowserDialog())
+            {
+                browser.ShowNewFolderButton = true;
+                if (browser.ShowDialog() == DialogResult.OK)
+                {
+                    txtConfigRoot.Text = browser.SelectedPath;
+                }
+            }
+        }
+
+        private void btnCancel_Click(object sender, EventArgs e)
+        {
+            this.DialogResult = DialogResult.Cancel;
+        }
+
+        private void btnConnect_Click(object sender, EventArgs e)
+        {
+            if (!Directory.Exists(txtConfigRoot.Text))
+                MessageBox.Show(Properties.Resources.ErrConfigRootDoesNotExist);
+            if (string.IsNullOrEmpty(txtGeoRestUrl.Text))
+                MessageBox.Show(Properties.Resources.ErrGeoRestUrlNotSpecified);
+
+            this.DialogResult = DialogResult.OK;
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/ConnectDialog.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="label1.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="label1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 13</value>
+  </data>
+  <data name="label1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>192, 13</value>
+  </data>
+  <data name="label1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="label1.Text" xml:space="preserve">
+    <value>GeoREST Configuration Root Directory</value>
+  </data>
+  <data name="&gt;&gt;label1.Name" xml:space="preserve">
+    <value>label1</value>
+  </data>
+  <data name="&gt;&gt;label1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+    <value>6</value>
+  </data>
+  <data name="label2.AutoSize" type="System.Boolean, mscorlib">
+    <value>True</value>
+  </data>
+  <data name="label2.Location" type="System.Drawing.Point, System.Drawing">
+    <value>13, 60</value>
+  </data>
+  <data name="label2.Size" type="System.Drawing.Size, System.Drawing">
+    <value>115, 13</value>
+  </data>
+  <data name="label2.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="label2.Text" xml:space="preserve">
+    <value>GeoREST Server URL</value>
+  </data>
+  <data name="&gt;&gt;label2.Name" xml:space="preserve">
+    <value>label2</value>
+  </data>
+  <data name="&gt;&gt;label2.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+    <value>5</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="txtConfigRoot.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtConfigRoot.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 29</value>
+  </data>
+  <data name="txtConfigRoot.Size" type="System.Drawing.Size, System.Drawing">
+    <value>480, 20</value>
+  </data>
+  <data name="txtConfigRoot.TabIndex" type="System.Int32, mscorlib">
+    <value>2</value>
+  </data>
+  <data name="&gt;&gt;txtConfigRoot.Name" xml:space="preserve">
+    <value>txtConfigRoot</value>
+  </data>
+  <data name="&gt;&gt;txtConfigRoot.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtConfigRoot.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;txtConfigRoot.ZOrder" xml:space="preserve">
+    <value>4</value>
+  </data>
+  <data name="txtGeoRestUrl.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Left, Right</value>
+  </data>
+  <data name="txtGeoRestUrl.Location" type="System.Drawing.Point, System.Drawing">
+    <value>16, 76</value>
+  </data>
+  <data name="txtGeoRestUrl.Size" type="System.Drawing.Size, System.Drawing">
+    <value>480, 20</value>
+  </data>
+  <data name="txtGeoRestUrl.TabIndex" type="System.Int32, mscorlib">
+    <value>3</value>
+  </data>
+  <data name="txtGeoRestUrl.Text" xml:space="preserve">
+    <value>http://localhost:99/rest/</value>
+  </data>
+  <data name="&gt;&gt;txtGeoRestUrl.Name" xml:space="preserve">
+    <value>txtGeoRestUrl</value>
+  </data>
+  <data name="&gt;&gt;txtGeoRestUrl.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtGeoRestUrl.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;txtGeoRestUrl.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <data name="btnBrowse.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Top, Right</value>
+  </data>
+  <data name="btnBrowse.Location" type="System.Drawing.Point, System.Drawing">
+    <value>502, 27</value>
+  </data>
+  <data name="btnBrowse.Size" type="System.Drawing.Size, System.Drawing">
+    <value>32, 23</value>
+  </data>
+  <data name="btnBrowse.TabIndex" type="System.Int32, mscorlib">
+    <value>4</value>
+  </data>
+  <data name="btnBrowse.Text" xml:space="preserve">
+    <value>...</value>
+  </data>
+  <data name="&gt;&gt;btnBrowse.Name" xml:space="preserve">
+    <value>btnBrowse</value>
+  </data>
+  <data name="&gt;&gt;btnBrowse.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnBrowse.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;btnBrowse.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <data name="btnConnect.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
+  </data>
+  <data name="btnConnect.Location" type="System.Drawing.Point, System.Drawing">
+    <value>340, 111</value>
+  </data>
+  <data name="btnConnect.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="btnConnect.TabIndex" type="System.Int32, mscorlib">
+    <value>5</value>
+  </data>
+  <data name="btnConnect.Text" xml:space="preserve">
+    <value>Connect</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.Name" xml:space="preserve">
+    <value>btnConnect</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+    <value>Bottom, Right</value>
+  </data>
+  <data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
+    <value>421, 111</value>
+  </data>
+  <data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
+    <value>75, 23</value>
+  </data>
+  <data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
+    <value>6</value>
+  </data>
+  <data name="btnCancel.Text" xml:space="preserve">
+    <value>Cancel</value>
+  </data>
+  <data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
+    <value>btnCancel</value>
+  </data>
+  <data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>546, 145</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Connect</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>ConnectDialog</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.Designer.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,174 @@
+namespace Maestro.AddIn.GeoRest.UI
+{
+    partial class FileSystemView
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileSystemView));
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnConnect = new System.Windows.Forms.ToolStripButton();
+            this.btnRefresh = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnPreview = new System.Windows.Forms.ToolStripButton();
+            this.fileTree = new System.Windows.Forms.TreeView();
+            this.imgList = new System.Windows.Forms.ImageList(this.components);
+            this.ctxFolder = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.createConfigurationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.ctxConfig = new System.Windows.Forms.ContextMenuStrip(this.components);
+            this.addRepresentationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.editXMLToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.toolStrip1.SuspendLayout();
+            this.ctxFolder.SuspendLayout();
+            this.ctxConfig.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnConnect,
+            this.toolStripSeparator1,
+            this.btnPreview,
+            this.btnRefresh});
+            this.toolStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            // 
+            // btnConnect
+            // 
+            this.btnConnect.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.plug;
+            resources.ApplyResources(this.btnConnect, "btnConnect");
+            this.btnConnect.Name = "btnConnect";
+            this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+            // 
+            // btnRefresh
+            // 
+            this.btnRefresh.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnRefresh, "btnRefresh");
+            this.btnRefresh.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.arrow_circle_045_left;
+            this.btnRefresh.Name = "btnRefresh";
+            this.btnRefresh.Click += new System.EventHandler(this.btnRefresh_Click);
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+            // 
+            // btnPreview
+            // 
+            this.btnPreview.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
+            resources.ApplyResources(this.btnPreview, "btnPreview");
+            this.btnPreview.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.magnifier;
+            this.btnPreview.Name = "btnPreview";
+            this.btnPreview.Click += new System.EventHandler(this.btnPreview_Click);
+            // 
+            // fileTree
+            // 
+            resources.ApplyResources(this.fileTree, "fileTree");
+            this.fileTree.ImageList = this.imgList;
+            this.fileTree.Name = "fileTree";
+            this.fileTree.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.fileTree_NodeMouseDoubleClick);
+            this.fileTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.fileTree_AfterSelect);
+            this.fileTree.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.fileTree_AfterExpand);
+            // 
+            // imgList
+            // 
+            this.imgList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgList.ImageStream")));
+            this.imgList.TransparentColor = System.Drawing.Color.Transparent;
+            this.imgList.Images.SetKeyName(0, "folder-horizontal.png");
+            this.imgList.Images.SetKeyName(1, "document-task.png");
+            this.imgList.Images.SetKeyName(2, "document.png");
+            this.imgList.Images.SetKeyName(3, "odata.png");
+            this.imgList.Images.SetKeyName(4, "json.png");
+            this.imgList.Images.SetKeyName(5, "document-xaml.png");
+            this.imgList.Images.SetKeyName(6, "image.png");
+            this.imgList.Images.SetKeyName(7, "document-node.png");
+            this.imgList.Images.SetKeyName(8, "document-template.png");
+            // 
+            // ctxFolder
+            // 
+            this.ctxFolder.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.createConfigurationToolStripMenuItem});
+            this.ctxFolder.Name = "ctxFolder";
+            resources.ApplyResources(this.ctxFolder, "ctxFolder");
+            // 
+            // createConfigurationToolStripMenuItem
+            // 
+            this.createConfigurationToolStripMenuItem.Name = "createConfigurationToolStripMenuItem";
+            resources.ApplyResources(this.createConfigurationToolStripMenuItem, "createConfigurationToolStripMenuItem");
+            // 
+            // ctxConfig
+            // 
+            this.ctxConfig.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.addRepresentationToolStripMenuItem,
+            this.editXMLToolStripMenuItem});
+            this.ctxConfig.Name = "ctxConfig";
+            resources.ApplyResources(this.ctxConfig, "ctxConfig");
+            // 
+            // addRepresentationToolStripMenuItem
+            // 
+            this.addRepresentationToolStripMenuItem.Name = "addRepresentationToolStripMenuItem";
+            resources.ApplyResources(this.addRepresentationToolStripMenuItem, "addRepresentationToolStripMenuItem");
+            // 
+            // editXMLToolStripMenuItem
+            // 
+            this.editXMLToolStripMenuItem.Name = "editXMLToolStripMenuItem";
+            resources.ApplyResources(this.editXMLToolStripMenuItem, "editXMLToolStripMenuItem");
+            // 
+            // FileSystemView
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            this.Controls.Add(this.fileTree);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "FileSystemView";
+            resources.ApplyResources(this, "$this");
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ctxFolder.ResumeLayout(false);
+            this.ctxConfig.ResumeLayout(false);
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnConnect;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.TreeView fileTree;
+        private System.Windows.Forms.ImageList imgList;
+        private System.Windows.Forms.ContextMenuStrip ctxFolder;
+        private System.Windows.Forms.ContextMenuStrip ctxConfig;
+        private System.Windows.Forms.ToolStripMenuItem createConfigurationToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem addRepresentationToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem editXMLToolStripMenuItem;
+        private System.Windows.Forms.ToolStripButton btnRefresh;
+        private System.Windows.Forms.ToolStripButton btnPreview;
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,218 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Text;
+using System.Windows.Forms;
+using Maestro.AddIn.GeoRest.Model;
+using Maestro.AddIn.GeoRest.Services;
+using Maestro.Base.Services;
+using System.IO;
+using Maestro.Shared.UI;
+using Maestro.Editors.Common;
+
+namespace Maestro.AddIn.GeoRest.UI
+{
+    public partial class FileSystemView : ViewContentBase
+    {
+        public FileSystemView()
+        {
+            InitializeComponent();
+            this.Title = this.Description = Properties.Resources.GeoRestExplorer;
+        }
+
+        const int IDX_FOLDER = 0;
+        const int IDX_CONFIG = 1;
+        const int IDX_GENERIC = 2;
+        const int IDX_ODATA = 3;
+        const int IDX_JSON = 4;
+        const int IDX_XML = 5;
+        const int IDX_IMAGE = 6;
+        const int IDX_FDOSCHEMA = 7;
+        const int IDX_TEMPLATE = 8;
+
+        private GeoRestService _service;
+
+        protected override void OnLoad(EventArgs e)
+        {
+            _service = ServiceRegistry.GetService<GeoRestService>();
+            base.OnLoad(e);
+        }
+
+        public override ViewRegion DefaultRegion
+        {
+            get
+            {
+                return ViewRegion.Right;
+            }
+        }
+
+        public override bool AllowUserClose
+        {
+            get
+            {
+                return false;
+            }
+        }
+
+        private void fileTree_AfterSelect(object sender, TreeViewEventArgs e)
+        {
+            FileSystemEntry res = e.Node.Tag as FileSystemEntry;
+            btnPreview.Enabled = (res != null && !res.IsFolder && res.Name.ToLower().Equals("restcfg.xml"));
+            btnRefresh.Enabled = (res != null && res.IsFolder);
+        }
+
+        private void btnConnect_Click(object sender, EventArgs e)
+        {
+            using (var diag = new ConnectDialog())
+            {
+                if (diag.ShowDialog() == DialogResult.OK)
+                {
+                    fileTree.Nodes.Clear();
+                    _service.Connect(diag.ConfigurationRoot, diag.GeoRestUrl);
+                    var node = new TreeNode();
+                    node.Text = "Root";
+                    node.Tag = new FileSystemEntry() { Name = _service.ConfigurationRoot, IsFolder = true };
+                    node.ImageIndex = node.SelectedImageIndex = IDX_FOLDER;
+                    fileTree.Nodes.Add(node);
+                    var entries = _service.GetEntries(diag.ConfigurationRoot);
+                    PopulateEntries(node.Nodes, entries);
+                }
+            }
+        }
+
+        class Placeholder { }
+
+        private void PopulateEntries(TreeNodeCollection nodes, FileSystemEntry[] entries)
+        {
+            nodes.Clear();
+            foreach (var ent in entries)
+            {
+                var node = new TreeNode();
+                node.Text = ent.Name;
+                node.Tag = ent;
+                node.ImageIndex = node.SelectedImageIndex = IDX_GENERIC;
+                if (ent.IsFolder)
+                {
+                    node.ImageIndex = node.SelectedImageIndex = IDX_FOLDER;
+                    node.Nodes.Add(new TreeNode() { Tag = new Placeholder() });
+                }
+                else if (ent.Name.ToLower().Equals("restcfg.xml"))
+                {
+                    node.ImageIndex = node.SelectedImageIndex = IDX_CONFIG;
+                }
+                nodes.Add(node);
+            }
+        }
+
+        private string GetFilePath(TreeNode node)
+        {
+            var ent = (FileSystemEntry)node.Tag;
+            LinkedList<string> components = new LinkedList<string>();
+
+            var parent = node.Parent;
+            components.AddFirst(ent.Name);
+            while (parent != null)
+            {
+                ent = parent.Tag as FileSystemEntry;
+                components.AddFirst(ent.Name);
+                parent = parent.Parent;
+            }
+
+            return Path.Combine(_service.ConfigurationRoot, string.Join(Path.DirectorySeparatorChar.ToString(), new List<string>(components).ToArray()));
+        }
+
+        private void fileTree_AfterExpand(object sender, TreeViewEventArgs e)
+        {
+            var node = e.Node;
+            node.Nodes.Clear();
+
+            var entries = _service.GetEntries(GetFilePath(node));
+            PopulateEntries(node.Nodes, entries);
+        }
+
+        private void fileTree_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
+        {
+            var ent = e.Node.Tag as FileSystemEntry;
+            if (ent != null && !ent.IsFolder)
+            {
+                string fullPath = GetFilePath(e.Node);
+                if (ent.Name.ToLower().Equals("restcfg.xml"))
+                {
+                    var editor = new RestConfigEditor();
+                    editor.LoadFile(fullPath);
+                    editor.ShowDialog();
+                }
+                else 
+                {
+                    var editor = new TextEditor();
+                    editor.LoadFile(fullPath);
+                    editor.ShowDialog();
+                }
+            }
+        }
+
+        private void btnPreview_Click(object sender, EventArgs e)
+        {
+            RepresentationPreview[] previewables = null;
+            try
+            {
+                previewables = _service.GetRepresentationPreviews(GetFilePath(fileTree.SelectedNode));
+                if (previewables.Length == 0)
+                {
+                    MessageBox.Show(Properties.Resources.ErrNoPreviewableRepresentations);
+                    return;
+                }
+
+                var result = GenericItemSelectionDialog.SelectItem<RepresentationPreview>(
+                    Properties.Resources.TitleSelectPreview,
+                    Properties.Resources.PromptSelectPreview,
+                    previewables,
+                    "Name",
+                    "Url");
+
+                if (result != null)
+                {
+                    var launcher = ServiceRegistry.GetService<UrlLauncherService>();
+                    launcher.OpenUrl(result.Url);
+                }
+            }
+            catch (Exception ex)
+            {
+                ErrorDialog.Show(ex);
+            }
+        }
+
+        private void btnRefresh_Click(object sender, EventArgs e)
+        {
+            btnRefresh.Enabled = false;
+            var node = fileTree.SelectedNode;
+            node.Nodes.Clear();
+
+            var entries = _service.GetEntries(GetFilePath(node));
+            PopulateEntries(node.Nodes, entries);
+        }
+    }
+
+    public delegate void ObjectSelectionEventHandler<T>(object sender, T obj);
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/FileSystemView.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,402 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="btnConnect.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnConnect.Size" type="System.Drawing.Size, System.Drawing">
+    <value>72, 22</value>
+  </data>
+  <data name="btnConnect.Text" xml:space="preserve">
+    <value>Connect</value>
+  </data>
+  <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="btnPreview.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnPreview.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnPreview.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnPreview.Text" xml:space="preserve">
+    <value>Preview</value>
+  </data>
+  <data name="btnRefresh.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnRefresh.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnRefresh.Size" type="System.Drawing.Size, System.Drawing">
+    <value>23, 22</value>
+  </data>
+  <data name="btnRefresh.Text" xml:space="preserve">
+    <value>Refresh</value>
+  </data>
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>226, 25</value>
+  </data>
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
+    <value>3</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="fileTree.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="fileTree.ImageIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <metadata name="imgList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>122, 17</value>
+  </metadata>
+  <data name="imgList.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
+        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA6
+        EQAAAk1TRnQBSQFMAgEBCQEAAVABAAFQAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+        AwABQAMAATADAAEBAQABCAYAAQwYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
+        AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
+        AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
+        AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
+        AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
+        AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
+        ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
+        AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
+        AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
+        AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
+        AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
+        AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
+        AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
+        AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
+        AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
+        ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
+        Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
+        AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
+        AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
+        AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
+        ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
+        Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
+        AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
+        AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
+        AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
+        AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
+        AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
+        AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAD/8xAAH0AbwLBwG8
+        AfQyAAEHC/8BBzMAAbwB/wG8AfMBvAHzAbwB8wEHAfIBBwH/AbwzAAG8Af8B8wP/AfMC/wH0AfEB/wG8
+        MwABvAH/AbwD/wEHAf8C9AEHAf8BvDMAAbwB/wHzA/8B8gP0AfEB/wG8MwABvAH/AbwD/wEHA/QBBwH0
+        AbwzAAG8Af8B8wL/AfQB8QP0AfAB9AG8MwAB8AH/AQcB/wL0AQcC9AHzAe8B9AHwMwAB8AH/AfID9AHx
+        AfQC8wHwAfQB8DMAAfAB/wEHA/QBBwLzAfEB7wH0AfAzAAHwAf8B8QP0AfAB8wHxA/cBvDMAAfAB/wEH
+        AfEBBwHwAe8B8ALvAf8B8AH0MwAB8QP/BfQBBwHxAfQ0AAHzCfIB9DUADv8BAAH/AfQBvAoHAbwB9AH/
+        EAAB/wH0AbwKBwG8AfQB/wEAAv8B9AHyAfcBbQIVAW0B9wHyAfQC/wEAAv8BBwr/AQcU/wEHCv8BBwL/
+        AwAB8QHqAW0B6wHqARUBEQFDARIB8QUAAbwK/wG8AgABvA4HAbwCAAG8Cv8BvAQAAfEB6gLsAeoBEwEU
+        AUMCEQESAfEEAAG8Av8B7wT/AfcB9AH/AbwCAAEHAf8M9AH/AQcCAAG8Bv8BBwHtAQcB/wG8AwAB/wHr
+        A+wBbQEVAUMBFAEVAkMBbQH/AwABvAH/Au8B3QGsAdMBGQHvAfcB/wG8AgABvAH0A4sBrQS0AboD3AH0
+        AbwCAAG8BP8B7wKSAfQBkgH/AbwDAAG8AW0B7AHtAuwC9AHsAeoBFAEVARMBvAMAAbwB8wFtAf8CrALT
+        AfQBbQHzAbwCAAG8AfQDiwGtA7QBuwEJAdwCGQH0AbwCAAG8BP8B9wH/AbwB7wG8Af8BvAMAAe0CbQH3
+        AZIB8wIAAfMBkgFtARMBEgHtAwABvAHzAesB/wLVAqwB9AHrAfMBvAIAAbwB9AFlAWsDbAGLA5EBtAG7
+        AQkB9AG8AgABvAT/AfcE9AH/AbwDAAHrAm0C7wH/AgAB/wHtAewB6gFtAesDAAG8Af8CBwEZAdUBrAEJ
+        AQcB7wH0AbwCAAG8Af8CSQFsAZIBuwG8AhkD9AL/AbwCAAG8Af8BBwGSAQcB7wH0AQcBkgEHAfQBvAMA
+        AewCEgH3AQcB/wIAAf8B7AHtAW0B6wHsAwAB8AL/AQcE9AEHAfMB9AHwAgAB8AH/AnEBuwUZAfQBGQL0
+        Af8B8AIAAfAB/wHvAfQE7wH0AfcB9AHwAwABkgITAW0BBwHzAgAB8gTsAZIDAAHwAv8F9ALzAfQB8AIA
+        AfAB/wG7AQkD3QEZAd0CCQIZAfQB/wHwAgAB8AH/AfEBvAHwAvQBvAEHAbwB9AHwAwAB8AHqARUBFAFt
+        AewC9AHsAesB7AGSAewB8AMAAfAB/wX0AvMB8QH0AfACAAHwAf8C1QHbAdwB2wTcAQkCGQH/AfACAAHw
+        Af8F9ALzAfEB9AHwAwAB/wHsARQBFQIUAkMB6gFtAvcB7AH/AwAB8AH/BPQC8wLxAfQB8AIAAfAB/wfU
+        AtUB3AEJAdwB/wHwAgAB8AH/BPQC8wLxAfQB8AQAAfIB7AEUARUCFAETAeoB7QHvAewB8gQAAfAB/wP0
+        AvMB8QP3AbwCAAHwDv8B8AIAAfAB/wP0AvMB8QP3AbwFAAHyAewBbQESAeoB7AGSAu0B8gUAAfAB/wL0
+        AvMC8QHvAf8B8AH0AgAB8w7xAfMCAAHwAf8C9ALzAvEB7wH/AfAB9AYAAf8B8AHvAuwB7wHwAf8GAAHx
+        Av8F9AEHAfEB9BUAAfEC/wX0AQcB8QH0FQAB8wjyAfQWAAHzCPIB9BQAAf8B9AG8CgcBvAH0Av8B9AG8
+        CgcBvAH0I/8BBwr/AQcE/wEHCv8BBwL/AfQB8wEHAXQIbwF0AQcB8wH0AZkOdAGZAgABvAr/AbwEAAG8
+        Cv8BvAMAARoBdApTAXQBGgEAAXQOmgF0AgABvAj/AfQB/wG8BAABvAj/AfQB/wG8AwABmQpTAVIBUwGT
+        AQABmQGaDHoBmgGZAgABvAL/AS4E/wL0Af8BvAQAAbwH/wL0Af8BvAMAAZMCUwL/CFMBkwEAAZkOmgGZ
+        AgABvAH/AS4BmAEuAf8B8wG8AfEBBwH/AbwEAAG8Bv8D9AH/AbwDAAF0AlMC/wJTAXoD/wJTAXQBAAGZ
+        DpoBmQIAAbwB/wEIAf8BCAFPBPQB/wG8BAABvAX/BPQB/wG8AwABdAxTAXQBAAGZDpoBmQIAAbwE/wb0
+        AbwEAAG8BP8G9AG8AwABdAJTA/8CmgP/AlMBdAEAAZkOmgGZAgAB8AL/AU8F9AHzAfQB8AQAAfAD/wX0
+        AfMB9AHwAwABdAxTAXQBAAGZDpoBmQIAAfAB/wFPAZgBTwH0AfEBBwG8Ae8B9AHwBAAB8AL/BfQC8wH0
+        AfADAAF0AlMD/wKaA/8CUwF1AQABGgGgBpoHoAEaAgAB8AH/AQgB9AEIAU8B9ALzAfEB9AHwBAAB8AH/
+        BfQC8wHxAfQB8AMAAXQMUwF1AQABGgGgBZoBoAGZBnkBGgIAAfAB/wT0AvMC8QH0AfAEAAHwAf8E9ALz
+        AvEB9AHwAwABdAFTAVID/wKaA/8CUwF1AQABGgagApoGoAEaAgAB8AH/A/QC8wHxA/cBvAQAAfAB/wP0
+        AvMB8QP3AbwDAAF0AVMBKwFSCVMBdQEAARsHGgL/AfQB8wLaARoBGwIAAfAB/wL0AvMC8QHvAf8B8AH0
+        BAAB8AH/AvQC8wLxAe8B/wHwAfQDAAEaAVIKUwF1ARoIAAH0BhoB9AMAAfEC/wX0AQcB8QH0BQAB8QL/
+        BfQBBwHxAfQEAAH/ARoJdAF1ARoB/xMAAfMI8gH0BgAB8wjyAfQUAAFCAU0BPgcAAT4DAAEoAwABQAMA
+        ATADAAEBAQABAQUAAYABARYAA/8CAAEBBwABAQYAAYABAwYAAYABAwYAAYABAwYAAYABAwYAAYABAwYA
+        AYABAwYAAYABAwYAAYABAwYAAYABAwYAAYABAwYAAYABAwYAAYABAwYAAYABBwYAAYABDwYAAYABAQIA
+        Av8CAAGAAQEGAAHgAQcBwAEDAgABwAEDAcABAwHAAQMCAAHAAQMBgAEBAcABAwIAAcABAwGAAQEBwAED
+        AgABwAEDAoEBwAEDAgABwAEDAoEBwAEDAgABwAEDAoEBwAEDAgABwAEDAoEBwAEDAgABwAEDAYABAQHA
+        AQMCAAHAAQMBgAEBAcABAwIAAcABAwHAAQMBwAEDAgABwAEDAeABBwHAAQMCAAHAAQMB8AEPAcABBwL/
+        AcABBwL/AcABDwL/AcABDwL/EAABwAEDAcABAwGAAQECAAHAAQMBwAEDAYABAQIAAcABAwHAAQMBgAEB
+        AgABwAEDAcABAwGAAQECAAHAAQMBwAEDAYABAQIAAcABAwHAAQMBgAEBAgABwAEDAcABAwGAAQECAAHA
+        AQMBwAEDAYABAQIAAcABAwHAAQMBgAEBAgABwAEDAcABAwGAAQECAAHAAQMBwAEDAYABAQIAAcABAwHA
+        AQMBgAEBAf4BAQHAAQcBwAEHAYABAQL/AcABDwHAAQ8C/ws=
+</value>
+  </data>
+  <data name="fileTree.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 25</value>
+  </data>
+  <data name="fileTree.SelectedImageIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="fileTree.Size" type="System.Drawing.Size, System.Drawing">
+    <value>226, 328</value>
+  </data>
+  <data name="fileTree.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="&gt;&gt;fileTree.Name" xml:space="preserve">
+    <value>fileTree</value>
+  </data>
+  <data name="&gt;&gt;fileTree.Type" xml:space="preserve">
+    <value>System.Windows.Forms.TreeView, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;fileTree.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;fileTree.ZOrder" xml:space="preserve">
+    <value>2</value>
+  </data>
+  <metadata name="ctxFolder.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>213, 17</value>
+  </metadata>
+  <data name="ctxFolder.Size" type="System.Drawing.Size, System.Drawing">
+    <value>186, 26</value>
+  </data>
+  <data name="&gt;&gt;ctxFolder.Name" xml:space="preserve">
+    <value>ctxFolder</value>
+  </data>
+  <data name="&gt;&gt;ctxFolder.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="createConfigurationToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+    <value>185, 22</value>
+  </data>
+  <data name="createConfigurationToolStripMenuItem.Text" xml:space="preserve">
+    <value>Create Configuration</value>
+  </data>
+  <metadata name="ctxConfig.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>314, 17</value>
+  </metadata>
+  <data name="ctxConfig.Size" type="System.Drawing.Size, System.Drawing">
+    <value>179, 48</value>
+  </data>
+  <data name="&gt;&gt;ctxConfig.Name" xml:space="preserve">
+    <value>ctxConfig</value>
+  </data>
+  <data name="&gt;&gt;ctxConfig.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="addRepresentationToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+    <value>178, 22</value>
+  </data>
+  <data name="addRepresentationToolStripMenuItem.Text" xml:space="preserve">
+    <value>Add Representation</value>
+  </data>
+  <data name="editXMLToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+    <value>178, 22</value>
+  </data>
+  <data name="editXMLToolStripMenuItem.Text" xml:space="preserve">
+    <value>Edit XML</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
+    <value>226, 353</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.Name" xml:space="preserve">
+    <value>btnConnect</value>
+  </data>
+  <data name="&gt;&gt;btnConnect.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnRefresh.Name" xml:space="preserve">
+    <value>btnRefresh</value>
+  </data>
+  <data name="&gt;&gt;btnRefresh.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
+    <value>toolStripSeparator1</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnPreview.Name" xml:space="preserve">
+    <value>btnPreview</value>
+  </data>
+  <data name="&gt;&gt;btnPreview.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;imgList.Name" xml:space="preserve">
+    <value>imgList</value>
+  </data>
+  <data name="&gt;&gt;imgList.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;createConfigurationToolStripMenuItem.Name" xml:space="preserve">
+    <value>createConfigurationToolStripMenuItem</value>
+  </data>
+  <data name="&gt;&gt;createConfigurationToolStripMenuItem.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;addRepresentationToolStripMenuItem.Name" xml:space="preserve">
+    <value>addRepresentationToolStripMenuItem</value>
+  </data>
+  <data name="&gt;&gt;addRepresentationToolStripMenuItem.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;editXMLToolStripMenuItem.Name" xml:space="preserve">
+    <value>editXMLToolStripMenuItem</value>
+  </data>
+  <data name="&gt;&gt;editXMLToolStripMenuItem.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>FileSystemView</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>Maestro.Shared.UI.ViewContentBase, Maestro.Shared.UI, Version=4.0.0.6359, Culture=neutral, PublicKeyToken=f526c48929fda856</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.Designer.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,96 @@
+namespace Maestro.AddIn.GeoRest.UI
+{
+    partial class RestConfigEditor
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RestConfigEditor));
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnSave = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.btnValidate = new System.Windows.Forms.ToolStripButton();
+            this.txtXml = new System.Windows.Forms.RichTextBox();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnSave,
+            this.toolStripSeparator1,
+            this.btnValidate});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            // 
+            // btnSave
+            // 
+            resources.ApplyResources(this.btnSave, "btnSave");
+            this.btnSave.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.disk;
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+            // 
+            // btnValidate
+            // 
+            resources.ApplyResources(this.btnValidate, "btnValidate");
+            this.btnValidate.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.document_task;
+            this.btnValidate.Name = "btnValidate";
+            this.btnValidate.Click += new System.EventHandler(this.btnValidate_Click);
+            // 
+            // txtXml
+            // 
+            resources.ApplyResources(this.txtXml, "txtXml");
+            this.txtXml.Name = "txtXml";
+            this.txtXml.TextChanged += new System.EventHandler(this.txtXml_TextChanged);
+            // 
+            // RestConfigEditor
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.txtXml);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "RestConfigEditor";
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnSave;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.ToolStripButton btnValidate;
+        private System.Windows.Forms.RichTextBox txtXml;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,77 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Xml;
+using Maestro.Shared.UI;
+using System.IO;
+
+namespace Maestro.AddIn.GeoRest.UI
+{
+    public partial class RestConfigEditor : Form
+    {
+        private string _origTitle;
+
+        public RestConfigEditor()
+        {
+            InitializeComponent();
+            _origTitle = this.Text;
+        }
+
+        private string _file;
+
+        public void LoadFile(string file)
+        {
+            _file = file;
+            txtXml.Text = File.ReadAllText(file);
+            this.Text = _origTitle + " - " + file;
+        }
+
+        private void txtXml_TextChanged(object sender, EventArgs e)
+        {
+            btnSave.Enabled = btnValidate.Enabled = true;
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            File.WriteAllText(_file, txtXml.Text);
+            MessageBox.Show(string.Format(Properties.Resources.FileSaved, _file));
+        }
+
+        private void btnValidate_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                var doc = new XmlDocument();
+                doc.LoadXml(txtXml.Text);
+                MessageBox.Show(Properties.Resources.XmlWellFormed);
+            }
+            catch (XmlException ex)
+            {
+                ErrorDialog.Show(ex);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/RestConfigEditor.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>0, 0</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>604, 25</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnSave.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnSave.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 22</value>
+  </data>
+  <data name="btnSave.Text" xml:space="preserve">
+    <value>Save</value>
+  </data>
+  <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
+  </data>
+  <data name="btnValidate.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnValidate.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnValidate.Size" type="System.Drawing.Size, System.Drawing">
+    <value>147, 22</value>
+  </data>
+  <data name="btnValidate.Text" xml:space="preserve">
+    <value>Validate XML Structure</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="txtXml.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="txtXml.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Courier New, 11.25pt</value>
+  </data>
+  <data name="txtXml.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 25</value>
+  </data>
+  <data name="txtXml.Size" type="System.Drawing.Size, System.Drawing">
+    <value>604, 386</value>
+  </data>
+  <data name="txtXml.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="txtXml.Text" xml:space="preserve">
+    <value />
+  </data>
+  <data name="&gt;&gt;txtXml.Name" xml:space="preserve">
+    <value>txtXml</value>
+  </data>
+  <data name="&gt;&gt;txtXml.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtXml.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;txtXml.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>604, 411</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>GeoREST Configuration</value>
+  </data>
+  <data name="&gt;&gt;btnSave.Name" xml:space="preserve">
+    <value>btnSave</value>
+  </data>
+  <data name="&gt;&gt;btnSave.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
+    <value>toolStripSeparator1</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;btnValidate.Name" xml:space="preserve">
+    <value>btnValidate</value>
+  </data>
+  <data name="&gt;&gt;btnValidate.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>RestConfigEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.Designer.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.Designer.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.Designer.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,86 @@
+namespace Maestro.AddIn.GeoRest.UI
+{
+    partial class TextEditor
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextEditor));
+            this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+            this.btnSave = new System.Windows.Forms.ToolStripButton();
+            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
+            this.txtContent = new System.Windows.Forms.RichTextBox();
+            this.toolStrip1.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // toolStrip1
+            // 
+            this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnSave,
+            this.toolStripSeparator1});
+            resources.ApplyResources(this.toolStrip1, "toolStrip1");
+            this.toolStrip1.Name = "toolStrip1";
+            // 
+            // btnSave
+            // 
+            resources.ApplyResources(this.btnSave, "btnSave");
+            this.btnSave.Image = global::Maestro.AddIn.GeoRest.Properties.Resources.disk;
+            this.btnSave.Name = "btnSave";
+            this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
+            // 
+            // toolStripSeparator1
+            // 
+            this.toolStripSeparator1.Name = "toolStripSeparator1";
+            resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1");
+            // 
+            // txtContent
+            // 
+            resources.ApplyResources(this.txtContent, "txtContent");
+            this.txtContent.Name = "txtContent";
+            this.txtContent.TextChanged += new System.EventHandler(this.txtXml_TextChanged);
+            // 
+            // TextEditor
+            // 
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+            resources.ApplyResources(this, "$this");
+            this.Controls.Add(this.txtContent);
+            this.Controls.Add(this.toolStrip1);
+            this.Name = "TextEditor";
+            this.toolStrip1.ResumeLayout(false);
+            this.toolStrip1.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ToolStrip toolStrip1;
+        private System.Windows.Forms.ToolStripButton btnSave;
+        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
+        private System.Windows.Forms.RichTextBox txtContent;
+    }
+}
\ No newline at end of file

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.cs
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.cs	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.cs	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,77 @@
+#region Disclaimer / License
+// Copyright (C) 2012, Jackie Ng
+// http://trac.osgeo.org/mapguide/wiki/maestro, jumpinjackie at 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.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Xml;
+using Maestro.Shared.UI;
+using System.IO;
+
+namespace Maestro.AddIn.GeoRest.UI
+{
+    public partial class TextEditor : Form
+    {
+        private string _origTitle;
+
+        public TextEditor()
+        {
+            InitializeComponent();
+            _origTitle = this.Text;
+        }
+
+        private string _file;
+
+        public void LoadFile(string file)
+        {
+            _file = file;
+            txtContent.Text = File.ReadAllText(file);
+            this.Text = _origTitle + " - " + file;
+        }
+
+        private void txtXml_TextChanged(object sender, EventArgs e)
+        {
+            btnSave.Enabled = true;
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            File.WriteAllText(_file, txtContent.Text);
+            MessageBox.Show(string.Format(Properties.Resources.FileSaved, _file));
+        }
+
+        private void btnValidate_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                var doc = new XmlDocument();
+                doc.LoadXml(txtContent.Text);
+                MessageBox.Show(Properties.Resources.XmlWellFormed);
+            }
+            catch (XmlException ex)
+            {
+                ErrorDialog.Show(ex);
+            }
+        }
+    }
+}

Added: trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.resx	                        (rev 0)
+++ trunk/Tools/Maestro/Maestro.AddIn.GeoRest/UI/TextEditor.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>0, 0</value>
+  </metadata>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="toolStrip1.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 0</value>
+  </data>
+  <data name="toolStrip1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>604, 25</value>
+  </data>
+  <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="toolStrip1.TabIndex" type="System.Int32, mscorlib">
+    <value>0</value>
+  </data>
+  <data name="toolStrip1.Text" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Name" xml:space="preserve">
+    <value>toolStrip1</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;toolStrip1.ZOrder" xml:space="preserve">
+    <value>1</value>
+  </data>
+  <data name="btnSave.Enabled" type="System.Boolean, mscorlib">
+    <value>False</value>
+  </data>
+  <data name="btnSave.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
+    <value>Magenta</value>
+  </data>
+  <data name="btnSave.Size" type="System.Drawing.Size, System.Drawing">
+    <value>51, 22</value>
+  </data>
+  <data name="btnSave.Text" xml:space="preserve">
+    <value>Save</value>
+  </data>
+  <data name="toolStripSeparator1.Size" type="System.Drawing.Size, System.Drawing">
+    <value>6, 25</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="txtContent.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
+    <value>Fill</value>
+  </data>
+  <data name="txtContent.Font" type="System.Drawing.Font, System.Drawing">
+    <value>Courier New, 11.25pt</value>
+  </data>
+  <data name="txtContent.Location" type="System.Drawing.Point, System.Drawing">
+    <value>0, 25</value>
+  </data>
+  <data name="txtContent.Size" type="System.Drawing.Size, System.Drawing">
+    <value>604, 386</value>
+  </data>
+  <data name="txtContent.TabIndex" type="System.Int32, mscorlib">
+    <value>1</value>
+  </data>
+  <data name="txtContent.Text" xml:space="preserve">
+    <value />
+  </data>
+  <data name="&gt;&gt;txtContent.Name" xml:space="preserve">
+    <value>txtContent</value>
+  </data>
+  <data name="&gt;&gt;txtContent.Type" xml:space="preserve">
+    <value>System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;txtContent.Parent" xml:space="preserve">
+    <value>$this</value>
+  </data>
+  <data name="&gt;&gt;txtContent.ZOrder" xml:space="preserve">
+    <value>0</value>
+  </data>
+  <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>True</value>
+  </metadata>
+  <data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
+    <value>604, 411</value>
+  </data>
+  <data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
+    <value>CenterParent</value>
+  </data>
+  <data name="$this.Text" xml:space="preserve">
+    <value>Text Editor</value>
+  </data>
+  <data name="&gt;&gt;btnSave.Name" xml:space="preserve">
+    <value>btnSave</value>
+  </data>
+  <data name="&gt;&gt;btnSave.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Name" xml:space="preserve">
+    <value>toolStripSeparator1</value>
+  </data>
+  <data name="&gt;&gt;toolStripSeparator1.Type" xml:space="preserve">
+    <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+  <data name="&gt;&gt;$this.Name" xml:space="preserve">
+    <value>TextEditor</value>
+  </data>
+  <data name="&gt;&gt;$this.Type" xml:space="preserve">
+    <value>System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
+</root>
\ No newline at end of file

Modified: trunk/Tools/Maestro/Maestro.Shared.UI/ZonedContainer.resx
===================================================================
--- trunk/Tools/Maestro/Maestro.Shared.UI/ZonedContainer.resx	2012-01-24 07:59:49 UTC (rev 6451)
+++ trunk/Tools/Maestro/Maestro.Shared.UI/ZonedContainer.resx	2012-01-24 13:34:05 UTC (rev 6452)
@@ -154,7 +154,7 @@
     <value>True</value>
   </data>
   <data name="documentTabs.Size" type="System.Drawing.Size, System.Drawing">
-    <value>240, 259</value>
+    <value>337, 415</value>
   </data>
   <data name="documentTabs.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -205,7 +205,7 @@
     <value>True</value>
   </data>
   <data name="bottomZone.Size" type="System.Drawing.Size, System.Drawing">
-    <value>240, 181</value>
+    <value>337, 181</value>
   </data>
   <data name="bottomZone.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -241,10 +241,10 @@
     <value>100</value>
   </data>
   <data name="docBottomContainer.Size" type="System.Drawing.Size, System.Drawing">
-    <value>240, 444</value>
+    <value>337, 600</value>
   </data>
   <data name="docBottomContainer.SplitterDistance" type="System.Int32, mscorlib">
-    <value>259</value>
+    <value>415</value>
   </data>
   <data name="docBottomContainer.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -298,7 +298,7 @@
     <value>True</value>
   </data>
   <data name="rightZone.Size" type="System.Drawing.Size, System.Drawing">
-    <value>138, 444</value>
+    <value>215, 600</value>
   </data>
   <data name="rightZone.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -334,10 +334,10 @@
     <value>No</value>
   </data>
   <data name="docRightContainer.Size" type="System.Drawing.Size, System.Drawing">
-    <value>382, 444</value>
+    <value>556, 600</value>
   </data>
   <data name="docRightContainer.SplitterDistance" type="System.Int32, mscorlib">
-    <value>240</value>
+    <value>337</value>
   </data>
   <data name="docRightContainer.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -379,7 +379,7 @@
     <value>True</value>
   </data>
   <data name="leftZone.Size" type="System.Drawing.Size, System.Drawing">
-    <value>240, 444</value>
+    <value>240, 600</value>
   </data>
   <data name="leftZone.TabIndex" type="System.Int32, mscorlib">
     <value>0</value>
@@ -424,7 +424,7 @@
     <value>1</value>
   </data>
   <data name="topContainer.Size" type="System.Drawing.Size, System.Drawing">
-    <value>626, 444</value>
+    <value>800, 600</value>
   </data>
   <data name="topContainer.SplitterDistance" type="System.Int32, mscorlib">
     <value>240</value>
@@ -466,7 +466,7 @@
     <value>Close All Tabs</value>
   </data>
   <data name="ctxDocumentTabs.Size" type="System.Drawing.Size, System.Drawing">
-    <value>167, 92</value>
+    <value>167, 70</value>
   </data>
   <data name="&gt;&gt;ctxDocumentTabs.Name" xml:space="preserve">
     <value>ctxDocumentTabs</value>
@@ -478,7 +478,7 @@
     <value>True</value>
   </metadata>
   <data name="$this.Size" type="System.Drawing.Size, System.Drawing">
-    <value>626, 444</value>
+    <value>800, 600</value>
   </data>
   <data name="&gt;&gt;docImgList.Name" xml:space="preserve">
     <value>docImgList</value>

Modified: trunk/Tools/Maestro/SDK/sdk_changelog.txt
===================================================================
--- trunk/Tools/Maestro/SDK/sdk_changelog.txt	2012-01-24 07:59:49 UTC (rev 6451)
+++ trunk/Tools/Maestro/SDK/sdk_changelog.txt	2012-01-24 13:34:05 UTC (rev 6452)
@@ -1,3 +1,13 @@
+4.1
+---
+
+- New utility included: SignMapGuideApi.exe 
+    - Use this tool to sign official MapGuide/AIMS .net assemblies with the maestroapi.key
+    
+- Includes source for the Maestro.LocalNative connection provider, allowing you to compile your own connection provider against your specific version of MapGuide/AIMS
+    - Assembly binding redirection is no longer supported
+    - Pre-built binaries for MGOS 2.2 included
+
 4.0
 ---
 



More information about the mapguide-commits mailing list