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 2017/08/03 07:59:55 UTC

[4/5] cayenne git commit: CAY-2340 Save additional metadata as separate files Support namespace-aware loading in DataChannelHandlers

CAY-2340 Save additional metadata as separate files
   Support namespace-aware loading in DataChannelHandlers


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/13ead3f8
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/13ead3f8
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/13ead3f8

Branch: refs/heads/master
Commit: 13ead3f8180d213dd28b079fb29c11335425aa44
Parents: 3939efe
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Aug 1 18:26:02 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Aug 2 16:23:56 2017 +0300

----------------------------------------------------------------------
 .../src/test/resources/cayenne-lifecycle.xml    |  3 +-
 .../cayenne-relationship-optimisation.xml       |  3 +-
 .../cayenne/project/FileProjectSaver.java       |  9 +++---
 .../xml/DataChannelChildrenHandler.java         |  2 +-
 .../configuration/xml/DataChannelHandler.java   |  5 ++--
 .../xml/DataChannelLoaderListener.java          | 29 ++++++++++++++++++++
 .../xml/DataNodeChildrenHandler.java            |  4 +--
 .../xml/DataSourceChildrenHandler.java          |  2 +-
 .../configuration/xml/LoaderContext.java        | 19 +++++++++++--
 .../xml/XMLDataChannelDescriptorLoader.java     |  2 ++
 .../test/resources/cay743/cayenne-domain.xml    |  2 +-
 .../src/test/resources/cayenne-testmap.xml      |  3 +-
 .../configuration/xml/cayenne-testConfig1.xml   |  2 +-
 .../configuration/xml/cayenne-testConfig2.xml   |  2 +-
 .../configuration/xml/cayenne-testConfig3.xml   |  2 +-
 15 files changed, 69 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-cache-invalidation/src/test/resources/cayenne-lifecycle.xml
----------------------------------------------------------------------
diff --git a/cayenne-cache-invalidation/src/test/resources/cayenne-lifecycle.xml b/cayenne-cache-invalidation/src/test/resources/cayenne-lifecycle.xml
index 98ab346..6bbecc7 100644
--- a/cayenne-cache-invalidation/src/test/resources/cayenne-lifecycle.xml
+++ b/cayenne-cache-invalidation/src/test/resources/cayenne-lifecycle.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain xmlns="http://cayenne.apache.org/schema/10/domain"
+	project-version="10">
 	<map name="lifecycle-map"/>
 
 	<node name="lifecycle-db"

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-dbsync/src/test/resources/org/apache/cayenne/dbsync/reverse/dbimport/cayenne-relationship-optimisation.xml
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/test/resources/org/apache/cayenne/dbsync/reverse/dbimport/cayenne-relationship-optimisation.xml b/cayenne-dbsync/src/test/resources/org/apache/cayenne/dbsync/reverse/dbimport/cayenne-relationship-optimisation.xml
index 166a67d..25f988a 100644
--- a/cayenne-dbsync/src/test/resources/org/apache/cayenne/dbsync/reverse/dbimport/cayenne-relationship-optimisation.xml
+++ b/cayenne-dbsync/src/test/resources/org/apache/cayenne/dbsync/reverse/dbimport/cayenne-relationship-optimisation.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain xmlns="http://cayenne.apache.org/schema/10/domain"
+	project-version="10">
 	<map name="relationship-optimisation"/>
 </domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
index e76022a..0d6af44 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/FileProjectSaver.java
@@ -142,16 +142,13 @@ public class FileProjectSaver implements ProjectSaver {
 		project.getUnusedResources().clear();
 	}
 
-	SaveUnit createSaveUnit(ConfigurationNode node, Resource baseResource, SaverDelegate delegate) {
+	SaveUnit createSaveUnit(ConfigurationNode node, Resource targetResource, SaverDelegate delegate) {
 
 		SaveUnit unit = new SaveUnit();
 		unit.node = node;
 		unit.delegate = delegate;
 		unit.sourceConfiguration = node.acceptVisitor(resourceGetter);
 
-		String targetLocation = nameMapper.configurationLocation(node);
-		Resource targetResource = baseResource.getRelativeResource(targetLocation);
-
 		if (unit.sourceConfiguration == null) {
 			unit.sourceConfiguration = targetResource;
 		}
@@ -267,7 +264,9 @@ public class FileProjectSaver implements ProjectSaver {
 
 			unit.targetTempFile = null;
 			try {
-				unit.node.acceptVisitor(new ConfigurationSourceSetter(new URLResource(targetFile.toURI().toURL())));
+				if(unit.delegate == null) {
+					unit.node.acceptVisitor(new ConfigurationSourceSetter(new URLResource(targetFile.toURI().toURL())));
+				}
 			} catch (MalformedURLException e) {
 				throw new CayenneRuntimeException("Malformed URL for file '%s'", e, targetFile.getAbsolutePath());
 			}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelChildrenHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelChildrenHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelChildrenHandler.java
index 9dc65af..ddca060 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelChildrenHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelChildrenHandler.java
@@ -32,7 +32,7 @@ import org.xml.sax.ContentHandler;
 /**
  * @since 4.1
  */
-final class DataChannelChildrenHandler extends SAXNestedTagHandler {
+final class DataChannelChildrenHandler extends NamespaceAwareNestedTagHandler {
 
     private static Logger logger = LoggerFactory.getLogger(XMLDataChannelDescriptorLoader.class);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelHandler.java
index e5e4c71..476bb9c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelHandler.java
@@ -31,7 +31,7 @@ import org.xml.sax.SAXException;
 /**
  * @since 4.1
  */
-final class DataChannelHandler extends SAXNestedTagHandler {
+final class DataChannelHandler extends NamespaceAwareNestedTagHandler {
 
     private static Logger logger = LoggerFactory.getLogger(XMLDataChannelDescriptorLoader.class);
 
@@ -44,6 +44,7 @@ final class DataChannelHandler extends SAXNestedTagHandler {
         super(loaderContext);
         this.xmlDataChannelDescriptorLoader = xmlDataChannelDescriptorLoader;
         this.descriptor = dataChannelDescriptor;
+        setTargetNamespace(DataChannelDescriptor.SCHEMA_XSD);
     }
 
     @Override
@@ -53,7 +54,7 @@ final class DataChannelHandler extends SAXNestedTagHandler {
                 validateVersion(attributes);
                 return true;
         }
-        return super.processElement(namespaceURI, localName, attributes);
+        return false;
     }
 
     protected void validateVersion(Attributes attributes) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelLoaderListener.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelLoaderListener.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelLoaderListener.java
new file mode 100644
index 0000000..065bc1f
--- /dev/null
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataChannelLoaderListener.java
@@ -0,0 +1,29 @@
+/*****************************************************************
+ *   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.configuration.xml;
+
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+
+/**
+ * @since 4.1
+ */
+public interface DataChannelLoaderListener {
+    void onDataChannelLoaded(DataChannelDescriptor dataChannelDescriptor);
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataNodeChildrenHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataNodeChildrenHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataNodeChildrenHandler.java
index b98bd73..f6e2d1d 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataNodeChildrenHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataNodeChildrenHandler.java
@@ -27,7 +27,7 @@ import org.xml.sax.ContentHandler;
 /**
  * @since 4.1
  */
-final class DataNodeChildrenHandler extends SAXNestedTagHandler {
+final class DataNodeChildrenHandler extends NamespaceAwareNestedTagHandler {
 
     static final String DATA_SOURCE_TAG = "data-source";
     static final String MAP_REF_TAG = "map-ref";
@@ -37,7 +37,7 @@ final class DataNodeChildrenHandler extends SAXNestedTagHandler {
 
     private DataSourceInfo dataSourceDescriptor;
 
-    DataNodeChildrenHandler(XMLDataChannelDescriptorLoader xmlDataChannelDescriptorLoader, SAXNestedTagHandler parentHandler, DataNodeDescriptor nodeDescriptor) {
+    DataNodeChildrenHandler(XMLDataChannelDescriptorLoader xmlDataChannelDescriptorLoader, NamespaceAwareNestedTagHandler parentHandler, DataNodeDescriptor nodeDescriptor) {
         super(parentHandler);
         this.xmlDataChannelDescriptorLoader = xmlDataChannelDescriptorLoader;
         this.nodeDescriptor = nodeDescriptor;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataSourceChildrenHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataSourceChildrenHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataSourceChildrenHandler.java
index b860b1f..066dd31 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataSourceChildrenHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DataSourceChildrenHandler.java
@@ -33,7 +33,7 @@ import org.xml.sax.Attributes;
 /**
  * @since 4.1
  */
-class DataSourceChildrenHandler extends SAXNestedTagHandler {
+class DataSourceChildrenHandler extends NamespaceAwareNestedTagHandler {
 
     private static Logger logger = LoggerFactory.getLogger(XMLDataChannelDescriptorLoader.class);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/LoaderContext.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/LoaderContext.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/LoaderContext.java
index 9507e4f..4e70cf4 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/LoaderContext.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/LoaderContext.java
@@ -22,6 +22,8 @@ package org.apache.cayenne.configuration.xml;
 import java.util.ArrayList;
 import java.util.Collection;
 
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
 import org.apache.cayenne.map.DataMap;
 import org.xml.sax.XMLReader;
 
@@ -32,6 +34,8 @@ public class LoaderContext {
 
     Collection<DataMapLoaderListener> dataMapListeners;
 
+    Collection<DataChannelLoaderListener> dataChannelListeners;
+
     private XMLReader xmlReader;
 
     private HandlerFactory factory;
@@ -40,6 +44,7 @@ public class LoaderContext {
         this.xmlReader = reader;
         this.factory = factory;
         dataMapListeners = new ArrayList<>();
+        dataChannelListeners = new ArrayList<>();
     }
 
     public HandlerFactory getFactory() {
@@ -50,8 +55,8 @@ public class LoaderContext {
         return xmlReader;
     }
 
-    public void addDataMapListener(DataMapLoaderListener dataMapLoaderListener) {
-        dataMapListeners.add(dataMapLoaderListener);
+    public void addDataMapListener(DataMapLoaderListener listener) {
+        dataMapListeners.add(listener);
     }
 
     public void dataMapLoaded(DataMap dataMap) {
@@ -60,4 +65,14 @@ public class LoaderContext {
         }
     }
 
+    public void addDataChannelListener(DataChannelLoaderListener listener) {
+        dataChannelListeners.add(listener);
+    }
+
+    public void dataChannelLoaded(DataChannelDescriptor descriptor) {
+        for(DataChannelLoaderListener listener : dataChannelListeners) {
+            listener.onDataChannelLoaded(descriptor);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
index a1de6c6..0682bb2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
@@ -141,6 +141,8 @@ public class XMLDataChannelDescriptorLoader implements DataChannelDescriptorLoad
 			InputSource input = new InputSource(in);
 			input.setSystemId(configurationURL.toString());
 			parser.parse(input);
+
+            loaderContext.dataChannelLoaded(descriptor);
 		} catch (Exception e) {
 			throw new ConfigurationException("Error loading configuration from %s", e, configurationURL);
 		}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/test/resources/cay743/cayenne-domain.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/cay743/cayenne-domain.xml b/cayenne-server/src/test/resources/cay743/cayenne-domain.xml
index b69e50c..be87528 100644
--- a/cayenne-server/src/test/resources/cay743/cayenne-domain.xml
+++ b/cayenne-server/src/test/resources/cay743/cayenne-domain.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain project-version="10" xmlns="http://cayenne.apache.org/schema/10/domain">
 	<map name="map1"/>
 	<map name="map2"/>
 </domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/test/resources/cayenne-testmap.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/cayenne-testmap.xml b/cayenne-server/src/test/resources/cayenne-testmap.xml
index 9d8918c..3f269c0 100644
--- a/cayenne-server/src/test/resources/cayenne-testmap.xml
+++ b/cayenne-server/src/test/resources/cayenne-testmap.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain xmlns="http://cayenne.apache.org/schema/10/domain"
+	project-version="10">
 	<map name="testmap"/>
 </domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig1.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig1.xml b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig1.xml
index 0171ef2..e081f4c 100644
--- a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig1.xml
+++ b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig1.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain project-version="10" xmlns="http://cayenne.apache.org/schema/10/domain">
 	
 </domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig2.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig2.xml b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig2.xml
index 8d841a5..bf4d451 100644
--- a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig2.xml
+++ b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig2.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain project-version="10" xmlns="http://cayenne.apache.org/schema/10/domain">
 	<map name="testConfigMap2" location="testConfigMap2.map.xml"/>
 </domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/13ead3f8/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig3.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig3.xml b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig3.xml
index 71f687a..9b626ce 100644
--- a/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig3.xml
+++ b/cayenne-server/src/test/resources/org/apache/cayenne/configuration/xml/cayenne-testConfig3.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<domain project-version="10">
+<domain project-version="10" xmlns="http://cayenne.apache.org/schema/10/domain">
 	<map name="testConfigMap3_1" location="testConfigMap3_1.map.xml" />
 	<map name="testConfigMap3_2" location="testConfigMap3_2.map.xml" />