You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/07/20 15:30:11 UTC

[cayenne] 02/03: CAY-2752 Rename queryTemplate to dataMapTemplate in the cgen config - update schema

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

commit 3925135ca430a98b285da2832421e199603696d1
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Jul 20 18:10:35 2022 +0300

    CAY-2752 Rename queryTemplate to dataMapTemplate in the cgen config
     - update schema
---
 .../org/apache/cayenne/gen/CgenConfiguration.java  |  4 +-
 .../apache/cayenne/gen/xml/CgenConfigHandler.java  | 16 ++++----
 .../upgrade/handlers/UpgradeHandler_V11.java       | 33 ++++++++++++++++-
 .../upgrade/handlers/UpgradeHandler_V11Test.java   | 43 +++++++++++++++++++---
 .../project/upgrade/handlers/test-map-v10.map.xml  |  2 +
 .../org/apache/cayenne/schema/11/cgen.xsd          |  4 +-
 6 files changed, 83 insertions(+), 19 deletions(-)

diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index 8731b1a8a..af4062701 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -416,8 +416,8 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
                 .simpleTag("superTemplate", separatorsToUnix(this.superTemplate))
                 .simpleTag("embeddableTemplate", separatorsToUnix(this.embeddableTemplate))
                 .simpleTag("embeddableSuperTemplate", separatorsToUnix(this.embeddableSuperTemplate))
-                .simpleTag("queryTemplate", separatorsToUnix(this.dataMapTemplate))
-                .simpleTag("querySuperTemplate", separatorsToUnix(this.dataMapSuperTemplate))
+                .simpleTag("dataMapTemplate", separatorsToUnix(this.dataMapTemplate))
+                .simpleTag("dataMapSuperTemplate", separatorsToUnix(this.dataMapSuperTemplate))
                 .simpleTag("outputPattern", this.outputPattern)
                 .simpleTag("makePairs", Boolean.toString(this.makePairs))
                 .simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 3dea5e115..599c2959a 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -45,8 +45,8 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
     private static final String SUPERCLASS_TEMPLATE_TAG = "superTemplate";
     private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate";
     private static final String EMBEDDABLE_SUPER_TEMPLATE_TAG = "embeddableSuperTemplate";
-    private static final String QUERY_TEMPLATE_TAG = "queryTemplate";
-    private static final String QUERY_SUPER_TEMPLATE_TAG = "querySuperTemplate";
+    private static final String DATAMAP_TEMPLATE_TAG = "dataMapTemplate";
+    private static final String DATAMAP_SUPER_TEMPLATE_TAG = "dataMapSuperTemplate";
     private static final String OUTPUT_PATTERN_TAG = "outputPattern";
     private static final String MAKE_PAIRS_TAG = "makePairs";
     private static final String USE_PKG_PATH_TAG = "usePkgPath";
@@ -105,11 +105,11 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
             	break;
             case EMBEDDABLE_SUPER_TEMPLATE_TAG:
             	createEmbeddableSuperTemplate(data);
-            case QUERY_TEMPLATE_TAG:
-            	createQueryTemplate(data);
+            case DATAMAP_TEMPLATE_TAG:
+            	createDataMapTemplate(data);
             	break;
-            case QUERY_SUPER_TEMPLATE_TAG:
-            	createQuerySuperTemplate(data);
+            case DATAMAP_SUPER_TEMPLATE_TAG:
+            	createDataMapSuperTemplate(data);
                 break;
             case OUTPUT_PATTERN_TAG:
                 createOutputPattern(data);
@@ -191,14 +191,14 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
     	configuration.setEmbeddableSuperTemplate(template);
     }
     
-    private void createQueryTemplate(String template) {
+    private void createDataMapTemplate(String template) {
     	if(template.trim().length() == 0) {
     		return;
     	}
     	configuration.setDataMapTemplate(template);
     }
     
-    private void createQuerySuperTemplate(String template) {
+    private void createDataMapSuperTemplate(String template) {
     	if(template.trim().length() == 0) {
     		return;
     	}
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 6e17c6ad2..0cd39e24b 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
@@ -25,6 +25,7 @@ import javax.xml.xpath.XPathFactory;
 
 import org.apache.cayenne.project.upgrade.UpgradeUnit;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 /**
@@ -32,6 +33,7 @@ import org.w3c.dom.NodeList;
  * Changes highlight:
  *      - schemas version update
  *      - ROP removal
+ *      - cgen schema changes
  *
  * @since 4.3
  */
@@ -57,7 +59,7 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
 
         dropROPProperties(upgradeUnit);
         dropObjEntityClientInfo(upgradeUnit);
-        dropCgenClientConfig(upgradeUnit);
+        updateCgenConfig(upgradeUnit);
     }
 
     private void upgradeComments(UpgradeUnit upgradeUnit) {
@@ -119,6 +121,35 @@ public class UpgradeHandler_V11 implements UpgradeHandler {
         }
     }
 
+    private void updateCgenConfig(UpgradeUnit upgradeUnit) {
+        renameQueryTemplates(upgradeUnit);
+        dropCgenClientConfig(upgradeUnit);
+    }
+
+    private void renameQueryTemplates(UpgradeUnit upgradeUnit) {
+        XPath xpath = XPathFactory.newInstance().newXPath();
+        NodeList queryTemplates;
+        NodeList querySuperTemplates;
+        try {
+            queryTemplates = (NodeList) xpath.evaluate("/data-map/*[local-name()='cgen']/*[local-name()='queryTemplate']",
+                    upgradeUnit.getDocument(), XPathConstants.NODESET);
+            querySuperTemplates = (NodeList) xpath.evaluate("/data-map/*[local-name()='cgen']/*[local-name()='querySuperTemplate']",
+                    upgradeUnit.getDocument(), XPathConstants.NODESET);
+        } catch (Exception e) {
+            return;
+        }
+
+        for (int j = 0; j < queryTemplates.getLength(); j++) {
+            Node element = queryTemplates.item(j);
+            upgradeUnit.getDocument().renameNode(element, null, "dataMapTemplate");
+        }
+
+        for (int j = 0; j < querySuperTemplates.getLength(); j++) {
+            Node element = querySuperTemplates.item(j);
+            upgradeUnit.getDocument().renameNode(element, null, "dataMapSuperTemplate");
+        }
+    }
+
     private void dropCgenClientConfig(UpgradeUnit upgradeUnit) {
         XPath xpath = XPathFactory.newInstance().newXPath();
         NodeList nodes;
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 dcc8f5349..4a2d7d5b4 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
@@ -28,6 +28,7 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verifyZeroInteractions;
@@ -74,21 +75,51 @@ public class UpgradeHandler_V11Test extends BaseUpgradeHandlerTest{
         assertEquals("http://cayenne.apache.org/schema/11/info", objEntity.getFirstChild().getNextSibling().getAttributes().getNamedItem("xmlns:info").getNodeValue());
 
         assertEquals(2, root.getElementsByTagName("db-attribute").getLength());
+    }
+
+    @Test
+    public void testCgenDomUpgrade() throws Exception {
+        Document document = processDataMapDom("test-map-v10.map.xml");
+        Element root = document.getDocumentElement();
 
+        // check cgen config is updated
         NodeList cgens = root.getElementsByTagName("cgen");
-        assertEquals(1, objEntities.getLength());
+        assertEquals(1, cgens.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");
+
+        NodeList childNodes = cgenConfig.getChildNodes();
+        boolean dataMapTemplateSeen = false;
+        boolean dataMapSuperTemplateSeen = false;
+        int elements = 0;
+        for(int i = 0; i< childNodes.getLength(); i++) {
+            Node node = childNodes.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                elements++;
+                switch (node.getNodeName()) {
+                    case "client":
+                        fail("<client> tag is still present in the <cgen> config");
+                    case "queryTemplate":
+                        fail("<queryTemplate> tag is still present in the <cgen> config");
+                    case "querySuperTemplate":
+                        fail("<querySuperTemplate> tag is still present in the <cgen> config");
+                    case "dataMapTemplate":
+                        dataMapTemplateSeen = true;
+                        break;
+                    case "dataMapSuperTemplate":
+                        dataMapSuperTemplateSeen = true;
+                        break;
+                }
             }
         }
+
+        assertEquals(4, elements);
+        assertTrue(dataMapTemplateSeen);
+        assertTrue(dataMapSuperTemplateSeen);
     }
 
     @Test
-    public void testModelUpgrade() throws Exception {
+    public void testModelUpgrade() {
         DataChannelDescriptor descriptor = mock(DataChannelDescriptor.class);
         handler.processModel(descriptor);
         verifyZeroInteractions(descriptor);
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 bafd4987f..e2db08d71 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
@@ -17,6 +17,8 @@
     <cgen xmlns="http://cayenne.apache.org/schema/10/cgen">
         <destDir>../../../../target/cgenClasses</destDir>
         <mode>entity</mode>
+        <queryTemplate>test_query_template</queryTemplate>
+        <querySuperTemplate>test_query_super_template</querySuperTemplate>
         <client>true</client>
     </cgen>
     <dbimport xmlns="http://cayenne.apache.org/schema/10/dbimport">
diff --git a/cayenne-server/src/main/resources/org/apache/cayenne/schema/11/cgen.xsd b/cayenne-server/src/main/resources/org/apache/cayenne/schema/11/cgen.xsd
index 2fe707089..f41e23c9a 100644
--- a/cayenne-server/src/main/resources/org/apache/cayenne/schema/11/cgen.xsd
+++ b/cayenne-server/src/main/resources/org/apache/cayenne/schema/11/cgen.xsd
@@ -34,8 +34,8 @@
                     <xs:element name="superTemplate" minOccurs="0" type="xs:string"/>
                     <xs:element name="embeddableTemplate" minOccurs="0" type="xs:string"/>
                     <xs:element name="embeddableSuperTemplate" minOccurs="0" type="xs:string"/>
-                    <xs:element name="queryTemplate" minOccurs="0" type="xs:string"/>
-                    <xs:element name="querySuperTemplate" minOccurs="0" type="xs:string"/>
+                    <xs:element name="dataMapTemplate" minOccurs="0" type="xs:string"/>
+                    <xs:element name="dataMapSuperTemplate" minOccurs="0" type="xs:string"/>
                     <xs:element name="outputPattern" minOccurs="0" type="xs:string"/>
                     <xs:element name="makePairs" minOccurs="0" type="xs:boolean"/>
                     <xs:element name="skipRelationshipsLoading" minOccurs="0" type="xs:boolean"/>