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 2017/05/31 14:39:49 UTC

svn commit: r1797046 - in /felix/trunk/osgi-r7/configurator/src: main/java/org/apache/felix/configurator/impl/ main/java/org/apache/felix/configurator/impl/conversion/ main/java/org/apache/felix/configurator/impl/json/ main/java/org/apache/felix/config...

Author: cziegeler
Date: Wed May 31 14:39:49 2017
New Revision: 1797046

URL: http://svn.apache.org/viewvc?rev=1797046&view=rev
Log:
Refactor for better reuse

Added:
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/BinUtil.java
      - copied, changed from r1797045, felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/BinUtil.java
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/TypeConverter.java
      - copied, changed from r1797045, felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/TypeConverter.java
    felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/TypeConverterTest.java
      - copied, changed from r1797045, felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/conversion/TypeConverterTest.java
Removed:
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/
    felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/conversion/
Modified:
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java
    felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/model/State.java
    felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/JSONUtilTest.java

Modified: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java?rev=1797046&r1=1797045&r2=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/Configurator.java Wed May 31 14:39:49 2017
@@ -25,6 +25,7 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -32,7 +33,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
-import org.apache.felix.configurator.impl.conversion.BinUtil;
+import org.apache.felix.configurator.impl.json.BinUtil;
 import org.apache.felix.configurator.impl.json.JSONUtil;
 import org.apache.felix.configurator.impl.logger.SystemLogger;
 import org.apache.felix.configurator.impl.model.BundleState;
@@ -88,7 +89,7 @@ public class Configurator {
         this.activeEnvironments = Util.getActiveEnvironments(bc);
         State s = null;
         try {
-            s = State.createOrReadState(bundleContext);
+            s = State.createOrReadState(bundleContext.getDataFile(State.FILE_NAME));
         } catch ( final ClassNotFoundException | IOException e ) {
             SystemLogger.error("Unable to read persisted state from " + State.FILE_NAME, e);
             s = new State();
@@ -315,7 +316,28 @@ public class Configurator {
             final Set<String> paths = Util.isConfigurerBundle(bundle, this.bundleContext.getBundle().getBundleId());
             if ( paths != null ) {
                 final JSONUtil.Report report = new JSONUtil.Report();
-                final BundleState config = JSONUtil.readConfigurationsFromBundle(bundle, paths, report);
+                final BundleState config = JSONUtil.readConfigurationsFromBundle(new BinUtil.ResourceProvider() {
+
+                    @Override
+                    public String getIdentifier() {
+                        return bundle.toString();
+                    }
+
+                    @Override
+                    public URL getEntry(String path) {
+                        return bundle.getEntry(path);
+                    }
+
+                    @Override
+                    public long getBundleId() {
+                        return bundle.getBundleId();
+                    }
+
+                    @Override
+                    public Enumeration<URL> findEntries(String path, String filePattern) {
+                        return bundle.findEntries(path, filePattern, false);
+                    }
+                }, paths, report);
                 for(final String w : report.warnings) {
                     SystemLogger.warning(w);
                 }
@@ -365,7 +387,7 @@ public class Configurator {
                 if ( configList.hasChanges() ) {
                     process(configList);
                     try {
-                        State.writeState(this.bundleContext, state);
+                        State.writeState(this.bundleContext.getDataFile(State.FILE_NAME), state);
                     } catch ( final IOException ioe) {
                         SystemLogger.error("Unable to persist state to " + State.FILE_NAME, ioe);
                     }

Copied: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/BinUtil.java (from r1797045, felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/BinUtil.java)
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/BinUtil.java?p2=felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/BinUtil.java&p1=felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/BinUtil.java&r1=1797045&r2=1797046&rev=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/BinUtil.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/BinUtil.java Wed May 31 14:39:49 2017
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.configurator.impl.conversion;
+package org.apache.felix.configurator.impl.json;
 
 import java.io.BufferedInputStream;
 import java.io.File;
@@ -25,17 +25,27 @@ import java.io.IOException;
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLEncoder;
+import java.util.Enumeration;
 import java.util.UUID;
 
-import org.osgi.framework.Bundle;
-
 public class BinUtil {
 
     public static volatile File binDirectory;
 
-    public static File extractFile(final Bundle bundle, final String pid, final String path)
+    public interface ResourceProvider {
+
+        long getBundleId();
+
+        URL getEntry(String path);
+
+        String getIdentifier();
+
+        Enumeration<URL> findEntries(String path, String filePattern);
+    }
+
+    public static File extractFile(final ResourceProvider provider, final String pid, final String path)
     throws IOException {
-        final URL url = bundle.getEntry(path);
+        final URL url = provider.getEntry(path);
         if ( url == null ) {
             return null;
         }

Modified: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java?rev=1797046&r1=1797045&r2=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/JSONUtil.java Wed May 31 14:39:49 2017
@@ -49,12 +49,10 @@ import javax.json.JsonStructure;
 import javax.json.JsonValue;
 import javax.json.JsonValue.ValueType;
 
-import org.apache.felix.configurator.impl.conversion.TypeConverter;
 import org.apache.felix.configurator.impl.model.BundleState;
 import org.apache.felix.configurator.impl.model.Config;
 import org.apache.felix.configurator.impl.model.ConfigPolicy;
 import org.apache.felix.configurator.impl.model.ConfigurationFile;
-import org.osgi.framework.Bundle;
 
 public class JSONUtil {
 
@@ -75,19 +73,19 @@ public class JSONUtil {
 
     /**
      * Read all configurations from a bundle
-     * @param bundle The bundle
+     * @param provider The bundle provider
      * @param paths The paths to read from
      * @param report The report for errors and warnings
      * @return The bundle state.
      */
-    public static BundleState readConfigurationsFromBundle(final Bundle bundle,
+    public static BundleState readConfigurationsFromBundle(final BinUtil.ResourceProvider provider,
             final Set<String> paths,
             final Report report) {
         final BundleState config = new BundleState();
 
         final List<ConfigurationFile> allFiles = new ArrayList<>();
         for(final String path : paths) {
-            final List<ConfigurationFile> files = readJSON(bundle, path, report);
+            final List<ConfigurationFile> files = readJSON(provider, path, report);
             allFiles.addAll(files);
         }
         Collections.sort(allFiles);
@@ -100,16 +98,16 @@ public class JSONUtil {
     /**
      * Read all json files from a given path in the bundle
      *
-     * @param bundle The bundle
+     * @param provider The bundle provider
      * @param path The path
      * @param report The report for errors and warnings
      * @return A list of configuration files - sorted by url, might be empty.
      */
-    public static List<ConfigurationFile> readJSON(final Bundle bundle,
+    public static List<ConfigurationFile> readJSON(final BinUtil.ResourceProvider provider,
             final String path,
             final Report report) {
         final List<ConfigurationFile> result = new ArrayList<>();
-        final Enumeration<URL> urls = bundle.findEntries(path, "*.json", false);
+        final Enumeration<URL> urls = provider.findEntries(path, "*.json");
         if ( urls != null ) {
             while ( urls.hasMoreElements() ) {
                 final URL url = urls.nextElement();
@@ -121,9 +119,9 @@ public class JSONUtil {
                 try {
                     final String contents = getResource(name, url);
                     boolean done = false;
-                    final TypeConverter converter = new TypeConverter(bundle);
+                    final TypeConverter converter = new TypeConverter(provider);
                     try {
-                        final ConfigurationFile file = readJSON(converter, name, url, bundle.getBundleId(), contents, report);
+                        final ConfigurationFile file = readJSON(converter, name, url, provider.getBundleId(), contents, report);
                         if ( file != null ) {
                             result.add(file);
                             done = true;

Copied: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/TypeConverter.java (from r1797045, felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/TypeConverter.java)
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/TypeConverter.java?p2=felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/TypeConverter.java&p1=felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/TypeConverter.java&r1=1797045&r2=1797046&rev=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/conversion/TypeConverter.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/json/TypeConverter.java Wed May 31 14:39:49 2017
@@ -16,21 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.configurator.impl.conversion;
+package org.apache.felix.configurator.impl.json;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.osgi.framework.Bundle;
 import org.osgi.util.converter.Converter;
 import org.osgi.util.converter.StandardConverter;
 import org.osgi.util.converter.TypeReference;
 
 public class TypeConverter {
 
-
     public static Converter getConverter() {
         return new StandardConverter();
     }
@@ -39,14 +37,14 @@ public class TypeConverter {
 
     private final List<File> files = new ArrayList<>();
 
-    private final Bundle bundle;
+    private final BinUtil.ResourceProvider provider;
 
     /**
      * Create a new instance
-     * @param bundle The bundle, might be {@code null}.
+     * @param provider The bundle provider, might be {@code null}.
      */
-    public TypeConverter(final Bundle bundle) {
-        this.bundle = bundle;
+    public TypeConverter(final BinUtil.ResourceProvider provider) {
+        this.provider = provider;
     }
 
     /**
@@ -96,7 +94,7 @@ public class TypeConverter {
 
         // binary
         if ( "binary".equals(typeInfo) ) {
-            if ( bundle == null ) {
+            if ( provider == null ) {
                 throw new IOException("Binary files only allowed within a bundle");
             }
             final String path = getConverter().convert(value).defaultValue(null).to(String.class);
@@ -105,22 +103,22 @@ public class TypeConverter {
             }
             final File filePath;
             try {
-                filePath = BinUtil.extractFile(bundle, pid, path);
+                filePath = BinUtil.extractFile(provider, pid, path);
             } catch ( final IOException ioe ) {
                 throw new IOException("Unable to read " + path +
-                        " in bundle " + bundle +
+                        " in bundle " + provider.getIdentifier() +
                         " for pid " + pid +
                         " and write to " + BinUtil.binDirectory + " : " + ioe.getMessage(), ioe);
             }
             if ( filePath == null ) {
-                throw new IOException("Entry " + path + " not found in bundle " + bundle);
+                throw new IOException("Entry " + path + " not found in bundle " + provider.getIdentifier());
             }
             files.add(filePath);
             allFiles.add(filePath);
             return filePath.getAbsolutePath();
 
         } else if ( "binary[]".equals(typeInfo) ) {
-            if ( bundle == null ) {
+            if ( provider == null ) {
                 throw new IOException("Binary files only allowed within a bundle");
             }
             final String[] paths = getConverter().convert(value).defaultValue(null).to(String[].class);
@@ -132,15 +130,15 @@ public class TypeConverter {
             while ( i < paths.length ) {
                 final File filePath;
                 try {
-                    filePath = BinUtil.extractFile(bundle, pid, paths[i]);
+                    filePath = BinUtil.extractFile(provider, pid, paths[i]);
                 } catch ( final IOException ioe ) {
                     throw new IOException("Unable to read " + paths[i] +
-                            " in bundle " + bundle +
+                            " in bundle " + provider.getIdentifier() +
                             " for pid " + pid +
                             " and write to " + BinUtil.binDirectory + " : " + ioe.getMessage(), ioe);
                 }
                 if ( filePath == null ) {
-                    throw new IOException("Entry " + paths[i] + " not found in bundle " + bundle);
+                    throw new IOException("Entry " + paths[i] + " not found in bundle " + provider.getIdentifier());
                 }
                 files.add(filePath);
                 allFiles.add(filePath);

Modified: felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/model/State.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/model/State.java?rev=1797046&r1=1797045&r2=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/model/State.java (original)
+++ felix/trunk/osgi-r7/configurator/src/main/java/org/apache/felix/configurator/impl/model/State.java Wed May 31 14:39:49 2017
@@ -30,8 +30,6 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.osgi.framework.BundleContext;
-
 public class State extends AbstractState implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -83,9 +81,8 @@ public class State extends AbstractState
         initialHashes = (Set<String>) in.readObject();
     }
 
-    public static State createOrReadState(final BundleContext bc)
+    public static State createOrReadState(final File f)
     throws ClassNotFoundException, IOException {
-        final File f = bc.getDataFile(FILE_NAME);
         if ( f == null || !f.exists() ) {
             return new State();
         }
@@ -95,9 +92,8 @@ public class State extends AbstractState
         }
     }
 
-    public static void writeState(final BundleContext bc, final State state)
+    public static void writeState(final File f, final State state)
     throws IOException {
-        final File f = bc.getDataFile(FILE_NAME);
         if ( f == null ) {
             // do nothing, no file system support
             return;

Modified: felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/JSONUtilTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/JSONUtilTest.java?rev=1797046&r1=1797045&r2=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/JSONUtilTest.java (original)
+++ felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/JSONUtilTest.java Wed May 31 14:39:49 2017
@@ -31,7 +31,6 @@ import java.util.List;
 
 import javax.json.JsonObject;
 
-import org.apache.felix.configurator.impl.conversion.TypeConverter;
 import org.apache.felix.configurator.impl.model.ConfigurationFile;
 import org.junit.Test;
 

Copied: felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/TypeConverterTest.java (from r1797045, felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/conversion/TypeConverterTest.java)
URL: http://svn.apache.org/viewvc/felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/TypeConverterTest.java?p2=felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/TypeConverterTest.java&p1=felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/conversion/TypeConverterTest.java&r1=1797045&r2=1797046&rev=1797046&view=diff
==============================================================================
--- felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/conversion/TypeConverterTest.java (original)
+++ felix/trunk/osgi-r7/configurator/src/test/java/org/apache/felix/configurator/impl/json/TypeConverterTest.java Wed May 31 14:39:49 2017
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.felix.configurator.impl.conversion;
+package org.apache.felix.configurator.impl.json;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -29,9 +29,8 @@ import java.util.Collection;
 
 import javax.json.JsonObject;
 
-import org.apache.felix.configurator.impl.conversion.TypeConverter;
 import org.apache.felix.configurator.impl.json.JSONUtil;
-import org.apache.felix.configurator.impl.json.JSONUtilTest;
+import org.apache.felix.configurator.impl.json.TypeConverter;
 import org.junit.Test;
 
 public class TypeConverterTest {