[mapguide-commits] r4390 - in trunk/MgDev/Web/src: mapviewerjava mapviewernet mapviewerphp

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue Dec 8 18:15:44 EST 2009


Author: brucedechant
Date: 2009-12-08 18:15:44 -0500 (Tue, 08 Dec 2009)
New Revision: 4390

Modified:
   trunk/MgDev/Web/src/mapviewerjava/legend.jsp
   trunk/MgDev/Web/src/mapviewernet/legend.aspx
   trunk/MgDev/Web/src/mapviewerphp/legend.php
Log:
Fix for trac ticket 1172 - Improve legend performance by using GetResourceContents() API
http://trac.osgeo.org/mapguide/ticket/1172

Notes:
- Change to use the NEW GetResourceContents() API when generating the legend


Modified: trunk/MgDev/Web/src/mapviewerjava/legend.jsp
===================================================================
--- trunk/MgDev/Web/src/mapviewerjava/legend.jsp	2009-12-08 23:05:46 UTC (rev 4389)
+++ trunk/MgDev/Web/src/mapviewerjava/legend.jsp	2009-12-08 23:15:44 UTC (rev 4390)
@@ -29,11 +29,12 @@
 
 class TreeItem
 {
-    public TreeItem(String name, boolean isGroup, Object rtObject)
+    public TreeItem(String name, boolean isGroup, Object rtObject, String layerData)
     {
         this.name = name;
         this.isGroup = isGroup;
         this.rtObject = rtObject;
+        this.layerData = layerData;
         if(isGroup)
             this.children = new ArrayList();
         else
@@ -55,6 +56,7 @@
     public ArrayList children;
     public String parentName;
     public TreeItem parent;
+    public String layerData;
 }
 
 String mapName = "";
@@ -103,7 +105,7 @@
 
     int updateType = -1;
 
-    ArrayList tree = BuildLayerTree(map);
+    ArrayList tree = BuildLayerTree(map, resourceSrvc);
     if(summary)
     {
         updateType = 0;
@@ -182,7 +184,7 @@
 %>
 
 <%!
-ArrayList BuildLayerTree(MgMap map) throws MgException
+ArrayList BuildLayerTree(MgMap map, MgResourceService resSrvc) throws MgException
 {
     ArrayList tree = new ArrayList();
     HashMap knownGroups = new HashMap();
@@ -192,7 +194,7 @@
     for(int i = 0; i < groups.GetCount(); i++)
     {
         MgLayerGroup rtGroup = (MgLayerGroup)groups.GetItem(i);
-        TreeItem node = new TreeItem(rtGroup.GetName(), true, rtGroup);
+        TreeItem node = new TreeItem(rtGroup.GetName(), true, rtGroup, "null");
         knownGroups.put(node.name, node);
         MgLayerGroup parentGroup = rtGroup.GetGroup();
         if(parentGroup == null)
@@ -224,11 +226,23 @@
                 tree.add(node); //should not happen. place group in the root if parent is not known
         }
     }
+    // Get the layers
     MgLayerCollection layers = map.GetLayers();
+
+    // Get the resource Ids of the layers
+    MgStringCollection resIds = new MgStringCollection();
     for(int i = 0; i < layers.GetCount(); i++)
     {
         MgLayer rtLayer = (MgLayer) layers.GetItem(i);
-        TreeItem node = new TreeItem(rtLayer.GetName(), false, rtLayer);
+        MgResourceIdentifier resId = rtLayer.GetLayerDefinition();
+        resIds.Add(resId.ToString());
+    }
+    MgStringCollection layersData = resSrvc.GetResourceContents(resIds, null);
+
+    for(int i = 0; i < layers.GetCount(); i++)
+    {
+        MgLayer rtLayer = (MgLayer) layers.GetItem(i);
+        TreeItem node = new TreeItem(rtLayer.GetName(), false, rtLayer, (String)layersData.GetItem(i));
         MgLayerGroup parentGroup = rtLayer.GetGroup();
         if(parentGroup == null)
             tree.add(node);
@@ -326,6 +340,7 @@
                     if(fulldata)
                     {
                         MgResourceIdentifier resId = rtLayer.GetLayerDefinition();
+                        String layerData = node.layerData;
                         String layerName = "lyr" + (intermediateVar++);
                         String objectId = rtLayer.GetObjectId();
                         output = output + String.format("var %s = new LayerItem(\"%s\", \"%s\", %s, %s, %s, %s, %s, \"%s\", \"%s\", %s);\n",
@@ -349,7 +364,7 @@
 
                         if(layerMap == null || !layerMap.containsKey(objectId))
                         {
-                            BuildLayerDefinitionData(resSrvc, resId, layerName);
+                            BuildLayerDefinitionData(layerData, layerName);
                         }
                     }
                     else
@@ -369,15 +384,14 @@
 %>
 
 <%!
-void BuildLayerDefinitionData(MgResourceService resSrvc, MgResourceIdentifier resId, String layerVarName)
+void BuildLayerDefinitionData(String layerData, String layerVarName)
 {
     try
     {
-        MgByteReader layerByteReader = resSrvc.GetResourceContent(resId);
-        InputStream layerStream = ByteReaderToStream(layerByteReader);
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         DocumentBuilder builder = factory.newDocumentBuilder();
-        Document doc = builder.parse(layerStream);
+        InputStream is = new ByteArrayInputStream(layerData.getBytes("UTF-8")); 
+        Document doc = builder.parse(is);
         int type = 0;
         NodeList scaleRanges = doc.getElementsByTagName("VectorScaleRange");
         if(scaleRanges.getLength() == 0) {
@@ -466,11 +480,6 @@
         }
         output = output + String.format("%s.lyrtype = %d;\n", new Object[]{layerVarName, new Integer(type) });
     }
-    catch(MgException e)
-    {
-        //broken layer definition. just don't create any info for that layer
-        return;
-    }
     catch(Exception e)
     {
         //broken layer definition. just don't create any info for that layer

Modified: trunk/MgDev/Web/src/mapviewernet/legend.aspx
===================================================================
--- trunk/MgDev/Web/src/mapviewernet/legend.aspx	2009-12-08 23:05:46 UTC (rev 4389)
+++ trunk/MgDev/Web/src/mapviewernet/legend.aspx	2009-12-08 23:15:44 UTC (rev 4390)
@@ -29,11 +29,12 @@
 <script runat="server">
 class TreeItem
 {
-    public TreeItem(String name, bool isGroup, Object rtObject)
+    public TreeItem(String name, bool isGroup, Object rtObject, String layerData)
     {
         this.name = name;
         this.isGroup = isGroup;
         this.rtObject = rtObject;
+        this.layerData = layerData;
         if(isGroup)
             this.children = new ArrayList();
         else
@@ -55,6 +56,7 @@
     public ArrayList children;
     public String parentName;
     public TreeItem parent;
+    public String layerData;
 }
 
 String mapName = "";
@@ -96,7 +98,7 @@
 
         int updateType = -1;
 
-        ArrayList tree = BuildLayerTree(map);
+        ArrayList tree = BuildLayerTree(map, resourceSrvc);
         if(summary)
         {
             updateType = 0;
@@ -189,7 +191,7 @@
     return number.ToString(NumberFormatInfo.InvariantInfo);
 }
 
-ArrayList BuildLayerTree(MgMap map)
+ArrayList BuildLayerTree(MgMap map, MgResourceService resSrvc)
 {
     ArrayList tree = new ArrayList();
     Hashtable knownGroups = new Hashtable();
@@ -199,7 +201,7 @@
     for(int i = 0; i < groups.GetCount(); i++)
     {
         MgLayerGroup rtGroup = (MgLayerGroup)groups.GetItem(i);
-        TreeItem node = new TreeItem(rtGroup.GetName(), true, rtGroup);
+        TreeItem node = new TreeItem(rtGroup.GetName(), true, rtGroup, null);
         knownGroups.Add(node.name, node);
         MgLayerGroup parentGroup = rtGroup.GetGroup();
         if(parentGroup == null)
@@ -231,11 +233,23 @@
                 tree.Add(node); //should not happen. place group in the root if parent is not known
         }
     }
+    // Get the layers
     MgLayerCollection layers = map.GetLayers();
+
+    // Get the resource Ids of the layers
+    MgStringCollection resIds = new MgStringCollection();
     for(int i = 0; i < layers.GetCount(); i++)
     {
         MgLayer rtLayer = (MgLayer) layers.GetItem(i);
-        TreeItem node = new TreeItem(rtLayer.GetName(), false, rtLayer);
+        MgResourceIdentifier resId = rtLayer.GetLayerDefinition();
+        resIds.Add(resId.ToString());
+    }
+    MgStringCollection layersData = resSrvc.GetResourceContents(resIds, null);
+
+    for(int i = 0; i < layers.GetCount(); i++)
+    {
+        MgLayer rtLayer = (MgLayer) layers.GetItem(i);
+        TreeItem node = new TreeItem(rtLayer.GetName(), false, rtLayer, (String)layersData.GetItem(i));
         MgLayerGroup parentGroup = rtLayer.GetGroup();
         if(parentGroup == null)
             tree.Add(node);
@@ -333,6 +347,7 @@
                     if(fulldata)
                     {
                         MgResourceIdentifier resId = rtLayer.GetLayerDefinition();
+                        String layerData = node.layerData;
                         String layerName = "lyr" + (intermediateVar++);
                         String objectId = rtLayer.GetObjectId();
                         output = output + String.Format("var {0} = new LayerItem(\"{1}\", \"{2}\", {3}, {4}, {5}, {6}, {7}, \"{8}\", \"{9}\", {10});\n",
@@ -356,7 +371,7 @@
 
                         if(layerMap == null || !layerMap.ContainsKey(objectId))
                         {
-                            BuildLayerDefinitionData(resSrvc, resId, layerName);
+                            BuildLayerDefinitionData(layerData, layerName);
                         }
                     }
                     else
@@ -375,14 +390,12 @@
 }
 
 
-void BuildLayerDefinitionData(MgResourceService resSrvc, MgResourceIdentifier resId, String layerVarName)
+void BuildLayerDefinitionData(String layerData, String layerVarName)
 {
     try
     {
-        MgByteReader layerByteReader = resSrvc.GetResourceContent(resId);
-        String layerDefString = layerByteReader.ToString();
         XmlDocument doc = new XmlDocument();
-        doc.LoadXml(layerDefString);
+        doc.LoadXml(layerData);
         int type = 0;
         XmlNodeList scaleRanges = doc.GetElementsByTagName("VectorScaleRange");
         if(scaleRanges.Count == 0)
@@ -464,11 +477,6 @@
         }
         output = output + String.Format("{0}.lyrtype = {1};\n", layerVarName, type.ToString(NumberFormatInfo.InvariantInfo) );
     }
-    catch(MgException e)
-    {
-        //broken layer definition. just don't create any info for that layer
-        return;
-    }
     catch(Exception e)
     {
         //broken layer definition. just don't create any info for that layer

Modified: trunk/MgDev/Web/src/mapviewerphp/legend.php
===================================================================
--- trunk/MgDev/Web/src/mapviewerphp/legend.php	2009-12-08 23:05:46 UTC (rev 4389)
+++ trunk/MgDev/Web/src/mapviewerphp/legend.php	2009-12-08 23:15:44 UTC (rev 4390)
@@ -22,11 +22,12 @@
 
     class TreeItem
     {
-        public function __construct($name, $isGroup, $rtObject)
+        public function __construct($name, $isGroup, $rtObject, $layerData)
         {
             $this->name = $name;
             $this->isGroup = $isGroup;
             $this->rtObject = $rtObject;
+            $this->layerData = $layerData;
             if($isGroup)
                 $this->children = array();
             else
@@ -47,6 +48,7 @@
         public $rtObject;
         public $children;
         public $parentName;
+        public $layerData;
     }
 
     $mapName = "";
@@ -82,7 +84,7 @@
         $map->Open($resourceSrvc, $mapName);
 
         $layerMap = null;
-        $tree = BuildLayerTree($map);
+        $tree = BuildLayerTree($map, $resourceSrvc);
 
         if($summary)
         {
@@ -119,7 +121,7 @@
     $templ = file_get_contents("../viewerfiles/legendupdate.templ");
     printf($templ, $updateType, $output, GetSurroundVirtualPath() . "legend.php");
 
-function BuildLayerTree($map)
+function BuildLayerTree($map, $resSrvc)
 {
     $tree = array();
     $knownGroups = array();
@@ -129,7 +131,7 @@
     for($i = 0; $i < $groups->GetCount(); $i++)
     {
         $rtGroup = $groups->GetItem($i);
-        $node = new TreeItem($rtGroup->GetName(), true, $rtGroup);
+        $node = new TreeItem($rtGroup->GetName(), true, $rtGroup, null);
         $knownGroups[$node->name] = $node;
 
         $parentGroup = $rtGroup->GetGroup();
@@ -161,11 +163,23 @@
                 array_push($tree, $node); //should not happen. place group in the root if parent is not known
         }
     }
+    // Get the layers
     $layers = $map->GetLayers();
+
+    // Get the resource Ids of the layers
+    $resIds = new MgStringCollection();
     for($i = 0; $i < $layers->GetCount(); $i++)
     {
         $rtLayer = $layers->GetItem($i);
-        $node = new TreeItem($rtLayer->GetName(), false, $rtLayer);
+        $resId = $rtLayer->GetLayerDefinition();
+        $resIds->Add($resId->ToString());
+    }
+    $layersData = $resSrvc->GetResourceContents($resIds, null);
+
+    for($i = 0; $i < $layers->GetCount(); $i++)
+    {
+        $rtLayer = $layers->GetItem($i);
+        $node = new TreeItem($rtLayer->GetName(), false, $rtLayer, $layersData->GetItem($i));
         $parentGroup = $rtLayer->GetGroup();
         if($parentGroup == null)
             array_push($tree, $node);
@@ -247,6 +261,7 @@
                     if($fulldata)
                     {
                         $resId = $node->rtObject->GetLayerDefinition();
+                        $layerData = $node->layerData;
                         $layerName = "lyr" . ($intermediateVar ++);
                         $objectId = $node->rtObject->GetObjectId();
                         $output = $output . sprintf("var %s = new LayerItem(\"%s\", \"%s\", %s, %s, %s, %s, %s, \"%s\", \"%s\", %s);\n",
@@ -267,7 +282,7 @@
                         ++ $treeIndex;
 
                         if($layerMap == null || !isset($layerMap[$objectId]))
-                            BuildLayerDefinitionData($resSrvc, $resId, $layerName, $output);
+                            BuildLayerDefinitionData($layerData, $layerName, $output);
                     }
                     else
                     {
@@ -283,21 +298,11 @@
     }
 }
 
-function BuildLayerDefinitionData($resSrvc, $resId, $layerVarName, &$output)
+function BuildLayerDefinitionData($layerData, $layerVarName, &$output)
 {
     global $intermediateVar;
 
-    $xmldoc = null;
-    try
-    {
-        $layerDef = $resSrvc->GetResourceContent($resId);
-        $xmldoc = DOMDocument::loadXML(ByteReaderToString($layerDef));
-    }
-    catch(MgException $e)
-    {
-        //broken layer definition. just don't create any info for that layer
-        return;
-    }
+    $xmldoc = DOMDocument::loadXML($layerData);
 
     $type = 0;
     $scaleRanges = $xmldoc->getElementsByTagName('VectorScaleRange');



More information about the mapguide-commits mailing list