[mapguide-users] .NET Objects for working with Mapguide Resources

Kenneth Skovhede, GEOGRAF A/S ks at geograf.dk
Sun May 25 10:40:07 EDT 2008


Hi Maksim.

Sure.
I have added it to the MaestroAPI project, even though I have not used 
it yet.

The direct path via SVN is:
http://svn.osgeo.org/mapguide/trunk/Tools/Maestro/MaestroAPI/XsdGenerator 
new w generics

Mvh. Kenneth Skovhede, GEOGRAF A/S
tlf.: +45 48 16 67 14
ks at geograf.dk



Maksim Sestic skrev:
> Hi Kenneth,
>  
> I am working on another solution that uses xsd.exe for the first run, 
> and then updates the code to use generic List<> properties.
> It works by replacing all fields/properties of the array type with a 
> List<> type, pretty basic.
>  
> Thanks for the tip about customizing XSD.EXE. Generics would help Ryan 
> on ge-kml project a lot (http://sourceforge.net/projects/ge-kml/). If 
> you want to share it, would you mind posting the solution to Assembla 
> SVN (http://www.assembla.com/) so we can give it a shot?
>  
> Regards,
> Maksim Sestic
>  
>
>
> Maksim Sestic skrev:
>> Hi Kenneth, Darrin,
>>  
>> Regarding the LinQ and XSD codegen - is it possible to generate a 
>> C#/VB.NET serializable codebase out of XSD? I have been experimenting 
>> a while ago with some custom codegen engine based on .NET 2.0 (due to 
>> generics support), and I think it's doable - even without LinQ. The 
>> basic concept is similar to VS.NET's own codegen tools:
>>  
>> 1) Fetch the XSD (or XML with embedded schema)
>> 2) Generate codebase of desired flawour (C#, VB.NET, J#...)
>> 3) Generated serializable object definitions, according to 
>> (compatible with) source schema
>>  
>> ...generate codebase-embedded FDO-based spatial queries based on 
>> entity relationships?... :-)
>>  
>> Kenneth, I presume you were thinking of the same thing (1, 2 and 3)?
>>  
>> Regards,
>> Maksim Sestic
>>
>> ------------------------------------------------------------------------
>> *From:* mapguide-users-bounces at lists.osgeo.org 
>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of 
>> *Kenneth Skovhede, GEOGRAF A/S
>> *Sent:* Sunday, May 25, 2008 00:13
>> *To:* MapGuide Users Mail List
>> *Subject:* Re: [mapguide-users] .NET Objects for working with 
>> Mapguide Resources
>>
>> I'm not sure what you mean by "work with the web tier API".
>> There are two different API's that are refered to as Web tier, the 
>> MapGuideDotNetApi.dll and the http interface.
>> Both of them are supported by MaestroAPI, using the 
>> LocalNativeConnetion and HttpServerConnection.
>>
>> You can set up a http connection like this:
>> ServerConnectionI connection = new HttpServerConnection(new 
>> Uri("http://localhost/mapguide/mapagent/mapagent.fcgi"), "Anonymous", 
>> "");
>> And one using the local connection like this:
>> ServerConnectionI connection = new 
>> LocalNativeConnection("serverconfig.ini", "Anonymous", "");
>>
>> The http connection is portable and does not require the mapguide 
>> dll's. The native is a bit faster, because the http protocol and 
>> webserver introduces overhead.
>>
>> Once you have a connection, you can read an object from the 
>> repository, using either interface, by issuing the following:
>> LayerDefinition layer = 
>> connection.GetLayerDefinition("Library://layer.LayerDefinition");
>>
>> And write it back like this:
>> connection.SaveResource(layer);
>>
>> Or modify, and save under a new name:
>> layer.BackgroundColor = Color.Blue;
>> connection.SaveResource(layer, "Library://new layer.LayerDefinition");
>>
>> There are also functions to generate the full paths, from name and type.
>>
>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>   
>>
>>
>> Kenneth Skovhede, GEOGRAF A/S skrev:
>>> Yes. I have moved the entire site over on the MapGuide wiki.
>>> Documentation can now be found here:
>>> http://trac.osgeo.org/mapguide/wiki/maestro
>>> And for the API:
>>> http://trac.osgeo.org/mapguide/wiki/maestro/MaestroAPI
>>>
>>> Too bad about the LinQ dependancy, it would be a lot cleaner to do 
>>> it that way.
>>>
>>> I have not exposed functionality in the way you ask, but it is there.
>>> You can do it with code like this:
>>> Stream s = ... stream with Xml data ...
>>> LayerDefinition layer = 
>>> (LayerDefinition)con.DeserializeObject(typeof(LayerDefinition), s);
>>> layer.BackgroundColor = Color.White;
>>> s = con.SerializeObject(s);
>>>
>>> The methods could actually be static, but they are not because they 
>>> use the server version to restrict/convert the version's of the 
>>> documents.
>>>
>>> It is possible to serialize/deserialise the objects manually, using 
>>> the XmlSerializer from .Net:
>>> XmlSerializer ser = new XmlSerializer(typeof(LayerDefinition));
>>> layer = (LayerDefinition)con.Deserialize(s);
>>> layer.BackgroundColor = Color.Green;
>>> ser.Serialize(s, layer);
>>>
>>> There is a function in the Utility class that strips the UTF-8 BOM:
>>> s = Utility.RemoveUTF8BOM(s);
>>>
>>>
>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>   
>>>
>>>
>>> Darrin Maidlow skrev:
>>>>
>>>> Hi Kenneth,
>>>>
>>>> Thanks for the feedback.  You are very right in that dual 
>>>> development streams would be a bad thing and a waste of a lot of 
>>>> time.   What I was hoping to accomplish with that XSD codegen was 
>>>> to create a set of relatively light weight objects to roundtrip the 
>>>> xml.  Eliminate the use of XML tools for working with the mapguide 
>>>> entities, then return the entities back to XML for use with the 
>>>> Mapguide API.    I was not planning a full API project.  Again, you 
>>>> are right in that there is still some messing around needed to be 
>>>> done with the linq code -- I had problems with nulls just as you 
>>>> mentioned =)
>>>>
>>>> To answer your question, as far as I can see, the linq dll is 
>>>> required for the generated code to function.  A lot of the 
>>>> generated functionality requires methods that exist within the linq 
>>>> to XSD dll file.
>>>>
>>>> I spent some time trying to find more info on the MeastroAPI today, 
>>>> but was not able to find much.  Likely because of the move over to 
>>>> osgeo.  I have not had a chance to actually work with the API again 
>>>> yet, but perhaps you could answer a couple questions for me.
>>>>
>>>> Does Meastro API come with the abovementioned objects I was looking 
>>>> for?  Can I shove some XML from the repository into a new object, 
>>>> do some work, and then spit the new XML back out?  If so, I'm 
>>>> assuming that I could continue to work with the web tier API from 
>>>> Mapguide?
>>>>
>>>> thx
>>>>
>>>> darrin
>>>>
>>>> *From:* mapguide-users-bounces at lists.osgeo.org 
>>>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of 
>>>> *Kenneth Skovhede, GEOGRAF A/S
>>>> *Sent:* Thursday, May 22, 2008 12:04 PM
>>>> *To:* MapGuide Users Mail List
>>>> *Subject:* Re: [mapguide-users] .NET Objects for working with 
>>>> Mapguide Resources
>>>>
>>>> That is a smart way to convert Xsd to classes. Is it possible to 
>>>> extract the generated code and use it without LinQ for .Net 2.0?
>>>>
>>>> I'm not sure what you mean by "wanted to stay closer to the core 
>>>> API". Your generated classes expose the MapGuide Xml as .Net classes.
>>>> You can then use .Net objects "directly" instead of handling Xml. 
>>>> That is exactly what the MaestroAPI does.
>>>>
>>>> I have implemented a connection interface that enables you to 
>>>> communicate with MapGuide either via the MapGuide API, or through Http.
>>>> If you use the LocalNativeConnection exclusively, MaestroAPI is 
>>>> doing the exact same thing your code does.
>>>>
>>>> If you (or someone else) has questions about MaestroAPI usage, 
>>>> please ask away.
>>>> If you (or someone else) find missing functionality, or has 
>>>> improvements for MaestroAPI, let me know.
>>>> I have a short introduction to MaestroAPI usage here:
>>>> http://code.google.com/p/mapstudioos/wiki/HowToUseMapGuideAPI
>>>> (The site is being migrated to here: 
>>>> http://trac.osgeo.org/mapguide/wiki/maestro)
>>>>
>>>> I like your code, and if you are up for it, I think we both could 
>>>> benefit from one great API extension, rather than two good ones.
>>>> I have learned that after you have the serialization in place there 
>>>> are many places where you must handle trivial stuff like
>>>> converting null string to empty string, empty collections to null 
>>>> collections, etc. MaestroAPI handles much of this already,
>>>> and I would be sad to see you spend your time implementing that for 
>>>> another project.
>>>>
>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>
>>>>
>>>>
>>>> Darrin Maidlow skrev:
>>>>
>>>> Hi Maksim,
>>>>
>>>> I looked at early on in my learnage, but wanted to stay closer to 
>>>> the core API provided by Mapguide Project / Autodesk.   ADN support 
>>>> could offer some help with the built in API, and if needed escalate 
>>>> off to the devs.  I did also have some problems getting the Maestro 
>>>> API running -- but that was right around the transition between 1.1 
>>>> and 2.0 -- and working all night with too much redbull probably 
>>>> didn't help either =)
>>>>
>>>> darrin
>>>>
>>>> *From:* mapguide-users-bounces at lists.osgeo.org 
>>>> <mailto:mapguide-users-bounces at lists.osgeo.org> 
>>>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of 
>>>> *Maksim Sestic
>>>> *Sent:* Thursday, May 22, 2008 7:40 AM
>>>> *To:* 'MapGuide Users Mail List'
>>>> *Subject:* RE: [mapguide-users] .NET Objects for working with 
>>>> Mapguide Resources
>>>>
>>>> Hi Darrin,
>>>>
>>>> Thanks for the tip. Please take a look at Kenneth's Meastro API:
>>>>
>>>> http://trac.osgeo.org/mapguide/browser/trunk/Tools/Maestro/MaestroAPI
>>>>
>>>> It relies on .NET 2.0 for MG types (de)serialization.
>>>>
>>>> Regards,
>>>>
>>>> Maksim Sestic
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> *From:* mapguide-users-bounces at lists.osgeo.org 
>>>> <mailto:mapguide-users-bounces at lists.osgeo.org> 
>>>> [mailto:mapguide-users-bounces at lists.osgeo.org] *On Behalf Of 
>>>> *Darrin Maidlow
>>>> *Sent:* Thursday, May 22, 2008 15:28
>>>> *To:* mapguide-users at lists.osgeo.org 
>>>> <mailto:mapguide-users at lists.osgeo.org>
>>>> *Subject:* [mapguide-users] .NET Objects for working with Mapguide 
>>>> Resources
>>>>
>>>> Hi List,
>>>>
>>>> I've written two posts I thought I would share with you on the 
>>>> topic of .NET based MG dev.  The first describes a method I've 
>>>> worked out to create relatively robust .NET based objects based on 
>>>> the Xml Schema Definitions provided with the server.    Please 
>>>> note, I currently am only working with MGE 2009.  I have not tried 
>>>> this code on MGOS.  If you do try them on MGOS, please let me know 
>>>> what results have.
>>>>
>>>> In a nutshell, one can get the resource XML from the resource 
>>>> service, load it into the object with the provided .parse method, 
>>>> manipulate the object (without having to use xml) e.g. add child 
>>>> objects, change properties etc, and finally spit it back out to XML 
>>>> for saving back to the repository.  Yay no longer need to be 
>>>> jealous of the PHP guys and their object factories =D
>>>>
>>>> The second is a dynamic authoring example using these objects, 
>>>> manipulating the MapDefinition before the viewer has loaded it.
>>>>
>>>> Both come with full source code, and Visual Studio 2008 projects.   
>>>> I hope they are helpful to the other .NET devs out there.
>>>>
>>>> http://www.webrade.com/blogs/darrin/2008/05/16/CreatingNETObjectsForMapguideXMLSchemaDefinitionsXSDUsingLINQ.aspx
>>>>
>>>> http://www.webrade.com/blogs/darrin/2008/05/21/DynamicAuthoringInMapguideEnterpriseBeforeTheViewerHasLoaded.aspx
>>>>
>>>> Enjoy.
>>>>
>>>> darrin
>>>>
>>>>
>>>>
>>>> __________ NOD32 3118 (20080521) Information __________
>>>>
>>>> This message was checked by NOD32 antivirus system.
>>>> http://www.eset.com
>>>>
>>>>  
>>>> ------------------------------------------------------------------------
>>>>
>>>>
>>>>   
>>>>  
>>>> _______________________________________________
>>>> mapguide-users mailing list
>>>> mapguide-users at lists.osgeo.org <mailto:mapguide-users at lists.osgeo.org>
>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>   
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> mapguide-users mailing list
>>>> mapguide-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>   
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> mapguide-users mailing list
>>> mapguide-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>   
>>
>>
>> __________ NOD32 3128 (20080523) Information __________
>>
>> This message was checked by NOD32 antivirus system.
>> http://www.eset.com
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>   
>
>
> __________ NOD32 3128 (20080523) Information __________
>
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
> ------------------------------------------------------------------------
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20080525/f3794c63/attachment.html


More information about the mapguide-users mailing list