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 {