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 <stari...@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"/>