You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by sd...@apache.org on 2016/07/22 07:00:46 UTC

[18/50] commons-crypto git commit: CRYPTO-110 Provide component version and name

CRYPTO-110 Provide component version and name

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

Branch: refs/heads/CRYPTO-1.0.0
Commit: c4db965e38b7a101b2747d845d757ac5dba17aba
Parents: d58e6f3
Author: Sebb <se...@apache.org>
Authored: Sat Jul 9 13:42:02 2016 +0100
Committer: Sebb <se...@apache.org>
Committed: Sat Jul 9 13:42:02 2016 +0100

----------------------------------------------------------------------
 .../java/org/apache/commons/crypto/Crypto.java  | 51 ++++++++++++++++++++
 .../apache/commons/crypto/component.properties  | 20 ++++++++
 .../org/apache/commons/crypto/CryptoTest.java   | 43 +++++++++++++++++
 3 files changed, 114 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/c4db965e/src/main/java/org/apache/commons/crypto/Crypto.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/crypto/Crypto.java b/src/main/java/org/apache/commons/crypto/Crypto.java
index e7aa101..d913878 100644
--- a/src/main/java/org/apache/commons/crypto/Crypto.java
+++ b/src/main/java/org/apache/commons/crypto/Crypto.java
@@ -17,6 +17,11 @@
  */
 package org.apache.commons.crypto;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
 /**
  * Provides diagnostic information about Commons Crypto and keys for native class loading
  */
@@ -45,6 +50,23 @@ public final class Crypto {
     public static final String LIB_TEMPDIR_KEY = Crypto.CONF_PREFIX
             + "lib.tempdir";
 
+    private static class ComponentPropertiesHolder {
+        static final Properties PROPERTIES = getComponentProperties();
+
+        private static Properties getComponentProperties() {
+            URL url = Crypto.class.getResource("/org/apache/commons/crypto/component.properties");
+            if (url != null) {
+                Properties versionData = new Properties();
+                try (InputStream openStream = url.openStream()) {
+                    versionData.load(openStream);
+                    return versionData;
+                } catch (IOException e) {
+                }
+            }
+            return new Properties(); // make sure field is not null
+        }
+     }
+
     /**
      * Checks whether the native code has been successfully loaded for the platform.
      * 
@@ -62,4 +84,33 @@ public final class Crypto {
     public static Throwable getLoadingError() {
         return NativeCodeLoader.getLoadingError();
     }
+
+    /**
+     * Gets the component version of Apache Commons Crypto.
+     * <p>
+     * This implementation relies on the VERSION properties file which
+     * must be set up with the correct contents by the build process.
+     * This is done automatically by Maven.
+     *
+     * @return the version; may be null if not found
+     */
+    public static String getComponentVersion() {
+        // Note: the component properties file allows the method to work without needing the jar
+        return ComponentPropertiesHolder.PROPERTIES.getProperty("VERSION");
+    }
+
+    /**
+     * Gets the component version of Apache Commons Crypto.
+     * <p>
+     * This implementation relies on the VERSION properties file which
+     * must be set up with the correct contents by the build process.
+     * This is done automatically by Maven.
+     *
+     * @return the version; may be null if not found
+     */
+    public static String getComponentName() {
+        // Note: the component properties file allows the method to work without needing the jar
+        return ComponentPropertiesHolder.PROPERTIES.getProperty("NAME");
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/c4db965e/src/main/resources/org/apache/commons/crypto/component.properties
----------------------------------------------------------------------
diff --git a/src/main/resources/org/apache/commons/crypto/component.properties b/src/main/resources/org/apache/commons/crypto/component.properties
new file mode 100644
index 0000000..3889e45
--- /dev/null
+++ b/src/main/resources/org/apache/commons/crypto/component.properties
@@ -0,0 +1,20 @@
+# 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.
+#
+
+# This file gives access to the component string from Java
+
+VERSION=${project.version}
+NAME=${project.name}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/c4db965e/src/test/java/org/apache/commons/crypto/CryptoTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/commons/crypto/CryptoTest.java b/src/test/java/org/apache/commons/crypto/CryptoTest.java
new file mode 100644
index 0000000..065ea77
--- /dev/null
+++ b/src/test/java/org/apache/commons/crypto/CryptoTest.java
@@ -0,0 +1,43 @@
+/*
+ * 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.commons.crypto;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CryptoTest {
+
+    @Test
+    // This test may fail unless the code was built by Maven, as
+    // it relies on the VERSION file being set up correctly
+    public void testGetComponentVersion() {
+        String version = Crypto.getComponentVersion();
+        Assert.assertNotNull("Should not be null",version);
+        Assert.assertTrue(version,version.matches("^\\d+\\.\\d+.*"));
+    }
+
+    @Test
+    // This test may fail unless the code was built by Maven, as
+    // it relies on the VERSION file being set up correctly
+    public void testGetComponentName() {
+        String version = Crypto.getComponentName();
+        Assert.assertNotNull("Should not be null",version);
+        Assert.assertTrue(version,version.matches("^Apache Commons Crypto.*"));
+    }
+
+}