You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2020/01/10 12:59:39 UTC

svn commit: r1872593 - in /felix/trunk/configadmin-plugins/interpolation/src: main/java/org/apache/felix/configadmin/plugin/interpolation/ test/java/org/apache/felix/configadmin/plugin/interpolation/

Author: cziegeler
Date: Fri Jan 10 12:59:39 2020
New Revision: 1872593

URL: http://svn.apache.org/viewvc?rev=1872593&view=rev
Log:
FELIX-6166 : Support encoding while reading properties from external file

Modified:
    felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Activator.java
    felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
    felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/ActivatorTest.java
    felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java

Modified: felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Activator.java?rev=1872593&r1=1872592&r2=1872593&view=diff
==============================================================================
--- felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Activator.java (original)
+++ felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Activator.java Fri Jan 10 12:59:39 2020
@@ -16,6 +16,9 @@
  */
 package org.apache.felix.configadmin.plugin.interpolation;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
+
 import org.osgi.annotation.bundle.Header;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
@@ -24,12 +27,13 @@ import org.osgi.service.cm.Configuration
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Dictionary;
-import java.util.Hashtable;
-
 @Header(name=Constants.BUNDLE_ACTIVATOR, value="${@class}")
 public class Activator implements BundleActivator {
     static final String DIR_PROPERTY = "org.apache.felix.configadmin.plugin.interpolation.dir";
+    static final String ENCODING_PROPERTY = "org.apache.felix.configadmin.plugin.interpolation.file.encoding";
+
+    static final String PLUGIN_ID = "org.apache.felix.configadmin.plugin.interpolation";
+
     static final int PLUGIN_RANKING = 500;
 
     static final Logger LOG = LoggerFactory.getLogger(InterpolationConfigurationPlugin.class);
@@ -37,16 +41,23 @@ public class Activator implements Bundle
     @Override
     public void start(BundleContext context) throws Exception {
         String directory = context.getProperty(DIR_PROPERTY);
+        String encoding = context.getProperty(ENCODING_PROPERTY);
 
-        ConfigurationPlugin plugin = new InterpolationConfigurationPlugin(context, directory);
+        ConfigurationPlugin plugin = new InterpolationConfigurationPlugin(context, directory, encoding);
         Dictionary<String, Object> props = new Hashtable<>();
         props.put(ConfigurationPlugin.CM_RANKING, PLUGIN_RANKING);
-        props.put("config.plugin.id", "org.apache.felix.configadmin.plugin.interpolation");
+        props.put("config.plugin.id", PLUGIN_ID);
 
         if (directory != null)
             props.put(DIR_PROPERTY, directory);
         else
             props.put(DIR_PROPERTY, "<not configured>");
+
+        if (encoding != null)
+            props.put(ENCODING_PROPERTY, encoding);
+        else
+            props.put(ENCODING_PROPERTY, "<not configured>");
+
         context.registerService(ConfigurationPlugin.class, plugin, props);
     }
 

Modified: felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java?rev=1872593&r1=1872592&r2=1872593&view=diff
==============================================================================
--- felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java (original)
+++ felix/trunk/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPlugin.java Fri Jan 10 12:59:39 2020
@@ -18,6 +18,7 @@ package org.apache.felix.configadmin.plu
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.util.Dictionary;
 import java.util.Enumeration;
@@ -86,7 +87,9 @@ class InterpolationConfigurationPlugin i
     private final BundleContext context;
     private final File directory;
 
-    InterpolationConfigurationPlugin(BundleContext bc, String dir) {
+    private final Charset encodingCharset;
+
+    InterpolationConfigurationPlugin(BundleContext bc, String dir, String fileEncoding) {
         context = bc;
         if (dir != null) {
             directory = new File(dir);
@@ -94,6 +97,12 @@ class InterpolationConfigurationPlugin i
         } else {
             directory = null;
         }
+        if (fileEncoding == null) {
+            encodingCharset = Charset.defaultCharset();
+        } else {
+            encodingCharset = Charset.forName(fileEncoding);
+        }
+
     }
 
     private Logger getLog() {
@@ -204,7 +213,7 @@ class InterpolationConfigurationPlugin i
 
             return null;
         }
-        return new String(bytes).trim();
+        return new String(bytes, this.encodingCharset).trim();
     }
 
     private Object convertType(String type, String s) {

Modified: felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/ActivatorTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/ActivatorTest.java?rev=1872593&r1=1872592&r2=1872593&view=diff
==============================================================================
--- felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/ActivatorTest.java (original)
+++ felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/ActivatorTest.java Fri Jan 10 12:59:39 2020
@@ -16,6 +16,12 @@
  */
 package org.apache.felix.configadmin.plugin.interpolation;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
@@ -24,12 +30,6 @@ import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ConfigurationPlugin;
 
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.Hashtable;
-
-import static org.junit.Assert.assertEquals;
-
 public class ActivatorTest {
     @SuppressWarnings("unchecked")
     @Test
@@ -38,6 +38,7 @@ public class ActivatorTest {
 
         BundleContext ctx = Mockito.mock(BundleContext.class);
         Mockito.when(ctx.getProperty(Activator.DIR_PROPERTY)).thenReturn("/tmp/somewhere");
+        Mockito.when(ctx.getProperty(Activator.ENCODING_PROPERTY)).thenReturn("UTF-8");
         Mockito.when(ctx.registerService(
             Mockito.eq(ConfigurationPlugin.class),
             Mockito.isA(ConfigurationPlugin.class),
@@ -58,6 +59,7 @@ public class ActivatorTest {
 
         Dictionary<String, Object> expected = new Hashtable<>();
         expected.put(Activator.DIR_PROPERTY, "/tmp/somewhere");
+        expected.put(Activator.ENCODING_PROPERTY, "UTF-8");
         expected.put(ConfigurationPlugin.CM_RANKING, Activator.PLUGIN_RANKING);
         expected.put("config.plugin.id", "org.apache.felix.configadmin.plugin.interpolation");
         assertEquals(expected, regProps);

Modified: felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java?rev=1872593&r1=1872592&r2=1872593&view=diff
==============================================================================
--- felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java (original)
+++ felix/trunk/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolationConfigurationPluginTest.java Fri Jan 10 12:59:39 2020
@@ -43,7 +43,7 @@ public class InterpolationConfigurationP
         String rf = getClass().getResource("/testfile").getFile();
 
         InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null,
-                new File(rf).getParent());
+                new File(rf).getParent(), null);
 
         Dictionary<String, Object> dict = new Hashtable<>();
         dict.put("foo", "bar");
@@ -68,7 +68,7 @@ public class InterpolationConfigurationP
         BundleContext bc = Mockito.mock(BundleContext.class);
         Mockito.when(bc.getProperty("foo.bar")).thenReturn("hello there");
 
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null);
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null, null);
 
         String envUser = System.getenv("USER");
         String userVar;
@@ -97,7 +97,7 @@ public class InterpolationConfigurationP
         String rf = getClass().getResource("/sub/sub2/testfile2").getFile();
 
         InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null,
-                new File(rf).getParentFile().getParent());
+                new File(rf).getParentFile().getParent(), null);
 
         Dictionary<String, Object> dict = new Hashtable<>();
         dict.put("substed", "$[secret:sub2/testfile2]");
@@ -115,7 +115,7 @@ public class InterpolationConfigurationP
     public void testReplacement() throws Exception {
         String rf = getClass().getResource("/testfile.txt").getFile();
         InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null,
-                new File(rf).getParent());
+                new File(rf).getParent(), null);
 
         assertEquals("xxla la layy", plugin.replace("akey", "xx$[secret:testfile.txt]yy", "apid"));
         String doesNotReplace = "xx$[" + rf + "]yy";
@@ -126,14 +126,14 @@ public class InterpolationConfigurationP
     public void testNoReplacement() throws IOException {
         String rf = getClass().getResource("/testfile.txt").getFile();
         InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null,
-                new File(rf).getParent());
+                new File(rf).getParent(), null);
 
         assertEquals("foo", plugin.replace("akey", "foo", "apid"));
     }
 
     @Test
     public void testDefault() throws IOException {
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null, null);
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null, null, null);
 
         Dictionary<String, Object> dict = new Hashtable<>();
         dict.put("defaulted", "$[env:notset;default=foo]");
@@ -145,7 +145,7 @@ public class InterpolationConfigurationP
 
     @Test
     public void testTypeConversion() throws IOException {
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null, null);
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(null, null, null);
 
         Dictionary<String, Object> dict = new Hashtable<>();
         dict.put("defaulted", "$[env:notset;default=123;type=Integer]");
@@ -159,7 +159,7 @@ public class InterpolationConfigurationP
     public void testReplacementInStringArray() throws IOException {
         BundleContext bc = Mockito.mock(BundleContext.class);
         Mockito.when(bc.getProperty("foo.bar")).thenReturn("hello there");
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null);
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null, null);
 
         Dictionary<String, Object> dict = new Hashtable<>();
         dict.put("array", new String[] { "1", "$[prop:foo.bar]", "3" });
@@ -178,7 +178,8 @@ public class InterpolationConfigurationP
         BundleContext bc = Mockito.mock(BundleContext.class);
         Mockito.when(bc.getProperty("foo.bar")).thenReturn("hello there");
         String rf = getClass().getResource("/testfile.txt").getFile();
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, new File(rf).getParent());
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, new File(rf).getParent(),
+                null);
 
         assertEquals("xxhello thereyyhello therezz",
                 plugin.replace("akey", "xx$[prop:foo.bar]yy$[prop:foo.bar]zz", "apid"));
@@ -192,7 +193,7 @@ public class InterpolationConfigurationP
         BundleContext bc = Mockito.mock(BundleContext.class);
         Mockito.when(bc.getProperty("foo.bar")).thenReturn("hello there");
         Mockito.when(bc.getProperty("key")).thenReturn("foo.bar");
-        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null);
+        InterpolationConfigurationPlugin plugin = new InterpolationConfigurationPlugin(bc, null, null);
 
         assertEquals("hello there", plugin.replace("akey", "$[prop:$[prop:key]]", "apid"));
     }