You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2014/03/02 14:29:07 UTC
[1/2] git commit: CLEREZZA-885: Introducing General Purpose
TcProvider marker
Repository: clerezza
Updated Branches:
refs/heads/master aa0cc3489 -> cf4ea9c4c
CLEREZZA-885: Introducing General Purpose TcProvider marker
Project: http://git-wip-us.apache.org/repos/asf/clerezza/repo
Commit: http://git-wip-us.apache.org/repos/asf/clerezza/commit/659b7806
Tree: http://git-wip-us.apache.org/repos/asf/clerezza/tree/659b7806
Diff: http://git-wip-us.apache.org/repos/asf/clerezza/diff/659b7806
Branch: refs/heads/master
Commit: 659b78065a81813a8bbf6e8a68342651c60890c5
Parents: aa0cc34
Author: retobg <re...@apache.org>
Authored: Sat Mar 1 20:24:14 2014 +0100
Committer: retobg <re...@apache.org>
Committed: Sat Mar 1 20:24:14 2014 +0100
----------------------------------------------------------------------
rdf.core/pom.xml | 21 +++++++-
.../clerezza/rdf/core/access/TcManager.java | 53 +++++++++++++++-----
.../rdf/core/serializedform/Parser.java | 14 +++---
.../rdf/core/serializedform/Serializer.java | 14 +++---
.../clerezza/rdf/core/sparql/QueryParser.java | 6 +--
5 files changed, 79 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/clerezza/blob/659b7806/rdf.core/pom.xml
----------------------------------------------------------------------
diff --git a/rdf.core/pom.xml b/rdf.core/pom.xml
index 87416b4..9e13bcc 100644
--- a/rdf.core/pom.xml
+++ b/rdf.core/pom.xml
@@ -40,9 +40,15 @@
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
</dependency>
- <dependency>
+ <!-- <dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
+ <version>1.9.6</version>
+ </dependency> -->
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.scr.ds-annotations</artifactId>
+ <version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.apache.clerezza</groupId>
@@ -104,6 +110,19 @@
</instructions>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ <version>1.15.0</version>
+ <executions>
+ <execution>
+ <id>generate-scr-scrdescriptor</id>
+ <goals>
+ <goal>scr</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/clerezza/blob/659b7806/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
index 7ff32c9..e8d76d3 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
@@ -48,14 +48,13 @@ import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
import org.apache.clerezza.rdf.core.sparql.query.DescribeQuery;
import org.apache.clerezza.rdf.core.sparql.query.Query;
import org.apache.clerezza.rdf.core.sparql.query.SelectQuery;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.felix.scr.annotations.ReferencePolicy;
-import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
/**
* This class implements
@@ -98,20 +97,16 @@ import org.osgi.service.component.ComponentContext;
* @author reto, mir, hasan
*
*/
-@Component
-@Service(TcManager.class)
-@Reference(name = "weightedTcProvider", policy = ReferencePolicy.DYNAMIC,
- referenceInterface = WeightedTcProvider.class,
- cardinality = ReferenceCardinality.MANDATORY_MULTIPLE)
+//immedia is set to true as this should register the graph services (even if manager service is not required)
+@Component(service = TcManager.class, immediate = true)
public class TcManager extends TcProviderMultiplexer {
+ public final static String GENERAL_PURPOSE_TC = "general.purpose.tc";
private static volatile TcManager instance;
private TcAccessController tcAccessController = new TcAccessController(this);
private Map<UriRef, ServiceRegistration> serviceRegistrations = Collections
.synchronizedMap(new HashMap<UriRef, ServiceRegistration>());
- @Reference(policy = ReferencePolicy.DYNAMIC,
- cardinality = ReferenceCardinality.OPTIONAL_UNARY)
protected QueryEngine queryEngine;
private ComponentContext componentContext;
@@ -471,6 +466,8 @@ public class TcManager extends TcProviderMultiplexer {
*
* @param provider the provider to be registered
*/
+ @Reference(policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.MULTIPLE)
protected void bindWeightedTcProvider(WeightedTcProvider provider) {
addWeightedTcProvider(provider);
}
@@ -484,6 +481,38 @@ public class TcManager extends TcProviderMultiplexer {
WeightedTcProvider provider) {
removeWeightedTcProvider(provider);
}
+
+ /**
+ * Registers a provider
+ *
+ * @param provider the provider to be registered
+ */
+ @Reference(policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.AT_LEAST_ONE,
+ target = "("+TcManager.GENERAL_PURPOSE_TC+"=true)")
+ protected void bindGpWeightedTcProvider(WeightedTcProvider provider) {
+ addWeightedTcProvider(provider);
+ }
+
+ /**
+ * Unregister a provider
+ *
+ * @param provider the provider to be deregistered
+ */
+ protected void unbindGpWeightedTcProvider(
+ WeightedTcProvider provider) {
+ removeWeightedTcProvider(provider);
+ }
+
+ @Reference(policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.OPTIONAL)
+ protected void bindQueryEngine(QueryEngine queryEngine) {
+ this.queryEngine = queryEngine;
+ }
+
+ protected void unbindQueryEngine(QueryEngine queryEngine) {
+ this.queryEngine = null;
+ }
@Override
protected void mGraphAppears(UriRef name) {
http://git-wip-us.apache.org/repos/asf/clerezza/blob/659b7806/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
index 6312219..62096d7 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
@@ -22,7 +22,6 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -34,6 +33,11 @@ import org.apache.clerezza.rdf.core.MGraph;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+
/**
* This singleton class provides a method <code>parse</code> to transform
* serialized RDF forms into {@link Graph}s.
@@ -48,12 +52,8 @@ import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
*
* @author reto
*
- * @scr.component
- * @scr.service interface="org.apache.clerezza.rdf.core.serializedform.Parser"
- * @scr.reference name="parsingProvider"
- * cardinality="0..n" policy="dynamic"
- * interface="org.apache.clerezza.rdf.core.serializedform.ParsingProvider"
*/
+@Component(service = Parser.class)
public class Parser {
/**
@@ -204,6 +204,8 @@ public class Parser {
*
* @param provider the provider to be registered
*/
+ @Reference(policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.MULTIPLE)
public void bindParsingProvider(ParsingProvider provider) {
providerList.add(provider);
refreshProviderMap();
http://git-wip-us.apache.org/repos/asf/clerezza/blob/659b7806/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
index b5b42b3..1a4c8a9 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
@@ -30,6 +30,11 @@ import java.util.ServiceLoader;
import org.apache.clerezza.rdf.core.TripleCollection;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+
/**
* This singleton class provides a method <code>serialize</code> to transform a
* {@link Graph} into serialized RDF forms.
@@ -44,13 +49,8 @@ import org.apache.clerezza.rdf.core.TripleCollection;
*
* @author mir
*
- * @scr.component
- * @scr.service interface="org.apache.clerezza.rdf.core.serializedform.Serializer"
- * @scr.reference
- * name="serializingProvider"
- * cardinality="0..n" policy="dynamic"
- * interface="org.apache.clerezza.rdf.core.serializedform.SerializingProvider"
*/
+@Component(service = Serializer.class)
public class Serializer {
/**
@@ -150,6 +150,8 @@ public class Serializer {
* @param provider
* the provider to be registered
*/
+ @Reference(policy = ReferencePolicy.DYNAMIC,
+ cardinality = ReferenceCardinality.MULTIPLE)
public void bindSerializingProvider(SerializingProvider provider) {
providerList.add(provider);
refreshProviderMap();
http://git-wip-us.apache.org/repos/asf/clerezza/blob/659b7806/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryParser.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryParser.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryParser.java
index 7df232a..8d76c48 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryParser.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryParser.java
@@ -19,9 +19,8 @@
package org.apache.clerezza.rdf.core.sparql;
import java.io.StringReader;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Service;
import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.osgi.service.component.annotations.Component;
/**
* This class implements an OSGi service to provide a method to parse a
@@ -30,8 +29,7 @@ import org.apache.clerezza.rdf.core.sparql.query.Query;
* @author hasan
*/
-@Component
-@Service(QueryParser.class)
+@Component(service = QueryParser.class)
public class QueryParser {
private static volatile QueryParser instance;
[2/2] git commit: CLEREZZA-886: Parser and Serialized indicate thee
supported format with a service property
Posted by re...@apache.org.
CLEREZZA-886: Parser and Serialized indicate thee supported format with a service property
Project: http://git-wip-us.apache.org/repos/asf/clerezza/repo
Commit: http://git-wip-us.apache.org/repos/asf/clerezza/commit/cf4ea9c4
Tree: http://git-wip-us.apache.org/repos/asf/clerezza/tree/cf4ea9c4
Diff: http://git-wip-us.apache.org/repos/asf/clerezza/diff/cf4ea9c4
Branch: refs/heads/master
Commit: cf4ea9c4cfb62e6e4f2f3540fe8f5f32fd9b0d63
Parents: 659b780
Author: retobg <re...@apache.org>
Authored: Sun Mar 2 14:28:24 2014 +0100
Committer: retobg <re...@apache.org>
Committed: Sun Mar 2 14:28:24 2014 +0100
----------------------------------------------------------------------
.../rdf/core/serializedform/Parser.java | 114 +++++++++++++++----
.../rdf/core/serializedform/Serializer.java | 91 ++++++++++++---
.../core/serializedform/SupportedFormat.java | 4 +
3 files changed, 174 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/clerezza/blob/cf4ea9c4/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
index 62096d7..474902b 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Parser.java
@@ -18,44 +18,57 @@
*/
package org.apache.clerezza.rdf.core.serializedform;
+import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
+import java.util.logging.Level;
import org.apache.clerezza.rdf.core.Graph;
import org.apache.clerezza.rdf.core.MGraph;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
- * This singleton class provides a method <code>parse</code> to transform
- * serialized RDF forms into {@link Graph}s.
- *
+ * This singleton class provides a method
+ * <code>parse</code> to transform serialized RDF forms into {@link Graph}s.
+ *
* Functionality is delegated to registered {@link ParsingProvider}s. Such
- * <code>ParsingProvider</code>s can be registered and unregistered, later
- * registered <code>ParsingProvider</code>s shadow previously registered
- * providers for the same format.
+ * <code>ParsingProvider</code>s can be registered and unregistered, later
+ * registered
+ * <code>ParsingProvider</code>s shadow previously registered providers for the
+ * same format.
+ *
+ * Note on synchronization:
+ * <code>ParsingProvider</code>s must be able to handle concurrent requests.
*
- * Note on synchronization: <code>ParsingProvider</code>s must be able to handle
- * concurrent requests.
- *
* @author reto
- *
+ *
*/
@Component(service = Parser.class)
public class Parser {
+ private ConfigurationAdmin configurationAdmin;
/**
* The list of providers in the order of registration
*/
@@ -68,26 +81,29 @@ public class Parser {
* The singleton instance
*/
private volatile static Parser instance;
+ private boolean active;
+ private static final Logger log = LoggerFactory.getLogger(Parser.class);
/**
* the constructor sets the singleton instance to allow instantiation
* by OSGi-DS. This constructor should not be called except by OSGi-DS,
* otherwise the static <code>getInstance</code> method should be used.
*/
public Parser() {
+ log.info("constructing Parser");
Parser.instance = this;
}
/**
* A constructor for tests, which doesn't set the singleton instance
- *
+ *
* @param dummy an ignored argument to distinguish this from the other constructor
*/
Parser(Object dummy) {
}
/**
- * This returns the singleton instance, if an instance has been previously
+ * This returns the singleton instance, if an instance has been previously
* created (e.g. by OSGi declarative services) this instance is returned,
* otherwise a new instance is created and providers are injected using
* the service provider interface (META-INF/services/)
@@ -112,6 +128,36 @@ public class Parser {
}
+ @Activate
+ protected void activate(final ComponentContext componentContext) {
+ active = true;
+ refreshProviderMap();
+ //changing the congiguration before this finshed activating causes a new instance to be created
+ /*(new Thread() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException ex) {
+ return;
+ }
+ refreshProviderMap();
+ }
+
+
+ }).start();*/
+ }
+
+ @Deactivate
+ protected void deactivate(final ComponentContext componentContext) {
+ active = false;
+ }
+
+ @Modified
+ void modified(ComponentContext ctx) {
+ log.debug("modified");
+ }
+
/**
* Parses a serialized Graph from an InputStream. This delegates the
* processing to the provider registered for the specified format, if
@@ -190,9 +236,10 @@ public class Parser {
}
provider.parse(target, serializedGraph, formatIdentifier, baseUri);
}
-
+
/**
* Get a set of supported formats
+ *
* @return a set if stings identifying formats (usually the MIME-type)
*/
public Set<String> getSupportedFormats() {
@@ -204,7 +251,7 @@ public class Parser {
*
* @param provider the provider to be registered
*/
- @Reference(policy = ReferencePolicy.DYNAMIC,
+ @Reference(policy = ReferencePolicy.DYNAMIC,
cardinality = ReferenceCardinality.MULTIPLE)
public void bindParsingProvider(ParsingProvider provider) {
providerList.add(provider);
@@ -223,19 +270,35 @@ public class Parser {
/**
* Update providerMap with the providers in the providerList
- *
+ *
*/
private void refreshProviderMap() {
- final Map<String, ParsingProvider> newProviderMap = new HashMap<String, ParsingProvider>();
- for (ParsingProvider provider : providerList) {
- String[] formatIdentifiers = getFormatIdentifiers(provider);
- for (String formatIdentifier : formatIdentifiers) {
- newProviderMap.put(formatIdentifier, provider);
+ if (active) {
+ try {
+ final Map<String, ParsingProvider> newProviderMap = new HashMap<String, ParsingProvider>();
+ for (ParsingProvider provider : providerList) {
+ String[] formatIdentifiers = getFormatIdentifiers(provider);
+ for (String formatIdentifier : formatIdentifiers) {
+ newProviderMap.put(formatIdentifier, provider);
+ }
+ }
+ providerMap = newProviderMap;
+ Dictionary<String, Object> newConfig = configurationAdmin.getConfiguration(getClass().getName()).getProperties();
+ if (newConfig == null) {
+ newConfig = new Hashtable<String, Object>();
+ }
+ Set<String> supportedFormats = getSupportedFormats();
+ String[] supportedFromatsArray = supportedFormats.toArray(new String[supportedFormats.size()]);
+ newConfig.put(SupportedFormat.supportedFormat, supportedFromatsArray);
+ configurationAdmin.getConfiguration(getClass().getName()).update(newConfig);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
}
}
- providerMap = newProviderMap;
}
+
+
/**
* Extract format identifiers for a parsing provider
*
@@ -248,4 +311,13 @@ public class Parser {
String[] formatIdentifiers = supportedFormatAnnotation.value();
return formatIdentifiers;
}
+
+ @Reference
+ protected void bindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = configurationAdmin;
+ }
+
+ protected void unbindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = null;
+ }
}
http://git-wip-us.apache.org/repos/asf/clerezza/blob/cf4ea9c4/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
index 1a4c8a9..05bf549 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/Serializer.java
@@ -18,22 +18,33 @@
*/
package org.apache.clerezza.rdf.core.serializedform;
+import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
+import java.util.Set;
import org.apache.clerezza.rdf.core.TripleCollection;
+import org.osgi.service.cm.ConfigurationAdmin;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.component.annotations.ReferencePolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* This singleton class provides a method <code>serialize</code> to transform a
@@ -52,6 +63,8 @@ import org.osgi.service.component.annotations.ReferencePolicy;
*/
@Component(service = Serializer.class)
public class Serializer {
+
+ private ConfigurationAdmin configurationAdmin;
/**
* The list of providers in the order of registration
@@ -67,6 +80,10 @@ public class Serializer {
* The singleton instance
*/
private volatile static Serializer instance;
+
+ private static final Logger log = LoggerFactory.getLogger(Serializer.class);
+
+ private boolean active;
/**
* the constructor sets the singleton instance to allow instantiation
@@ -113,6 +130,22 @@ public class Serializer {
return instance;
}
+
+ @Activate
+ protected void activate(final ComponentContext componentContext) {
+ active = true;
+ refreshProviderMap();
+ }
+
+ @Deactivate
+ protected void deactivate(final ComponentContext componentContext) {
+ active = false;
+ }
+
+ @Modified
+ void modified(ComponentContext ctx) {
+ log.debug("modified");
+ }
/**
* Serializes a Graph into an OutputStream. This delegates the
@@ -145,6 +178,15 @@ public class Serializer {
}
/**
+ * Get a set of supported formats
+ *
+ * @return a set if stings identifying formats (usually the MIME-type)
+ */
+ public Set<String> getSupportedFormats() {
+ return Collections.unmodifiableSet(providerMap.keySet());
+ }
+
+ /**
* Registers a Serializing provider
*
* @param provider
@@ -171,23 +213,35 @@ public class Serializer {
}
private void refreshProviderMap() {
- final Map<String, SerializingProvider> newProviderMap = new HashMap<String, SerializingProvider>();
- //we want more generic providers first so they get overridden by more specific ones
- Collections.sort(providerList, new Comparator<SerializingProvider>() {
-
- @Override
- public int compare(SerializingProvider s1, SerializingProvider s2) {
- return getFormatIdentifiers(s2).length - getFormatIdentifiers(s1).length;
+ if (active) {
+ final Map<String, SerializingProvider> newProviderMap = new HashMap<String, SerializingProvider>();
+ //we want more generic providers first so they get overridden by more specific ones
+ Collections.sort(providerList, new Comparator<SerializingProvider>() {
+ @Override
+ public int compare(SerializingProvider s1, SerializingProvider s2) {
+ return getFormatIdentifiers(s2).length - getFormatIdentifiers(s1).length;
+ }
+ });
+ for (SerializingProvider provider : providerList) {
+ String[] formatIdentifiers = getFormatIdentifiers(provider);
+ for (String formatIdentifier : formatIdentifiers) {
+ newProviderMap.put(formatIdentifier, provider);
+ }
}
-
- });
- for (SerializingProvider provider : providerList) {
- String[] formatIdentifiers = getFormatIdentifiers(provider);
- for (String formatIdentifier : formatIdentifiers) {
- newProviderMap.put(formatIdentifier, provider);
+ providerMap = newProviderMap;
+ try {
+ Dictionary<String, Object> newConfig = configurationAdmin.getConfiguration(getClass().getName()).getProperties();
+ if (newConfig == null) {
+ newConfig = new Hashtable<String, Object>();
+ }
+ Set<String> supportedFormats = getSupportedFormats();
+ String[] supportedFromatsArray = supportedFormats.toArray(new String[supportedFormats.size()]);
+ newConfig.put(SupportedFormat.supportedFormat, supportedFromatsArray);
+ configurationAdmin.getConfiguration(getClass().getName()).update(newConfig);
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
}
}
- providerMap = newProviderMap;
}
private String[] getFormatIdentifiers(
@@ -199,4 +253,13 @@ public class Serializer {
String[] formatIdentifiers = supportedFormatAnnotation.value();
return formatIdentifiers;
}
+
+ @Reference
+ protected void bindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = configurationAdmin;
+ }
+
+ protected void unbindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
+ this.configurationAdmin = null;
+ }
}
http://git-wip-us.apache.org/repos/asf/clerezza/blob/cf4ea9c4/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/SupportedFormat.java
----------------------------------------------------------------------
diff --git a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/SupportedFormat.java b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/SupportedFormat.java
index b867c48..dc4a69f 100644
--- a/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/SupportedFormat.java
+++ b/rdf.core/src/main/java/org/apache/clerezza/rdf/core/serializedform/SupportedFormat.java
@@ -33,6 +33,10 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
public @interface SupportedFormat {
+ /**
+ * used as a key for the OSGi service property
+ */
+ public static final String supportedFormat = "supportedFormat";
public static final String RDF_XML = "application/rdf+xml";
public static final String TURTLE = "text/turtle";
public static final String X_TURTLE = "application/x-turtle";