X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=gis%2Fruntime%2Forg.argeo.gis.geotools%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgeotools%2Fosgi%2FGisResourcesActivator.java;fp=gis%2Fruntime%2Forg.argeo.gis.geotools%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgeotools%2Fosgi%2FGisResourcesActivator.java;h=e904df7e8426d4744b6a595fada4a781a90bd6f9;hb=78a52c7ee4e476b3fe366346ed26315f7237a6bb;hp=0000000000000000000000000000000000000000;hpb=2f75ff792fb0a36b57fed447b685363bc64addbb;p=lgpl%2Fargeo-commons.git diff --git a/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/osgi/GisResourcesActivator.java b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/osgi/GisResourcesActivator.java new file mode 100644 index 000000000..e904df7e8 --- /dev/null +++ b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/osgi/GisResourcesActivator.java @@ -0,0 +1,67 @@ +package org.argeo.geotools.osgi; + +import java.net.URL; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.geotools.GeoToolsConstants; +import org.geotools.data.DataStore; +import org.geotools.data.FileDataStoreFinder; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; + +/** + * Publishes as OSGi services (typically {@link DataStore}) resources contained + * or references within the bundle declaring this activator. + */ +public class GisResourcesActivator implements BundleActivator { + private final static Log log = LogFactory + .getLog(GisResourcesActivator.class); + + /** + * Keep track of the registered datastores in order to dispose them when the + * bundle is stopped. + */ + private Map registeredDataStores = new HashMap(); + + @SuppressWarnings("unchecked") + public void start(BundleContext context) throws Exception { + Bundle bundle = context.getBundle(); + + // TODO deal with other data types + // shapefiles + Enumeration resources = bundle.findEntries("/", "*.shp", true); + while (resources.hasMoreElements()) { + URL url = resources.nextElement(); + DataStore ds = FileDataStoreFinder.getDataStore(url); + Properties props = new Properties(); + String alias = url.getPath(); + props.setProperty(GeoToolsConstants.ALIAS_KEY, alias); + context.registerService(DataStore.class.getName(), ds, props); + registeredDataStores.put(alias, ds); + if (log.isDebugEnabled()) + log.debug("Registered data store " + alias + ": " + ds); + } + } + + public void stop(BundleContext context) throws Exception { + for (String alias : registeredDataStores.keySet()) { + DataStore ds = registeredDataStores.get(alias); + try { + ds.dispose(); + if (log.isDebugEnabled()) + log.debug("Disposed data store " + alias + ": " + ds); + } catch (Exception e) { + log.warn("Could not dispose data store " + ds + ": " + + e.getMessage()); + } + } + + } + +}