This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 5a362295f CAY-2747 Update project XML version to 11  - upgrade schemas 
for all xml elements in the project  - cleanup cgen config
5a362295f is described below

commit 5a362295f6d35494e178c6cd1f627dc5bca9d604
Author: Nikita Timofeev <[email protected]>
AuthorDate: Mon Jul 11 16:37:39 2022 +0300

    CAY-2747 Update project XML version to 11
     - upgrade schemas for all xml elements in the project
     - cleanup cgen config
---
 .../project/upgrade/handlers/UpgradeHandler.java   | 55 ++++++++++++++++++
 .../upgrade/handlers/UpgradeHandler_V10.java       | 17 +-----
 .../upgrade/handlers/UpgradeHandler_V11.java       | 66 ++++++++++++++--------
 .../upgrade/handlers/UpgradeHandler_V7.java        |  6 +-
 .../upgrade/handlers/UpgradeHandler_V8.java        |  6 +-
 .../upgrade/handlers/UpgradeHandler_V9.java        |  5 +-
 .../upgrade/handlers/UpgradeHandler_V11Test.java   | 18 +++++-
 .../project/upgrade/handlers/test-map-v10.map.xml  | 11 +++-
 8 files changed, 130 insertions(+), 54 deletions(-)

diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
index 7437220aa..e0818a261 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler.java
@@ -19,8 +19,15 @@
 
 package org.apache.cayenne.project.upgrade.handlers;
 
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.project.upgrade.UpgradeUnit;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 /**
  * Interface that upgrade handlers should implement.
@@ -53,4 +60,52 @@ public interface UpgradeHandler {
     default void processModel(DataChannelDescriptor dataChannelDescriptor) {
     }
 
+    /**
+     * Upgrade Domain schema and version info
+     * @param upgradeUnit for the datamap
+     */
+    default void updateDomainSchemaAndVersion(UpgradeUnit upgradeUnit) {
+        Element domain = upgradeUnit.getDocument().getDocumentElement();
+        // update schema
+        
domain.setAttribute("xmlns","http://cayenne.apache.org/schema/"+getVersion()+"/domain");
+        
domain.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance";);
+        domain.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/"+getVersion()+"/domain " +
+                
"https://cayenne.apache.org/schema/"+getVersion()+"/domain.xsd");
+        // update version
+        domain.setAttribute("project-version", getVersion());
+    }
+
+    /**
+     * Upgrade DataMap schema and version info
+     * @param upgradeUnit for the datamap
+     */
+    default void updateDataMapSchemaAndVersion(UpgradeUnit upgradeUnit) {
+        Element dataMap = upgradeUnit.getDocument().getDocumentElement();
+        // update schema
+        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/"+getVersion()+"/modelMap");
+        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/"+getVersion()+"/modelMap " +
+                
"https://cayenne.apache.org/schema/"+getVersion()+"/modelMap.xsd");
+        // update version
+        dataMap.setAttribute("project-version", getVersion());
+    }
+
+    /**
+     * Update schema for the given extension
+     * @param upgradeUnit a unit to work with
+     * @param extension name of the extension (cgen, dbimport, graph )
+     */
+    default void updateExtensionSchema(UpgradeUnit upgradeUnit, String 
extension) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        NodeList nodes;
+        try {
+            nodes = (NodeList) 
xpath.evaluate("/data-map/*[local-name()='"+extension+"']",
+                    upgradeUnit.getDocument(), XPathConstants.NODESET);
+        } catch (XPathExpressionException e) {
+            return;
+        }
+        for (int j = 0; j < nodes.getLength(); j++) {
+            Element element = (Element) nodes.item(j);
+            element.setAttribute("xmlns", 
"http://cayenne.apache.org/schema/"+getVersion()+"/"+extension);
+        }
+    }
 }
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V10.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V10.java
index 9b9e5ed98..ba01d8b2b 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V10.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V10.java
@@ -20,7 +20,6 @@
 package org.apache.cayenne.project.upgrade.handlers;
 
 import org.apache.cayenne.project.upgrade.UpgradeUnit;
-import org.w3c.dom.Element;
 
 /**
  * Upgrade handler for the project version "10" introduced by 4.1.M1 release.
@@ -39,24 +38,12 @@ public class UpgradeHandler_V10 implements UpgradeHandler {
 
     @Override
     public void processProjectDom(UpgradeUnit upgradeUnit) {
-        Element domain = upgradeUnit.getDocument().getDocumentElement();
         // introduce xml namespace and schema for domain
-        
domain.setAttribute("xmlns","http://cayenne.apache.org/schema/10/domain";);
-        
domain.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance";);
-        domain.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/10/domain " +
-                "https://cayenne.apache.org/schema/10/domain.xsd";);
-        // update version
-        domain.setAttribute("project-version", getVersion());
+        updateDomainSchemaAndVersion(upgradeUnit);
     }
 
     @Override
     public void processDataMapDom(UpgradeUnit upgradeUnit) {
-        Element dataMap = upgradeUnit.getDocument().getDocumentElement();
-        // update schema
-        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/10/modelMap";);
-        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/10/modelMap " +
-                "https://cayenne.apache.org/schema/10/modelMap.xsd";);
-        // update version
-        dataMap.setAttribute("project-version", getVersion());
+        updateDataMapSchemaAndVersion(upgradeUnit);
     }
 }
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
index e8a6d7802..6e17c6ad2 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11.java
@@ -30,6 +30,7 @@ import org.w3c.dom.NodeList;
 /**
  * Upgrade handler for the project version "11" introduced by 4.3.M1 release.
  * Changes highlight:
+ *      - schemas version update
  *      - ROP removal
  *
  * @since 4.3
@@ -43,37 +44,41 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
 
     @Override
     public void processProjectDom(UpgradeUnit upgradeUnit) {
-        Element domain = upgradeUnit.getDocument().getDocumentElement();
-        // introduce xml namespace and schema for domain
-        
domain.setAttribute("xmlns","http://cayenne.apache.org/schema/11/domain";);
-        
domain.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance";);
-        domain.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/11/domain " +
-                "https://cayenne.apache.org/schema/11/domain.xsd";);
-        // update version
-        domain.setAttribute("project-version", getVersion());
+        updateDomainSchemaAndVersion(upgradeUnit);
     }
 
     @Override
     public void processDataMapDom(UpgradeUnit upgradeUnit) {
-        Element dataMap = upgradeUnit.getDocument().getDocumentElement();
-        // update schema
-        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/11/modelMap";);
-        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/11/modelMap " +
-                "https://cayenne.apache.org/schema/11/modelMap.xsd";);
-        // update version
-        dataMap.setAttribute("project-version", getVersion());
-
-        dropRopProperties(upgradeUnit);
-        cleanupObjEntityClientInfo(upgradeUnit);
+        updateDataMapSchemaAndVersion(upgradeUnit);
+        updateExtensionSchema(upgradeUnit, "cgen");
+        updateExtensionSchema(upgradeUnit, "dbimport");
+        updateExtensionSchema(upgradeUnit, "graph");
+        upgradeComments(upgradeUnit);
 
-        upgradeXmlExtensionsSchemas(upgradeUnit);
+        dropROPProperties(upgradeUnit);
+        dropObjEntityClientInfo(upgradeUnit);
+        dropCgenClientConfig(upgradeUnit);
     }
 
-    private void upgradeXmlExtensionsSchemas(UpgradeUnit upgradeUnit) {
-        
+    private void upgradeComments(UpgradeUnit upgradeUnit) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        NodeList infoNodes;
+        try {
+            infoNodes = (NodeList) 
xpath.evaluate("//*[local-name()='property']",
+                    upgradeUnit.getDocument(), XPathConstants.NODESET);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        for (int j = 0; j < infoNodes.getLength(); j++) {
+            Element infoElement = (Element) infoNodes.item(j);
+            if(infoElement.hasAttribute("xmlns:info")) {
+                infoElement.setAttribute("xmlns:info", 
"http://cayenne.apache.org/schema/11/info";);
+            }
+        }
     }
 
-    private void dropRopProperties(UpgradeUnit upgradeUnit) {
+    private void dropROPProperties(UpgradeUnit upgradeUnit) {
         Element dataMap = upgradeUnit.getDocument().getDocumentElement();
         NodeList propertyNodes;
         try {
@@ -97,7 +102,7 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
         }
     }
 
-    private void cleanupObjEntityClientInfo(UpgradeUnit upgradeUnit) {
+    private void dropObjEntityClientInfo(UpgradeUnit upgradeUnit) {
         NodeList objEntityNodes;
         try {
             XPath xpath = XPathFactory.newInstance().newXPath();
@@ -113,4 +118,19 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
             objEntityElement.removeAttribute("clientSuperClassName");
         }
     }
+
+    private void dropCgenClientConfig(UpgradeUnit upgradeUnit) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        NodeList nodes;
+        try {
+            nodes = (NodeList) 
xpath.evaluate("/data-map/*[local-name()='cgen']/*[local-name()='client']",
+                    upgradeUnit.getDocument(), XPathConstants.NODESET);
+        } catch (Exception e) {
+            return;
+        }
+        for (int j = 0; j < nodes.getLength(); j++) {
+            Element element = (Element) nodes.item(j);
+            element.getParentNode().removeChild(element);
+        }
+    }
 }
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V7.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V7.java
index dc42e3633..217645818 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V7.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V7.java
@@ -64,11 +64,7 @@ public class UpgradeHandler_V7 implements UpgradeHandler {
 
     @Override
     public void processDataMapDom(UpgradeUnit upgradeUnit) {
-        Element dataMap = upgradeUnit.getDocument().getDocumentElement();
-        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/7/modelMap";);
-        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/7/modelMap " +
-                "https://cayenne.apache.org/schema/7/modelMap.xsd";);
-        dataMap.setAttribute("project-version", getVersion());
+        updateDataMapSchemaAndVersion(upgradeUnit);
     }
 
     @Override
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
index cd1a8c0d3..c94dc68ec 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8.java
@@ -47,11 +47,7 @@ public class UpgradeHandler_V8 implements UpgradeHandler {
 
     @Override
     public void processDataMapDom(UpgradeUnit upgradeUnit) {
-        Element dataMap = upgradeUnit.getDocument().getDocumentElement();
-        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/8/modelMap";);
-        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/8/modelMap " +
-                "https://cayenne.apache.org/schema/8/modelMap.xsd";);
-        dataMap.setAttribute("project-version", getVersion());
+        updateDataMapSchemaAndVersion(upgradeUnit);
 
         XPath xpath = XPathFactory.newInstance().newXPath();
         NodeList queryNodes;
diff --git 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V9.java
 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V9.java
index c4c3dcb44..05ce5ec00 100644
--- 
a/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V9.java
+++ 
b/cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V9.java
@@ -54,10 +54,7 @@ public class UpgradeHandler_V9 implements UpgradeHandler {
     public void processDataMapDom(UpgradeUnit upgradeUnit) {
         Document document = upgradeUnit.getDocument();
         Element dataMap = document.getDocumentElement();
-        
dataMap.setAttribute("xmlns","http://cayenne.apache.org/schema/9/modelMap";);
-        dataMap.setAttribute("xsi:schemaLocation", 
"http://cayenne.apache.org/schema/9/modelMap " +
-                "https://cayenne.apache.org/schema/9/modelMap.xsd";);
-        dataMap.setAttribute("project-version", getVersion());
+        updateDataMapSchemaAndVersion(upgradeUnit);
 
         XPath xpath = XPathFactory.newInstance().newXPath();
         try {
diff --git 
a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11Test.java
 
b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11Test.java
index 23f37a9ec..dcc8f5349 100644
--- 
a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11Test.java
+++ 
b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V11Test.java
@@ -24,9 +24,11 @@ import org.junit.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verifyZeroInteractions;
 
@@ -63,12 +65,26 @@ public class UpgradeHandler_V11Test extends 
BaseUpgradeHandlerTest{
 
         NodeList objEntities = root.getElementsByTagName("obj-entity");
         assertEquals(1, objEntities.getLength());
-        NamedNodeMap attributes = objEntities.item(0).getAttributes();
+        Node objEntity = objEntities.item(0);
+        NamedNodeMap attributes = objEntity.getAttributes();
         assertEquals(2, attributes.getLength());
         assertEquals("Artist", attributes.getNamedItem("name").getNodeValue());
         assertEquals("Artist", 
attributes.getNamedItem("dbEntityName").getNodeValue());
+        assertEquals(3, objEntity.getChildNodes().getLength());
+        assertEquals("http://cayenne.apache.org/schema/11/info";, 
objEntity.getFirstChild().getNextSibling().getAttributes().getNamedItem("xmlns:info").getNodeValue());
 
         assertEquals(2, root.getElementsByTagName("db-attribute").getLength());
+
+        NodeList cgens = root.getElementsByTagName("cgen");
+        assertEquals(1, objEntities.getLength());
+        Node cgenConfig = cgens.item(0);
+        assertEquals("http://cayenne.apache.org/schema/11/cgen";, 
cgenConfig.getAttributes().getNamedItem("xmlns").getNodeValue());
+        for(int i=0; i<cgenConfig.getChildNodes().getLength(); i++) {
+            Node node = cgenConfig.getChildNodes().item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE && 
node.getNodeName().equals("client")) {
+                fail("<client> tag is still present in the <cgen> config");
+            }
+        }
     }
 
     @Test
diff --git 
a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v10.map.xml
 
b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v10.map.xml
index 813087fc9..bafd4987f 100644
--- 
a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v10.map.xml
+++ 
b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v10.map.xml
@@ -3,7 +3,7 @@
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
           xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap 
http://cayenne.apache.org/schema/10/modelMap.xsd";
           project-version="10">
-    <property name="defaultPackage" value=""/>
+    <property name="defaultPackage" value="tmp"/>
     <property name="clientSupported" value="true"/>
     <property name="defaultClientPackage" value="tmp"/>
     <property name="defaultClientSuperclass" value="tmp.ClientSuperClass"/>
@@ -12,5 +12,14 @@
         <db-attribute name="untitledAttr1" type="DATE"/>
     </db-entity>
     <obj-entity name="Artist" dbEntityName="Artist" 
clientClassName="tmp.Artist" clientSuperClassName="tmp.ClientSuperClass" 
serverOnly="false">
+        <info:property xmlns:info="http://cayenne.apache.org/schema/10/info"; 
name="comment" value="test"/>
     </obj-entity>
+    <cgen xmlns="http://cayenne.apache.org/schema/10/cgen";>
+        <destDir>../../../../target/cgenClasses</destDir>
+        <mode>entity</mode>
+        <client>true</client>
+    </cgen>
+    <dbimport xmlns="http://cayenne.apache.org/schema/10/dbimport";>
+        <defaultPackage>org.example</defaultPackage>
+    </dbimport>
 </data-map>

Reply via email to