]> git.argeo.org Git - lgpl/argeo-commons.git/blob - gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/osgi/GisResourcesActivator.java
Improve GIS
[lgpl/argeo-commons.git] / gis / runtime / org.argeo.gis.geotools / src / main / java / org / argeo / geotools / osgi / GisResourcesActivator.java
1 package org.argeo.geotools.osgi;
2
3 import java.net.URL;
4 import java.util.Enumeration;
5 import java.util.HashMap;
6 import java.util.Map;
7 import java.util.Properties;
8
9 import org.apache.commons.logging.Log;
10 import org.apache.commons.logging.LogFactory;
11 import org.argeo.geotools.GeoToolsConstants;
12 import org.geotools.data.DataStore;
13 import org.geotools.data.FileDataStoreFinder;
14 import org.osgi.framework.Bundle;
15 import org.osgi.framework.BundleActivator;
16 import org.osgi.framework.BundleContext;
17
18 /**
19 * Publishes as OSGi services (typically {@link DataStore}) resources contained
20 * or references within the bundle declaring this activator.
21 */
22 public class GisResourcesActivator implements BundleActivator {
23 private final static Log log = LogFactory
24 .getLog(GisResourcesActivator.class);
25
26 /**
27 * Keep track of the registered datastores in order to dispose them when the
28 * bundle is stopped.
29 */
30 private Map<String, DataStore> registeredDataStores = new HashMap<String, DataStore>();
31
32 @SuppressWarnings("unchecked")
33 public void start(BundleContext context) throws Exception {
34 Bundle bundle = context.getBundle();
35
36 // TODO deal with other data types
37 // shapefiles
38 Enumeration<URL> resources = bundle.findEntries("/", "*.shp", true);
39 while (resources.hasMoreElements()) {
40 URL url = resources.nextElement();
41 DataStore ds = FileDataStoreFinder.getDataStore(url);
42 Properties props = new Properties();
43 String alias = url.getPath();
44 props.setProperty(GeoToolsConstants.ALIAS_KEY, alias);
45 context.registerService(DataStore.class.getName(), ds, props);
46 registeredDataStores.put(alias, ds);
47 if (log.isDebugEnabled())
48 log.debug("Registered data store " + alias + ": " + ds);
49 }
50 }
51
52 public void stop(BundleContext context) throws Exception {
53 for (String alias : registeredDataStores.keySet()) {
54 DataStore ds = registeredDataStores.get(alias);
55 try {
56 ds.dispose();
57 if (log.isDebugEnabled())
58 log.debug("Disposed data store " + alias + ": " + ds);
59 } catch (Exception e) {
60 log.warn("Could not dispose data store " + ds + ": "
61 + e.getMessage());
62 }
63 }
64
65 }
66
67 }