Service

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

function __convertStringPropertyToLong(node, propertyName)  
{  
  var hasChanged = false;  
  if (node.hasProperty(propertyName))  
  {  
    var property = node.getProperty(propertyName);  
    if (property.getType() == 1) // 1 is for string  
    {  
      var valueAsString = property.getString();  
      property.remove();  
  
      if (valueAsString)  
      {  
        node['setProperty(java.lang.String, long)'](propertyName, Number(valueAsString));  
        hasChanged = true;  
      }  
    }  
  }  
  return hasChanged;  
}  

function __convertGeocodeProperties(node, latitudePropertyName, longitudePropertyName, newNodeName)  
{  
  var hasChanged = false;  
  
  if (node.hasProperty(latitudePropertyName) && node.hasProperty(longitudePropertyName))  
  {  
    var latitudeProperty = node.getProperty(latitudePropertyName);  
    var longitudeProperty = node.getProperty(longitudePropertyName);  
    if (latitudeProperty.getType() == 4 && longitudeProperty.getType() == 4) // 4 is for double  
    {  
      var latitude = latitudeProperty.getDouble();  
      var longitude = longitudeProperty.getDouble();  

      latitudeProperty.remove();  
      longitudeProperty.remove();  

      var nodeWithNewProperties = node;  
      if (newNodeName)  
      {  
        nodeWithNewProperties = node.addNode('ametys:' + newNodeName, 'ametys:compositeMetadata');  
      }  
      nodeWithNewProperties['setProperty(java.lang.String, double)']('ametys:latitude', latitude);  
      nodeWithNewProperties['setProperty(java.lang.String, double)']('ametys:longitude', longitude);  

      hasChanged = true;  
    }  
  }  
  return hasChanged;  
}  

function __renameVertexNode(node)  
{  
  // Get the actual number of the vertex node (examples: 0001, 0025, 1258)  
  var vertexActualNumber = node.getName().substring('ametys:point-'.length);  
  
  // Get the new number of the vertex node (examples: 1, 25, 1258)  
  var vertexNewNumber = /^0*([1-9][0-9]*)$/.test(vertexActualNumber) && RegExp.$1;  
  
  // Rename the node from ametys:point-000x to ametys:x  
  return __renameNode(node, vertexNewNumber);  
}  

function __renameNode(node, newName)  
{  
  var hasChanged = false;  
  if (newName != node.getName())  
  {  
    session.move(node.getPath(), node.getParent().getPath() + '/ametys:' + newName);  
    hasChanged = true;  
  }  
  return hasChanged;  
}  
  
function migrateMapsService()  
{  
  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);  
  var nodes = query.execute().getNodes();  
  var count = 0;  
  
  var hasChanges = false;  
  while (nodes.hasNext())  
  {  
    var paramsNode = nodes.nextNode().getNode("ametys:service_parameters");  
  
    // Converts the height parameters from String to Long  
    hasChanges = __convertStringPropertyToLong(paramsNode, "ametys:height") || hasChanges;  
  
    // Converts the centerLat and centerLng properties to create a geocode node named center  
    hasChanges = __convertGeocodeProperties(paramsNode, 'ametys:centerLat', 'ametys:centerLng', 'center') || hasChanges;  
  
    if (paramsNode.hasNode('ametys:pois'))  
    {  
      var poisNode = paramsNode.getNode('ametys:pois');  
  
      // Iterate on points of interest  
      var poisNodes = poisNode.getNodes('ametys:poi-*');  
      while (poisNodes.hasNext())  
      {  
        var poiNode = poisNodes.nextNode();  
  
        var poiType = poiNode.getProperty('ametys:type').getString();  
        if ('marker' == poiType)  
        {  
          // For markers, just convert the lat and lng properties to create a geocode node named point  
          hasChanges = __convertGeocodeProperties(poiNode, 'ametys:lat', 'ametys:lng', 'point') || hasCHanges;  
        }  
        else if ('polygon' == poiType)  
        {  
          var pointsNode = poiNode.getNode('ametys:points');  
  
          // Change the type of the points node  
          pointsNode.setPrimaryType('ametys:multipleItem');  
          pointsNode.setProperty('ametys-internal:typeId', 'geocode');  
  
          // Iterate on polygon's vertex nodes  
          var vertexesNodes = pointsNode.getNodes();  
          while (vertexesNodes.hasNext())  
          {  
            var vertexNode = vertexesNodes.nextNode();  

            // Converts the lat and lng properties to rename them and fit to a geocode node  
            hasChanges = __convertGeocodeProperties(vertexNode, 'ametys:lat', 'ametys:lng') || hasChanges;  
  
            // Rename the vertex node from ametys:point-000x to ametys:x  
            hasChanges = __renameVertexNode(vertexNode) || hasChanges;  
          }  
        }  
        else  
        {  
          // Should not happen, do nothing  
        }  
  
        // Rename the point of interest node from ametys:poi-x to ametys:x  
        hasChanges = __renameNode(poiNode, poiNode.getName().substring('ametys:poi-'.length)) || hasChanges;  
      }  
  
      // Rename the points of interest node from ametys:pois to ametys:pointsOfInterest  
      hasChanges = __renameNode(poisNode, 'pointsOfInterest') || hasChanges;  
    }  
  
    if (hasChanges)  
    {  
      count++;  
    }  
  }  
  
  if (count > 0)  
  {  
    session.save();  
    print(count + " maps services have been migrated.");  
  }  
}  
  
var qm = session.getWorkspace().getQueryManager();  
migrateMapsService();  
  
print("End of migration, you can rebuild the Live workspace");  
Back to top

Maps