Technical migration


    • Service

      Service

      Run the following script to migrate the Map service. Then rebuild the Live workspace.

      1. function __convertStringPropertyToLong(node, propertyName)  
      2. {  
      3.   var hasChanged = false;  
      4.   if (node.hasProperty(propertyName))  
      5.   {  
      6.     var property = node.getProperty(propertyName);  
      7.     if (property.getType() == 1) // 1 is for string  
      8.     {  
      9.       var valueAsString = property.getString();  
      10.       property.remove();  
      11.   
      12.       if (valueAsString)  
      13.       {  
      14.         node['setProperty(java.lang.String, long)'](propertyName, Number(valueAsString));  
      15.         hasChanged = true;  
      16.       }  
      17.     }  
      18.   }  
      19.   return hasChanged;  
      20. }  
      21.  
      22. function __convertGeocodeProperties(node, latitudePropertyName, longitudePropertyName, newNodeName)  
      23. {  
      24.   var hasChanged = false;  
      25.   
      26.   if (node.hasProperty(latitudePropertyName) && node.hasProperty(longitudePropertyName))  
      27.   {  
      28.     var latitudeProperty = node.getProperty(latitudePropertyName);  
      29.     var longitudeProperty = node.getProperty(longitudePropertyName);  
      30.     if (latitudeProperty.getType() == 4 && longitudeProperty.getType() == 4) // 4 is for double  
      31.     {  
      32.       var latitude = latitudeProperty.getDouble();  
      33.       var longitude = longitudeProperty.getDouble();  
      34.  
      35.       latitudeProperty.remove();  
      36.       longitudeProperty.remove();  
      37.  
      38.       var nodeWithNewProperties = node;  
      39.       if (newNodeName)  
      40.       {  
      41.         nodeWithNewProperties = node.addNode('ametys:' + newNodeName, 'ametys:compositeMetadata');  
      42.       }  
      43.       nodeWithNewProperties['setProperty(java.lang.String, double)']('ametys:latitude', latitude);  
      44.       nodeWithNewProperties['setProperty(java.lang.String, double)']('ametys:longitude', longitude);  
      45.  
      46.       hasChanged = true;  
      47.     }  
      48.   }  
      49.   return hasChanged;  
      50. }  
      51.  
      52. function __renameVertexNode(node)  
      53. {  
      54.   // Get the actual number of the vertex node (examples: 0001, 0025, 1258)  
      55.   var vertexActualNumber = node.getName().substring('ametys:point-'.length);  
      56.   
      57.   // Get the new number of the vertex node (examples: 1, 25, 1258)  
      58.   var vertexNewNumber = /^0*([1-9][0-9]*)$/.test(vertexActualNumber) && RegExp.$1;  
      59.   
      60.   // Rename the node from ametys:point-000x to ametys:x  
      61.   return __renameNode(node, vertexNewNumber);  
      62. }  
      63.  
      64. function __renameNode(node, newName)  
      65. {  
      66.   var hasChanged = false;  
      67.   if (newName != node.getName())  
      68.   {  
      69.     session.move(node.getPath(), node.getParent().getPath() + '/ametys:' + newName);  
      70.     hasChanged = true;  
      71.   }  
      72.   return hasChanged;  
      73. }  
      74.   
      75. function migrateMapsService()  
      76. {  
      77.   var query = qm.createQuery("//element(*, ametys:zoneItem)[@ametys-internal:type = 'SERVICE' and @ametys-internal:service = 'org.ametys.plugins.maps.services.Maps']", javax.jcr.query.Query.XPATH);  
      78.   var nodes = query.execute().getNodes();  
      79.   var count = 0;  
      80.   
      81.   var hasChanges = false;  
      82.   while (nodes.hasNext())  
      83.   {  
      84.     var paramsNode = nodes.nextNode().getNode("ametys:service_parameters");  
      85.   
      86.     // Converts the height parameters from String to Long  
      87.     hasChanges = __convertStringPropertyToLong(paramsNode, "ametys:height") || hasChanges;  
      88.   
      89.     // Converts the centerLat and centerLng properties to create a geocode node named center  
      90.     hasChanges = __convertGeocodeProperties(paramsNode, 'ametys:centerLat', 'ametys:centerLng', 'center') || hasChanges;  
      91.   
      92.     if (paramsNode.hasNode('ametys:pois'))  
      93.     {  
      94.       var poisNode = paramsNode.getNode('ametys:pois');  
      95.   
      96.       // Iterate on points of interest  
      97.       var poisNodes = poisNode.getNodes('ametys:poi-*');  
      98.       while (poisNodes.hasNext())  
      99.       {  
      100.         var poiNode = poisNodes.nextNode();  
      101.   
      102.         var poiType = poiNode.getProperty('ametys:type').getString();  
      103.         if ('marker' == poiType)  
      104.         {  
      105.           // For markers, just convert the lat and lng properties to create a geocode node named point  
      106.           hasChanges = __convertGeocodeProperties(poiNode, 'ametys:lat', 'ametys:lng', 'point') || hasCHanges;  
      107.         }  
      108.         else if ('polygon' == poiType)  
      109.         {  
      110.           var pointsNode = poiNode.getNode('ametys:points');  
      111.   
      112.           // Change the type of the points node  
      113.           pointsNode.setPrimaryType('ametys:multipleItem');  
      114.           pointsNode.setProperty('ametys-internal:typeId', 'geocode');  
      115.   
      116.           // Iterate on polygon's vertex nodes  
      117.           var vertexesNodes = pointsNode.getNodes();  
      118.           while (vertexesNodes.hasNext())  
      119.           {  
      120.             var vertexNode = vertexesNodes.nextNode();  
      121.  
      122.             // Converts the lat and lng properties to rename them and fit to a geocode node  
      123.             hasChanges = __convertGeocodeProperties(vertexNode, 'ametys:lat', 'ametys:lng') || hasChanges;  
      124.   
      125.             // Rename the vertex node from ametys:point-000x to ametys:x  
      126.             hasChanges = __renameVertexNode(vertexNode) || hasChanges;  
      127.           }  
      128.         }  
      129.         else  
      130.         {  
      131.           // Should not happen, do nothing  
      132.         }  
      133.   
      134.         // Rename the point of interest node from ametys:poi-x to ametys:x  
      135.         hasChanges = __renameNode(poiNode, poiNode.getName().substring('ametys:poi-'.length)) || hasChanges;  
      136.       }  
      137.   
      138.       // Rename the points of interest node from ametys:pois to ametys:pointsOfInterest  
      139.       hasChanges = __renameNode(poisNode, 'pointsOfInterest') || hasChanges;  
      140.     }  
      141.   
      142.     if (hasChanges)  
      143.     {  
      144.       count++;  
      145.     }  
      146.   }  
      147.   
      148.   if (count > 0)  
      149.   {  
      150.     session.save();  
      151.     print(count + " maps services have been migrated.");  
      152.   }  
      153. }  
      154.   
      155. var qm = session.getWorkspace().getQueryManager();  
      156. migrateMapsService();  
      157.   
      158. print("End of migration, you can rebuild the Live workspace");  
Back to top

Maps