Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 043CC166A4E for ; Tue, 25 Jul 2017 14:25:18 +0200 (CEST) Received: (qmail 36967 invoked by uid 500); 25 Jul 2017 12:25:18 -0000 Mailing-List: contact commits-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cayenne.apache.org Delivered-To: mailing list commits@cayenne.apache.org Received: (qmail 36851 invoked by uid 99); 25 Jul 2017 12:25:18 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 25 Jul 2017 12:25:18 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 294FCF32D3; Tue, 25 Jul 2017 12:25:17 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ntimofeev@apache.org To: commits@cayenne.apache.org Date: Tue, 25 Jul 2017 12:25:25 -0000 Message-Id: In-Reply-To: <5999597c234045819e8eff59495a7222@git.apache.org> References: <5999597c234045819e8eff59495a7222@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [10/16] cayenne git commit: CAY-2335: New XML loading/saving mechanics with support of plugable handlers - ProjectExtension - new upgrade handlers http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8Test.java ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8Test.java new file mode 100644 index 0000000..1201654 --- /dev/null +++ b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/handlers/UpgradeHandler_V8Test.java @@ -0,0 +1,97 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.project.upgrade.handlers; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.junit.Test; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.NodeList; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyZeroInteractions; + +/** + * @since 4.1 + */ +public class UpgradeHandler_V8Test extends BaseUpgradeHandlerTest { + + @Override + UpgradeHandler newHandler() { + return new UpgradeHandler_V8(); + } + + @Test + public void testProjectDomUpgrade() throws Exception { + Document document = processProjectDom("cayenne-project-v7.xml"); + + Element root = document.getDocumentElement(); + assertEquals("8", root.getAttribute("project-version")); + assertEquals("", root.getAttribute("xmlns")); + assertEquals(2, root.getElementsByTagName("map").getLength()); + } + + @Test + public void testDataMapDomUpgrade() throws Exception { + Document document = processDataMapDom("test-map-v7.map.xml"); + + Element root = document.getDocumentElement(); + assertEquals("8", root.getAttribute("project-version")); + assertEquals("http://cayenne.apache.org/schema/8/modelMap", root.getAttribute("xmlns")); + assertEquals(2, root.getElementsByTagName("db-attribute").getLength()); + + NodeList nodeList = root.getElementsByTagName("query"); + for(int i=0; i sources = new ArrayList(); - - sources.add("cayenne.xml"); - sources.add("d1Map1.map.xml"); - sources.add("d1Map2.map.xml"); - sources.add("d1NodeDriver.driver.xml"); - - // upgrades are done in-place, so copy it first - List targetsBefore = new ArrayList(); - for (String source : sources) { - - URL url = getClass().getClassLoader().getResource(sourceUrl + source); - File target = new File(testFolder, source); - assertNotNull(source); - ResourceUtil.copyResourceToFile(url, target); - targetsBefore.add(target); - } - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class); - binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class); - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class); - } - }; - - ProjectUpgrader_V7 upgrader = new ProjectUpgrader_V7(); - Injector injector = DIBootstrap.createInjector(testModule); - injector.injectMembers(upgrader); - - Resource source = new URLResource(targetsBefore.get(0).toURI().toURL()); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - - Resource upgraded = handler.performUpgrade(); - assertNotNull(upgraded); - assertNotSame(source, upgrader); - - // check that all the new files are created... - String[] targetsAfterNames = new String[] { "cayenne-d1.xml", "cayenne-d2.xml", "d1Map1.map.xml", - "d1Map2.map.xml" }; - - File[] targetsAfter = new File[targetsAfterNames.length]; - for (int i = 0; i < targetsAfter.length; i++) { - targetsAfter[i] = new File(testFolder, targetsAfterNames[i]); - assertTrue("File was not created: " + targetsAfter[i].getAbsolutePath(), targetsAfter[i].exists()); - } - - // DataMap files should remain the same; all others need to be deleted - for (File file : targetsBefore) { - if (file.getName().endsWith(".map.xml")) { - assertTrue("DataMap file disappeared: " + file.getAbsolutePath(), file.exists()); - } else { - assertFalse("File expected to be deleted: " + file.getAbsolutePath(), file.exists()); - } - } - - // assert XML structure of the generated files - assertPerformUpgrade_3_0_0_1_cayenne_d1(targetsAfter[0]); - assertPerformUpgrade_3_0_0_1_cayenne_d2(targetsAfter[1]); - assertPerformUpgrade_3_0_0_1_d1Map1(targetsAfter[2]); - assertPerformUpgrade_3_0_0_1_d1Map2(targetsAfter[3]); - } - - private void assertPerformUpgrade_3_0_0_1_cayenne_d1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("", xpath.evaluate("/domain/@name", document)); - assertEquals("9", xpath.evaluate("/domain/@project-version", document)); - - NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET); - assertNotNull(maps); - assertEquals(2, maps.getLength()); - - Node map1 = maps.item(0); - Node map2 = maps.item(1); - - assertEquals("d1Map1", xpath.evaluate("@name", map1)); - assertEquals("d1Map2", xpath.evaluate("@name", map2)); - - NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET); - assertNotNull(nodes); - assertEquals(1, nodes.getLength()); - - Node node1 = nodes.item(0); - - assertEquals("d1NodeDriver", xpath.evaluate("@name", node1)); - assertEquals(XMLPoolingDataSourceFactory.class.getName(), xpath.evaluate("@factory", node1)); - - NodeList mapRefs = (NodeList) xpath.evaluate("map-ref", node1, XPathConstants.NODESET); - assertNotNull(mapRefs); - assertEquals(2, mapRefs.getLength()); - - assertEquals("d1Map1", xpath.evaluate("@name", mapRefs.item(0))); - assertEquals("d1Map2", xpath.evaluate("@name", mapRefs.item(1))); - - NodeList dataSources = (NodeList) xpath.evaluate("data-source", node1, XPathConstants.NODESET); - assertNotNull(dataSources); - assertEquals(1, dataSources.getLength()); - - Node ds = dataSources.item(0); - assertEquals("org.hsqldb.jdbcDriver", xpath.evaluate("driver/@value", ds)); - assertEquals("jdbc:hsqldb:mem:xdb", xpath.evaluate("url/@value", ds)); - } - - private void assertPerformUpgrade_3_0_0_1_cayenne_d2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("", xpath.evaluate("/domain/@name", document)); - assertEquals("9", xpath.evaluate("/domain/@project-version", document)); - - NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET); - assertNotNull(maps); - assertEquals(0, maps.getLength()); - - NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET); - assertNotNull(nodes); - assertEquals(2, nodes.getLength()); - - Node node1 = nodes.item(0); - Node node2 = nodes.item(1); - - assertEquals("d2NodeDBCP", xpath.evaluate("@name", node1)); - assertEquals("dbcpx", xpath.evaluate("@parameters", node1)); - assertEquals("org.apache.cayenne.configuration.server.DBCPDataSourceFactory", xpath.evaluate("@factory", node1)); - - NodeList dataSources1 = (NodeList) xpath.evaluate("data-source", node1, XPathConstants.NODESET); - assertNotNull(dataSources1); - assertEquals(0, dataSources1.getLength()); - - assertEquals("d2NodeJNDI", xpath.evaluate("@name", node2)); - assertEquals("jndi/x", xpath.evaluate("@parameters", node2)); - assertEquals(JNDIDataSourceFactory.class.getName(), xpath.evaluate("@factory", node2)); - - NodeList dataSources2 = (NodeList) xpath.evaluate("data-source", node2, XPathConstants.NODESET); - assertNotNull(dataSources2); - assertEquals(0, dataSources2.getLength()); - } - - private void assertPerformUpgrade_3_0_0_1_d1Map1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - } - - private void assertPerformUpgrade_3_0_0_1_d1Map2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - } - - @Test - public void testPerformUpgradeFrom6() throws Exception { - File testFolder = setupTestDirectory("testUpgrade6a"); - String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/6a/"; - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class); - binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class); - - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class); - } - }; - - String[] resources = { "cayenne-PROJECT1.xml", "testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml" }; - List files = new ArrayList(); - - for (String name : resources) { - URL xmlUrl = getClass().getClassLoader().getResource(sourceUrl + name); - File target = new File(testFolder, name); - ResourceUtil.copyResourceToFile(xmlUrl, target); - files.add(target); - } - - Injector injector = DIBootstrap.createInjector(testModule); - ProjectUpgrader_V7 upgrader = new ProjectUpgrader_V7(); - injector.injectMembers(upgrader); - - Resource source = new URLResource(files.get(0).toURI().toURL()); - assertNotNull(source); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - assertNotNull(handler); - - Resource upgraded = handler.performUpgrade(); - assertNotNull(upgraded); - assertNotSame(source, upgraded); - - assertPerformUpgrade6Cayenne(files.get(0)); - assertPerformUpgrade6Map1(files.get(1)); - assertPerformUpgradeMap2(files.get(2)); - } - - private void assertPerformUpgrade6Map1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - - NodeList maps = (NodeList) xpath.evaluate("/data-map/obj-entity/entity-listener", document, - XPathConstants.NODESET); - assertNotNull(maps); - assertEquals(0, maps.getLength()); - } - - private void assertPerformUpgrade6Cayenne(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/domain/@project-version", document)); - } - - private void assertPerformUpgradeMap2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - } - - @Test - public void testObjAttributeDelete() throws Exception { - - File testFolder = setupTestDirectory("testObjAttribute"); - String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/6a/delete_shadow_attributes/"; - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class); - binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class); - binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class); - } - }; - - ArrayList source = new ArrayList(); - source.add("cayenne-TestProject.xml"); - source.add("testProjectMap1.map.xml"); - source.add("testProjectMap2.map.xml"); - - ArrayList file = new ArrayList(); - - for (String name : source) { - URL xmlUrl = getClass().getClassLoader().getResource(sourceUrl + name); - File target = new File(testFolder, name); - ResourceUtil.copyResourceToFile(xmlUrl, target); - file.add(target); - } - - Injector injector = DIBootstrap.createInjector(testModule); - ProjectUpgrader_V7 upgrader = new ProjectUpgrader_V7(); - injector.injectMembers(upgrader); - - Resource resource = new URLResource(file.get(0).toURI().toURL()); - assertNotNull(resource); - UpgradeHandler handler = upgrader.getUpgradeHandler(resource); - assertNotNull(handler); - - Resource upgraded = handler.performUpgrade(); - assertNotNull(upgraded); - assertNotSame(resource, upgraded); - - assertPerformUpgrade6Cayenne(file.get(0)); - assertObjAttributeMap1(file.get(1)); - assertObjAttributeMap2(file.get(2)); - } - - private void assertObjAttributeMap1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - - String xpathValue = "/data-map/obj-entity[@name='GreatArtist']/obj-attribute"; - XPathExpression expr = xpath.compile(xpathValue); - Node node = (Node) expr.evaluate(document, XPathConstants.NODE); - - assertEquals("attribute2", xpath.evaluate("@name", node)); - } - - private void assertObjAttributeMap2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - - String xpath_1 = "/data-map/obj-entity[@name='House']/obj-attribute/@name"; - String xpath_2 = "/data-map/obj-entity[@name='Penthouse']/obj-attribute/@name"; - XPathExpression expr = xpath.compile(xpath_1); - String houseAttr = (String) expr.evaluate(document, XPathConstants.STRING); - expr = xpath.compile(xpath_2); - String penthouseAttr = (String) expr.evaluate(document, XPathConstants.STRING); - - assertEquals("attribute2", houseAttr); - assertEquals("attribute3", penthouseAttr); - } - -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java deleted file mode 100644 index 610d77c..0000000 --- a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v8/ProjectUpgrader_V8Test.java +++ /dev/null @@ -1,197 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.project.upgrade.v8; - -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.configuration.ConfigurationNameMapper; -import org.apache.cayenne.configuration.DataMapLoader; -import org.apache.cayenne.configuration.DefaultConfigurationNameMapper; -import org.apache.cayenne.configuration.XMLDataMapLoader; -import org.apache.cayenne.di.*; -import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory; -import org.apache.cayenne.di.spi.DefaultClassLoaderManager; -import org.apache.cayenne.project.FileProjectSaver; -import org.apache.cayenne.project.ProjectSaver; -import org.apache.cayenne.project.unit.Project2Case; -import org.apache.cayenne.project.upgrade.UpgradeHandler; -import org.apache.cayenne.resource.Resource; -import org.apache.cayenne.resource.URLResource; -import org.apache.cayenne.test.file.FileUtil; -import org.apache.cayenne.test.resource.ResourceUtil; -import org.junit.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathFactory; -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.*; - -public class ProjectUpgrader_V8Test extends Project2Case { - - protected File setupTestDirectory(String subfolder) { - String classPath = getClass().getName().replace('.', '/'); - String location = "target/testrun/" + classPath + "/" + subfolder; - File testDirectory = new File(location); - - // delete old tests - if (testDirectory.exists()) { - if (!FileUtil.delete(location, true)) { - throw new CayenneRuntimeException( - "Error deleting test directory '%s'", - location); - } - } - - if (!testDirectory.mkdirs()) { - throw new CayenneRuntimeException( - "Error creating test directory '%s'", - location); - } - - return testDirectory; - } - - @Test - public void testPerformUpgrade() throws Exception { - - File testFolder = setupTestDirectory("testPerformUpgrade_7"); - String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/7a/"; - - List sources = new ArrayList<>(); - - sources.add("cayenne-PROJECT1.xml"); - sources.add("testProjectMap1_1.map.xml"); - sources.add("testProjectMap1_2.map.xml"); - - // upgrades are done in-place, so copy it first - List targetsBefore = new ArrayList<>(); - for (String source : sources) { - - URL url = getClass().getClassLoader().getResource(sourceUrl + source); - File target = new File(testFolder, source); - assertNotNull(source); - ResourceUtil.copyResourceToFile(url, target); - targetsBefore.add(target); - } - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class); - binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class); - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class); - } - }; - - ProjectUpgrader_V8 upgrader = new ProjectUpgrader_V8(); - Injector injector = DIBootstrap.createInjector(testModule); - injector.injectMembers(upgrader); - - Resource source = new URLResource(targetsBefore.get(0).toURL()); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - - Resource upgraded = handler.performUpgrade(); - assertNotNull(upgraded); - assertNotSame(source, upgrader); - - // check that all the new files are created... - String[] targetsAfterNames = new String[] { - "cayenne-PROJECT1.xml", "testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml" - }; - - File[] targetsAfter = new File[targetsAfterNames.length]; - for (int i = 0; i < targetsAfter.length; i++) { - targetsAfter[i] = new File(testFolder, targetsAfterNames[i]); - assertTrue("File was not created: " + targetsAfter[i].getAbsolutePath(), targetsAfter[i].exists()); - } - - // assert XML structure of the generated files - assertPerformUpgrade_7_cayenne(targetsAfter[0]); - assertPerformUpgrade_map1_1(targetsAfter[1]); - assertPerformUpgrade_map1_2(targetsAfter[2]); - } - - private void assertPerformUpgrade_7_cayenne(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("", xpath.evaluate("/domain/@name", document)); - assertEquals("9", xpath.evaluate("/domain/@project-version", document)); - - NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET); - assertNotNull(maps); - assertEquals(2, maps.getLength()); - - Node map1 = maps.item(0); - Node map2 = maps.item(1); - - assertEquals("testProjectMap1_1", xpath.evaluate("@name", map1)); - assertEquals("testProjectMap1_2", xpath.evaluate("@name", map2)); - - NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET); - assertNotNull(nodes); - assertEquals(1, nodes.getLength()); - } - - private void assertPerformUpgrade_map1_1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - - NodeList queryNodes = (NodeList) xpath.evaluate("/data-map/query", document, XPathConstants.NODESET); - assertNotNull(queryNodes); - - Map queries = new HashMap<>(); - - for (int i = 0; i < queryNodes.getLength(); i++) { - Element query = (Element) queryNodes.item(i); - queries.put(query.getAttribute("name"), query); - } - - assertEquals("", queries.get("EjbqlQueryTest").getAttribute("factory")); - assertEquals("", queries.get("SQLTemplateTest").getAttribute("factory")); - assertEquals("", queries.get("SelectQueryTest").getAttribute("factory")); - assertEquals("", queries.get("ProcedureQueryTest").getAttribute("factory")); - - assertEquals("EJBQLQuery", queries.get("EjbqlQueryTest").getAttribute("type")); - assertEquals("SQLTemplate", queries.get("SQLTemplateTest").getAttribute("type")); - assertEquals("SelectQuery", queries.get("SelectQueryTest").getAttribute("type")); - assertEquals("ProcedureQuery", queries.get("ProcedureQueryTest").getAttribute("type")); - } - - private void assertPerformUpgrade_map1_2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - } -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java b/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java deleted file mode 100644 index 3851a2e..0000000 --- a/cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/v9/ProjectUpgrader_V9Test.java +++ /dev/null @@ -1,249 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ -package org.apache.cayenne.project.upgrade.v9; - -import org.apache.cayenne.CayenneRuntimeException; -import org.apache.cayenne.configuration.ConfigurationNameMapper; -import org.apache.cayenne.configuration.DataMapLoader; -import org.apache.cayenne.configuration.DefaultConfigurationNameMapper; -import org.apache.cayenne.configuration.XMLDataMapLoader; -import org.apache.cayenne.di.*; -import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory; -import org.apache.cayenne.di.spi.DefaultClassLoaderManager; -import org.apache.cayenne.project.FileProjectSaver; -import org.apache.cayenne.project.ProjectSaver; -import org.apache.cayenne.project.unit.Project2Case; -import org.apache.cayenne.project.upgrade.UpgradeHandler; -import org.apache.cayenne.project.upgrade.UpgradeMetaData; -import org.apache.cayenne.project.upgrade.UpgradeType; -import org.apache.cayenne.resource.Resource; -import org.apache.cayenne.resource.URLResource; -import org.apache.cayenne.test.file.FileUtil; -import org.apache.cayenne.test.resource.ResourceUtil; -import org.junit.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.xpath.XPath; -import javax.xml.xpath.XPathConstants; -import javax.xml.xpath.XPathFactory; -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.*; - -public class ProjectUpgrader_V9Test extends Project2Case { - - @Test - public void testMetadata_3_0_0_1() { - - String baseUrl = getClass().getPackage().getName().replace('.', '/'); - URL url = getClass().getClassLoader().getResource(baseUrl + "/3_0_0_1a/cayenne.xml"); - assertNotNull(url); - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - } - }; - - ProjectUpgrader_V9 upgrader = new ProjectUpgrader_V9(); - Injector injector = DIBootstrap.createInjector(testModule); - injector.injectMembers(upgrader); - - Resource source = new URLResource(url); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - - assertNotNull(handler); - assertSame(source, handler.getProjectSource()); - - UpgradeMetaData md = handler.getUpgradeMetaData(); - assertNotNull(md); - - assertSame(UpgradeType.UPGRADE_NEEDED, md.getUpgradeType()); - assertNull(md.getIntermediateUpgradeVersion()); - assertEquals("3.0.0.1", md.getProjectVersion()); - assertEquals("9", md.getSupportedVersion()); - } - - @Test - public void testMetadata_Type6() { - String baseUrl = getClass().getPackage().getName().replace('.', '/'); - URL url = getClass().getClassLoader().getResource(baseUrl + "/6a/cayenne-PROJECT1.xml"); - assertNotNull(url); - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - } - }; - - ProjectUpgrader_V9 upgrader = new ProjectUpgrader_V9(); - Injector injector = DIBootstrap.createInjector(testModule); - injector.injectMembers(upgrader); - - Resource source = new URLResource(url); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - - assertNotNull(handler); - assertSame(source, handler.getProjectSource()); - - UpgradeMetaData md = handler.getUpgradeMetaData(); - assertNotNull(md); - assertSame(UpgradeType.UPGRADE_NEEDED, md.getUpgradeType()); - assertNull(md.getIntermediateUpgradeVersion()); - assertEquals("6", md.getProjectVersion()); - assertEquals("9", md.getSupportedVersion()); - } - - protected File setupTestDirectory(String subfolder) { - String classPath = getClass().getName().replace('.', '/'); - String location = "target/testrun/" + classPath + "/" + subfolder; - File testDirectory = new File(location); - - // delete old tests - if (testDirectory.exists()) { - if (!FileUtil.delete(location, true)) { - throw new CayenneRuntimeException( - "Error deleting test directory '%s'", - location); - } - } - - if (!testDirectory.mkdirs()) { - throw new CayenneRuntimeException( - "Error creating test directory '%s'", - location); - } - - return testDirectory; - } - - @Test - public void testPerformUpgradeFrom8() throws Exception { - - File testFolder = setupTestDirectory("testPerformUpgradeFrom8"); - String sourceUrl = getClass().getPackage().getName().replace('.', '/') + "/"; - - List sources = new ArrayList<>(); - - sources.add("cayenne-PROJECT1.xml"); - sources.add("testProjectMap1_1.map.xml"); - sources.add("testProjectMap1_2.map.xml"); - sources.add("reverseEngineering.xml"); - - // upgrades are done in-place, so copy it first - List targetsBefore = new ArrayList<>(); - for (String source : sources) { - - URL url = getClass().getClassLoader().getResource(sourceUrl + source); - File target = new File(testFolder, source); - assertNotNull(source); - ResourceUtil.copyResourceToFile(url, target); - targetsBefore.add(target); - } - - Module testModule = new Module() { - - public void configure(Binder binder) { - binder.bind(ClassLoaderManager.class).to(DefaultClassLoaderManager.class); - binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class); - binder.bind(ProjectSaver.class).to(FileProjectSaver.class); - binder.bind(ConfigurationNameMapper.class).to(DefaultConfigurationNameMapper.class); - binder.bind(DataMapLoader.class).to(XMLDataMapLoader.class); - } - }; - - ProjectUpgrader_V9 upgrader = new ProjectUpgrader_V9(); - Injector injector = DIBootstrap.createInjector(testModule); - injector.injectMembers(upgrader); - - Resource source = new URLResource(targetsBefore.get(0).toURI().toURL()); - UpgradeHandler handler = upgrader.getUpgradeHandler(source); - - Resource upgraded = handler.performUpgrade(); - assertNotNull(upgraded); - assertNotSame(source, upgrader); - - // check that all the new files are created... - String[] targetsAfterNames = new String[] { - "cayenne-PROJECT1.xml", "testProjectMap1_1.map.xml", "testProjectMap1_2.map.xml" - }; - - File[] targetsAfter = new File[targetsAfterNames.length]; - for (int i = 0; i < targetsAfter.length; i++) { - targetsAfter[i] = new File(testFolder, targetsAfterNames[i]); - assertTrue("File was not created: " + targetsAfter[i].getAbsolutePath(), targetsAfter[i].exists()); - } - - // assert XML structure of the generated files - assertPerformUpgradeFrom8_cayenne(targetsAfter[0]); - assertPerformUpgradeFrom8_map1_1(targetsAfter[1]); - assertPerformUpgradeFrom8_map1_2(targetsAfter[2]); - assertFalse(new File(testFolder, "reverseEngineering.xml").exists()); - } - - private void assertPerformUpgradeFrom8_cayenne(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("", xpath.evaluate("/domain/@name", document)); - assertEquals("9", xpath.evaluate("/domain/@project-version", document)); - - NodeList maps = (NodeList) xpath.evaluate("/domain/map", document, XPathConstants.NODESET); - assertNotNull(maps); - assertEquals(2, maps.getLength()); - - Node map1 = maps.item(0); - Node map2 = maps.item(1); - - assertEquals("testProjectMap1_1", xpath.evaluate("@name", map1)); - assertEquals("testProjectMap1_2", xpath.evaluate("@name", map2)); - - NodeList nodes = (NodeList) xpath.evaluate("/domain/node", document, XPathConstants.NODESET); - assertNotNull(nodes); - assertEquals(1, nodes.getLength()); - } - - private void assertPerformUpgradeFrom8_map1_1(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - - NodeList reverseEngineeringNodes = (NodeList) xpath.evaluate("/data-map/reverse-engineering-config", - document, XPathConstants.NODESET); - assertEquals(0, reverseEngineeringNodes.getLength()); - } - - private void assertPerformUpgradeFrom8_map1_2(File file) throws Exception { - Document document = toDOMTree(file); - - XPath xpath = XPathFactory.newInstance().newXPath(); - assertEquals("9", xpath.evaluate("/data-map/@project-version", document)); - } - -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT1.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT1.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT1.xml index 31fb0d3..5b27d93 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT1.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT1.xml @@ -1,15 +1,15 @@ - - - - - + + + + adapter="org.example.test.Adapter" + factory="org.example.test.DataSourceFactory"> + - http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT2.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT2.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT2.xml index 7fba199..c83d807 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT2.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/cayenne-PROJECT2.xml @@ -1,12 +1,12 @@ - - - - - - - + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_1.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_1.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_1.map.xml index 6b79eb5..abbaaf3 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_1.map.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_1.map.xml @@ -1,7 +1,5 @@ - - - + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_2.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_2.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_2.map.xml index 6b79eb5..abbaaf3 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_2.map.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap1_2.map.xml @@ -1,7 +1,5 @@ - - - + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_1.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_1.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_1.map.xml index 6b79eb5..abbaaf3 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_1.map.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_1.map.xml @@ -1,7 +1,5 @@ - - - + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_2.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_2.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_2.map.xml index 6b79eb5..abbaaf3 100644 --- a/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_2.map.xml +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/testProjectMap2_2.map.xml @@ -1,7 +1,5 @@ - - - + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v10.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v10.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v10.xml new file mode 100644 index 0000000..c3f0681 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v10.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v11.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v11.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v11.xml new file mode 100644 index 0000000..51f7c4c --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v11.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v3.2.1.0.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v3.2.1.0.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v3.2.1.0.xml new file mode 100644 index 0000000..b8c95e1 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v3.2.1.0.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v5.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v5.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v5.xml new file mode 100644 index 0000000..0cb4160 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v5.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v6.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v6.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v6.xml new file mode 100644 index 0000000..11735326 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v6.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v7.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v7.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v7.xml new file mode 100644 index 0000000..7b4a247 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v7.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v8.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v8.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v8.xml new file mode 100644 index 0000000..745ea3f --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v8.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v9.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v9.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v9.xml new file mode 100644 index 0000000..52cf7b4 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/cayenne-project-v9.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v6.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v6.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v6.map.xml new file mode 100644 index 0000000..25167f4 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v6.map.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v7.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v7.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v7.map.xml new file mode 100644 index 0000000..dcc9580 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v7.map.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v8.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v8.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v8.map.xml new file mode 100644 index 0000000..1464a49 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v8.map.xml @@ -0,0 +1,13 @@ + + + + + + + + + + http://git-wip-us.apache.org/repos/asf/cayenne/blob/38553b16/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v9.map.xml ---------------------------------------------------------------------- diff --git a/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v9.map.xml b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v9.map.xml new file mode 100644 index 0000000..1787bf0 --- /dev/null +++ b/cayenne-project/src/test/resources/org/apache/cayenne/project/upgrade/handlers/test-map-v9.map.xml @@ -0,0 +1,12 @@ + + + + + + + + +