[mapguide-internals] Session-MapName-Map

Jason Birch Jason.Birch at nanaimo.ca
Fri Aug 31 15:46:21 EDT 2007


Just to confirm, you're saying that it would be impossible to have two
runtime maps of the same map definition in the same session?

I think that this would get in the way of some of my planned features,
such as displaying multiple versions of the same map image on a property
report with different layers active and different zoom levels (nearby
schools, nearby parks, etc...)

I think that your last suggestion is something that allows users to
override the runtime resource identifier if they want to.  Would it also
be possible for the runtime map creation routine to check if the
resource already exists and, if it does, just add a sequential number to
it and return that value from the Create?

For instance (bugs galore I'm sure)

$resourceId = new
MgResourceIdentifier("Library://Samples/Sheboygan/MyMap.MapDefinition");


$map1 = new MgMap($siteConnection); 
$map1->Create($resourceId);
$mgMapResourceId1 = $map1->Save();

$map2 = new MgMap($siteConnection); 
$map2->Create($resourceId);
$mgMapResourceId2 = $map2->Save();

print ($mgMapResourceId1 . "\n");
print ($mgMapResourceId2 . "\n");

Output:

Session:xx-yy-zz://Samples/Sheboygan/MyMap.Map
Session:xx-yy-zz://Samples/Sheboygan/MyMap-1.Map


Of course, I guess if you're doing this then there is no need for the
directory structure? :)

Jason


-----Original Message-----
From: mapguide-internals-bounces at lists.osgeo.org
[mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Trevor
Wekel
Sent: Friday, August 31, 2007 12:27
To: MapGuide Internals Mail List
Subject: RE: [mapguide-internals] Session-MapName-Map

I just checked with Steve.  We do support folders in the session
repository.  There is no "id" in MapGuide currently so it will be a pain
to introduce one.  However, we could remap the entire Library based
resource identifier into a session resource identifier.

"Library://Samples/Sheboygan/MyMap.MapDefinition"
would become
"Session:xx-yy-zz://Samples/Sheboygan/MyMap.Map"

And we could add an MgResourceIdentifier return value to MgMap.Save
although it may break existing apps.  Using "non-deprecated" API we
would then have:

$resourceId = new  MgResourceIdentifier($mapid); $map = new
MgMap($siteConnection); $map->Create($resourceId); $mgMapResourceId =
$map->Save();

and then to recover the runtime map:

$map = new MgMap($siteConnection);
$map->Open($mgMapResourceId);

It is easy to construct the $mgMapResourceId from the $resourceId by
calling MgResourceIdentifier.SetRepositoryType(MgRepositoryType.Session)
and SetRepositoryName($session)

This does reduce some of the API flexibility because it enforces a one
to one correspondence between a map definition and a runtime map.  but
it is less "wordy".  I have not looked at all the API impacts but this
would require an RFC.  We could add a second
MgMap.Create($mapDefinitionResourceId, $mgMapResourceId) to make it a
little more flexible.

Thanks,
Trevor

-----Original Message-----
From: mapguide-internals-bounces at lists.osgeo.org
[mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Haris
Kurtagic
Sent: Friday, August 31, 2007 12:58 PM
To: MapGuide Internals Mail List
Subject: RE: [mapguide-internals] Session-MapName-Map

Yes, that is a way I was thinking about.

Thanks,
Haris

-----Original Message-----
From: mapguide-internals-bounces at lists.osgeo.org
[mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Paul
Spencer
Sent: Friday, August 31, 2007 8:50 PM
To: MapGuide Internals Mail List
Subject: Re: [mapguide-internals] Session-MapName-Map

So the logic (in PHP anyway) could be:

$resourceID = new  MgResourceIdentifier($mapid); $map = new MgMap();
$map->Create($resourceService, $resourceID); $mapStateId =
$map->Save($resourceService);

and then to recover the runtime map:

$map = new MgMap();
$map->Open($resourceService, $mapStateId);

Where mapStateId is returned from Save (or obtained in some other
way) and is automagically created from the resourceId in such a way as
to guarantee uniqueness for maps with the same name in different
folders.

I like this.  One thing that I find about the MapGuide APIs is that
using them is often quite verbose.  Over time, I would like to see
common patterns that require a lot of code be moved into API convenience
functions so that it is easier for folks to accomplish basic programming
tasks.

Paul

On 31-Aug-07, at 2:40 PM, Haris Kurtagic wrote:

> I am thinking that instead client application figure out what to use 
> for MapName, unique name would be returned from server after saving 
> Map into session repository.
> Benefits would be that we wouldn't need to implement unique algorithm 
> in every client application/viewer.
>
> Haris
>
> -----Original Message-----
> From: mapguide-internals-bounces at lists.osgeo.org
> [mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Paul 
> Spencer
> Sent: Friday, August 31, 2007 8:35 PM
> To: MapGuide Internals Mail List
> Subject: Re: [mapguide-internals] Session-MapName-Map
>
> I'm confused about what supporting this in the server would mean.
> Would this impact the scripting APIs at all?  What would it make 
> easier?
>
> Paul
>
> On 31-Aug-07, at 2:27 PM, Trevor Wekel wrote:
>
>> Hi Haris,
>>
>> The resource identifier is the Berkeley DBXML "key" for both the 
>> Library:// and Session:// repositories.
>>
>> Thanks,
>> Trevor
>>
>> -----Original Message-----
>> From: mapguide-internals-bounces at lists.osgeo.org
>> [mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of 
>> Haris Kurtagic
>> Sent: Friday, August 31, 2007 12:21 PM
>> To: MapGuide Internals Mail List
>> Subject: RE: [mapguide-internals] Session-MapName-Map
>>
>> Hi Trevor,
>>
>> Yes leading path from Library is stripped (changed with Session ) and

>> Name part is given by application like MapGudie Viewer for example.
>> As you suggested application can use full name ( with folders ) or as

>> Paul suggested hash the name or ..
>> I have a feeling that server should return the key from db. In 
>> Map.cpp MapName is input parameter for creating entry in db.
>>
>> Haris
>>
>> -----Original Message-----
>> From: mapguide-internals-bounces at lists.osgeo.org
>> [mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of 
>> Trevor Wekel
>> Sent: Friday, August 31, 2007 8:08 PM
>> To: MapGuide Internals Mail List
>> Subject: RE: [mapguide-internals] Session-MapName-Map
>>
>> Hi Haris,
>>
>> If you have the map definition
>> Library://Samples/Sheboygan/Test.MapDefinition then the MgMap 
>> resourceid be default will be Session:xx-yy-zz//Test.MgMap.  The 
>> leading path is stripped.
>>
>> I don't know if we have folder support in the session repository but 
>> it would probably be better to construct the MgMap session using the 
>> full path.  Something like this might work:
>>
>> Session:xx-yy-zz//Samples_Sheboygan_Test.MgMap
>>
>>
>> This would be an appropriate enhancement/bugfix request.  A search 
>> for MgResourceType::Map should take you to most of the code that 
>> would require change - DwfController.cpp and Map.cpp I believe.
>>
>>
>>
>> Thanks,
>> Trevor
>>
>>
>> -----Original Message-----
>> From: mapguide-internals-bounces at lists.osgeo.org
>> [mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of  
>> Haris
>> Kurtagic
>> Sent: Friday, August 31, 2007 11:40 AM
>> To: MapGuide Internals Mail List
>> Subject: RE: [mapguide-internals] Session-MapName-Map
>>
>> Thank you, you are right on the track.
>>
>> Yes, you could change name as you suggested or use different sesion
>> for
>> every map or ...
>> I would prefer to have a in server solution for this (and to be
>> able to
>> work with multiple maps in one session).
>> Perhaps server could return DataKey from DB after creating new Map in
>> it?
>>
>> Haris
>>
>> -----Original Message-----
>> From: mapguide-internals-bounces at lists.osgeo.org
>> [mailto:mapguide-internals-bounces at lists.osgeo.org] On Behalf Of Paul
>> Spencer
>> Sent: Friday, August 31, 2007 7:23 PM
>> To: MapGuide Internals Mail List
>> Subject: Re: [mapguide-internals] Session-MapName-Map
>>
>> Haris,
>>
>> I'm not sure if I really know what I am talking about here, but my
>> understanding is that when you start up a session with a
>> MapDefinition, you can save the runtime MgMap object to the session
>> repository as a Map resource and give it a name at that time.  The
>> name is arbitrary, but in the case of the AJAX viewer it is
>> predictable from the MapDefinition name and I think you are right
>> that it would either blow away the existing Map or conflict in some
>> way.
>>
>> I'm not sure how the existing viewer works, but it doesn't contain
>> the capability to change maps at run time so it would never run into
>> this issue.  In Fusion, we can load different MapDefinitions at run
>> time and we do something like this when the user wants to load the
>> map:
>> /* $mapid is a string resource id Library://... */
>> $resourceID = new  MgResourceIdentifier($mapid);
>> $map = new MgMap();
>> $mapName = $resourceID->GetName();
>> $map->Create($resourceService, $resourceID, $mapName);
>> $mapStateId = new MgResourceIdentifier("Session:" . $sessionID .
>> "//" . $map->GetName() . "." . MgResourceType::Map);
>> $map->Save($resourceService, $mapStateId);
>>
>> (NB: there is a potential problem here if the map name is the same as
>> one already in the session.  I will need to fix this potential bug in
>> Fusion - I will probably use an md5 hash of the string version of the
>> full Library:// path to the original map.  This would probably look
>> like:
>>
>> $mapName = md5($mapid);
>>
>> and the rest of the code would look the same.
>> )
>>
>> We return the $mapName to the client so that subsequent requests can
>> operate on the the appropriate Map object on the server side using
>> something like this:
>>
>> $map = new MgMap();
>> $map->Open($resourceService, $mapName);
>>
>> The mapagent rendering operations take the session id and the map
>> name to render map images and dynamic map overlays.
>>
>> Does that help?
>>
>> Cheers
>>
>> Paul
>>
>> On 31-Aug-07, at 1:05 PM, Haris Kurtagic wrote:
>>
>>> I would appreciate if someone could help me to clarify
>>> Session-MapName-Map interaction.
>>>
>>>
>>>
>>> Now how MG Viewer-Server  is working is that it will create new
>>> session
>>> and read web layout and create a runtime map in session repository.
>>>
>>> Later runtime map is accessed by name (only name part of it) from  
>>> the
>>> session repository.
>>>
>>> So, if I would have two Maps created in Library in separate folders
>>> with
>>> same name and if I would add the second map to session repository I
>>> could not access both Maps ( because Session Id and MapName are
>>> used to
>>> identify it - and they are same).
>>>
>>>
>>>
>>> Am I right about this ?
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Haris
>>>
>>> _______________________________________________
>>> mapguide-internals mailing list
>>> mapguide-internals at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>>
>> +-----------------------------------------------------------------+
>> |Paul Spencer                          pspencer at dmsolutions.ca    |
>> +-----------------------------------------------------------------+
>> |Chief Technology Officer                                         |
>> |DM Solutions Group Inc                http://www.dmsolutions.ca/ |
>> +-----------------------------------------------------------------+
>>
>>
>>
>>
>>
>> _______________________________________________
>> mapguide-internals mailing list
>> mapguide-internals at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>> _______________________________________________
>> mapguide-internals mailing list
>> mapguide-internals at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>>
>> _______________________________________________
>> mapguide-internals mailing list
>> mapguide-internals at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>> _______________________________________________
>> mapguide-internals mailing list
>> mapguide-internals at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>>
>> _______________________________________________
>> mapguide-internals mailing list
>> mapguide-internals at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
>
> +-----------------------------------------------------------------+
> |Paul Spencer                          pspencer at dmsolutions.ca    |
> +-----------------------------------------------------------------+
> |Chief Technology Officer                                         |
> |DM Solutions Group Inc                http://www.dmsolutions.ca/ |
> +-----------------------------------------------------------------+
>
>
>
>
>
> _______________________________________________
> mapguide-internals mailing list
> mapguide-internals at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-internals
> _______________________________________________
> mapguide-internals mailing list
> mapguide-internals at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-internals

+-----------------------------------------------------------------+
|Paul Spencer                          pspencer at dmsolutions.ca    |
+-----------------------------------------------------------------+
|Chief Technology Officer                                         |
|DM Solutions Group Inc                http://www.dmsolutions.ca/ |
+-----------------------------------------------------------------+





_______________________________________________
mapguide-internals mailing list
mapguide-internals at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-internals
_______________________________________________
mapguide-internals mailing list
mapguide-internals at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-internals

_______________________________________________
mapguide-internals mailing list
mapguide-internals at lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapguide-internals


More information about the mapguide-internals mailing list