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>