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 2018/09/05 09:06:24 UTC

[1/2] cayenne git commit: CAY-2471 Support multiple XML project versions

Repository: cayenne
Updated Branches:
  refs/heads/master 399fc83ce -> b8b4e00ab


CAY-2471 Support multiple XML project versions


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

Branch: refs/heads/master
Commit: 9c39fa7b53371a24740682234e99945bf232889d
Parents: 399fc83
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Sep 5 12:01:37 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Sep 5 12:01:37 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../configuration/xml/VersionAwareHandler.java  |  7 +-
 .../xml/XMLDataChannelDescriptorLoader.java     |  9 ++-
 .../xml/VersionAwareHandlerTest.java            | 67 ++++++++++++++++++++
 4 files changed, 80 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c39fa7b/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index f3f65af..5821001 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -15,6 +15,7 @@ Changes/New Features:
 
 CAY-2446 Run Disjoint By Id queries outside of synchronized block
 CAY-2447 Crypto support for LocalDateTime
+CAY-2471 Support multiple XML project versions
 
 Bug Fixes:
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c39fa7b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/VersionAwareHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/VersionAwareHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/VersionAwareHandler.java
index 2a0fb5c..310eb86 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/VersionAwareHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/VersionAwareHandler.java
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.configuration.xml;
 
+import java.util.Arrays;
 import java.util.Objects;
 
 import org.apache.cayenne.CayenneRuntimeException;
@@ -44,7 +45,7 @@ public abstract class VersionAwareHandler extends NamespaceAwareNestedTagHandler
     @Override
     protected boolean processElement(String namespaceURI, String localName, Attributes attributes) throws SAXException {
         if(rootTag.equals(localName)) {
-            validateVersion(attributes);
+            validateVersion(attributes, XMLDataChannelDescriptorLoader.SUPPORTED_PROJECT_VERSIONS);
             validateNamespace(namespaceURI);
         } else {
             throw new CayenneRuntimeException("Illegal XML root tag: %s, expected: %s", localName, rootTag);
@@ -52,9 +53,9 @@ public abstract class VersionAwareHandler extends NamespaceAwareNestedTagHandler
         return false;
     }
 
-    protected void validateVersion(Attributes attributes) {
+    protected void validateVersion(Attributes attributes, String[] supportedVersions) {
         String version = attributes.getValue("project-version");
-        if(!XMLDataChannelDescriptorLoader.CURRENT_PROJECT_VERSION.equals(version)) {
+        if(Arrays.binarySearch(supportedVersions, version) < 0) {
             throw new CayenneRuntimeException("Unsupported project version: %s, please upgrade project using Modeler or " +
                     "include cayenne-project-compatibility module v%s",
                     version, LocalizedStringsHandler.getString("cayenne.version"));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c39fa7b/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 1f3f6f1..3b90432 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
@@ -40,6 +40,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URL;
+import java.util.Arrays;
 
 /**
  * @since 3.1
@@ -49,7 +50,13 @@ public class XMLDataChannelDescriptorLoader implements DataChannelDescriptorLoad
 
 	private static final Logger logger = LoggerFactory.getLogger(XMLDataChannelDescriptorLoader.class);
 
-	static final String CURRENT_PROJECT_VERSION = "10";
+	/**
+	 * Versions of project XML files that this loader can read.
+	 */
+	static final String[] SUPPORTED_PROJECT_VERSIONS = {"10"};
+	static {
+		Arrays.sort(SUPPORTED_PROJECT_VERSIONS);
+	}
 
 	/**
 	 * @deprecated the caller should use password resolving strategy instead of

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9c39fa7b/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/VersionAwareHandlerTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/VersionAwareHandlerTest.java b/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/VersionAwareHandlerTest.java
new file mode 100644
index 0000000..5a5b823
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/configuration/xml/VersionAwareHandlerTest.java
@@ -0,0 +1,67 @@
+/*****************************************************************
+ *   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.CayenneRuntimeException;
+import org.junit.Before;
+import org.junit.Test;
+import org.xml.sax.Attributes;
+import org.xml.sax.helpers.AttributesImpl;
+
+/**
+ * @since 4.1
+ */
+public class VersionAwareHandlerTest {
+
+    private static String[] VERSION_SET_1 = {"10", "11", "9"}; // sorted as strings
+    private static String[] VERSION_SET_2 = {"10"};
+
+    VersionAwareHandler handler;
+
+    @Before
+    public void createHandler() {
+        handler = new VersionAwareHandler(new LoaderContext(null, null), "test"){
+        };
+    }
+
+    private Attributes createAttributesWithVersion(String version) {
+        AttributesImpl attributes = new AttributesImpl();
+        attributes.addAttribute("", "project-version", "project-version", "", version);
+        return attributes;
+    }
+
+    @Test
+    public void validateCorrectVersion() {
+        handler.validateVersion(createAttributesWithVersion("9"), VERSION_SET_1);
+        handler.validateVersion(createAttributesWithVersion("10"), VERSION_SET_1);
+        handler.validateVersion(createAttributesWithVersion("11"), VERSION_SET_1);
+        handler.validateVersion(createAttributesWithVersion("10"), VERSION_SET_2);
+    }
+
+    @Test(expected = CayenneRuntimeException.class)
+    public void validateIncorrectVersion1() {
+        handler.validateVersion(createAttributesWithVersion("8"), VERSION_SET_1);
+    }
+
+    @Test(expected = CayenneRuntimeException.class)
+    public void validateIncorrectVersion2() {
+        handler.validateVersion(createAttributesWithVersion("11"), VERSION_SET_2);
+    }
+}
\ No newline at end of file


[2/2] cayenne git commit: Minor code cleanup

Posted by nt...@apache.org.
Minor code cleanup


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

Branch: refs/heads/master
Commit: b8b4e00abab2f177a76978d5d4ac779bb44bd892
Parents: 9c39fa7
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Sep 5 12:02:23 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Sep 5 12:02:23 2018 +0300

----------------------------------------------------------------------
 .../xml/DataSourceChildrenHandler.java              | 16 +++++++---------
 .../configuration/xml/DbKeyGeneratorHandler.java    |  2 +-
 .../configuration/xml/SAXNestedTagHandler.java      |  2 +-
 3 files changed, 9 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/b8b4e00a/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 c4c0304..8f40650 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
@@ -102,7 +102,7 @@ class DataSourceChildrenHandler extends NamespaceAwareNestedTagHandler {
 
         // Replace {} in passwordSource with encoderSalt -- useful for EXECUTABLE & URL options
         if (encoderKey != null) {
-            passwordSource = passwordSource.replaceAll("\\{\\}", encoderKey);
+            passwordSource = passwordSource.replaceAll("\\{}", encoderKey);
         }
 
         String encoderType = dataSourceDescriptor.getPasswordEncoderClass();
@@ -131,14 +131,12 @@ class DataSourceChildrenHandler extends NamespaceAwareNestedTagHandler {
                     }
                     break;
                 case DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE:
-                    if (passwordSource != null) {
-                        try {
-                            Process process = Runtime.getRuntime().exec(passwordSource);
-                            password = XMLDataChannelDescriptorLoader.passwordFromInputStream(process.getInputStream());
-                            process.waitFor();
-                        } catch (IOException | InterruptedException exception) {
-                            logger.warn(exception.getMessage(), exception);
-                        }
+                    try {
+                        Process process = Runtime.getRuntime().exec(passwordSource);
+                        password = XMLDataChannelDescriptorLoader.passwordFromInputStream(process.getInputStream());
+                        process.waitFor();
+                    } catch (IOException | InterruptedException exception) {
+                        logger.warn(exception.getMessage(), exception);
                     }
                     break;
             }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b8b4e00a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DbKeyGeneratorHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DbKeyGeneratorHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DbKeyGeneratorHandler.java
index e76c4c3..54018f3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DbKeyGeneratorHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/DbKeyGeneratorHandler.java
@@ -109,7 +109,7 @@ public class DbKeyGeneratorHandler extends NamespaceAwareNestedTagHandler {
             return;
         }
         try {
-            pkGenerator.setKeyCacheSize(new Integer(size.trim()));
+            pkGenerator.setKeyCacheSize(Integer.valueOf(size.trim()));
         } catch (Exception ex) {
             pkGenerator.setKeyCacheSize(null);
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/b8b4e00a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/SAXNestedTagHandler.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/SAXNestedTagHandler.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/SAXNestedTagHandler.java
index d2d4e04..7d2aa5c 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/SAXNestedTagHandler.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/SAXNestedTagHandler.java
@@ -83,7 +83,7 @@ public class SAXNestedTagHandler extends DefaultHandler {
 
         List<String> expected = tagsExpected != null
                 ? Arrays.asList(tagsExpected)
-                : Collections.<String> emptyList();
+                : Collections.emptyList();
 
         return String.format("tag <%s> is unexpected at [%d,%d]. The following tags are allowed here: %s",
                 tagFound,