X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=gis%2Fruntime%2Forg.argeo.gis.geotools%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgeotools%2Fjcr%2FGeoJcrIndex.java;h=b9281b8229d1c9e19d1df22ebc1ea62e46fd4773;hb=c3be9f8db8a79e159d6a057758dfc7f3580efc2d;hp=a1175abc72a384daec388dc3618623a7eb6c84a7;hpb=3cd76e9fb547b4e839931c96264f0edc3ec315b6;p=lgpl%2Fargeo-commons.git diff --git a/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/GeoJcrIndex.java b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/GeoJcrIndex.java index a1175abc7..b9281b822 100644 --- a/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/GeoJcrIndex.java +++ b/gis/runtime/org.argeo.gis.geotools/src/main/java/org/argeo/geotools/jcr/GeoJcrIndex.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.concurrent.Executor; import javax.jcr.Node; import javax.jcr.Property; @@ -25,7 +26,6 @@ import org.argeo.jcr.JcrUtils; import org.argeo.jcr.gis.GisNames; import org.argeo.jcr.gis.GisTypes; import org.argeo.jts.jcr.JtsJcrUtils; -import org.argeo.security.SystemExecutionService; import org.geotools.data.DataStore; import org.geotools.data.DefaultTransaction; import org.geotools.data.FeatureStore; @@ -35,16 +35,20 @@ import org.geotools.feature.FeatureCollections; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.filter.FilterFactoryImpl; +import org.geotools.referencing.CRS; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import org.opengis.filter.FilterFactory2; import org.opengis.filter.identity.FeatureId; +import org.opengis.referencing.FactoryException; +import org.opengis.referencing.NoSuchAuthorityCodeException; import org.opengis.referencing.crs.CoordinateReferenceSystem; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; +/** Index JCR nodes containing or referencing GIS data. */ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { // PostGIS convention final static String DEFAULT_GEOM_NAME = "the_geom"; @@ -53,7 +57,9 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { private DataStore dataStore; private Session session; - private SystemExecutionService systemExecutionService; + private Executor systemExecutionService; + + private String crs = "EPSG:4326"; /** The key is the workspace */ private Map> geoJcrIndexes = Collections @@ -62,12 +68,16 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { // TODO: use common factory finder? private FilterFactory2 ff = new FilterFactoryImpl(); + /** Expects to execute with system authentication */ public void init() { - systemExecutionService.executeAsSystem(new Runnable() { - public void run() { - initGeoJcrIndex(); - } - }); + if (systemExecutionService != null)// legacy + systemExecutionService.execute(new Runnable() { + public void run() { + initGeoJcrIndex(); + } + }); + else + initGeoJcrIndex(); } protected void initGeoJcrIndex() { @@ -102,7 +112,7 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { final Set toRemove = new HashSet(); // execute with system authentication so that JCR can be read - systemExecutionService.executeAsSystem(new Runnable() { + systemExecutionService.execute(new Runnable() { public void run() { while (events.hasNext()) { Event event = events.nextEvent(); @@ -174,9 +184,15 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { } protected SimpleFeatureType getWorkspaceGeoJcrIndexType(String workspaceName) { + SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); builder.setNamespaceURI(GIS_NAMESPACE); builder.setName(workspaceName + "_geojcr_index"); + try { + builder.setCRS(CRS.decode(crs)); + } catch (Exception e) { + throw new ArgeoException("Cannot set CRS " + crs, e); + } builder.setDefaultGeometry(JcrUtils.normalize(GIS_BBOX)); builder.add(JcrUtils.normalize(GIS_BBOX), Polygon.class); @@ -200,7 +216,7 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { if (node.isNodeType(GIS_LOCATED)) { locatedNode = node; } else if (node.isNodeType(GIS_INDEXED)) { - locatedNode = findLocatedparent(node); + locatedNode = findLocatedParent(node); } else { throw new ArgeoException("Unsupported node " + node); } @@ -230,12 +246,12 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { } } - protected Node findLocatedparent(Node child) { + protected Node findLocatedParent(Node child) { try { if (child.getParent().isNodeType(GIS_LOCATED)) return child.getParent(); else - return findLocatedparent(child.getParent()); + return findLocatedParent(child.getParent()); } catch (Exception e) { // also if child is root node throw new ArgeoException("Cannot find located parent", e); @@ -291,8 +307,7 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { this.session = session; } - public void setSystemExecutionService( - SystemExecutionService systemExecutionService) { + public void setSystemExecutionService(Executor systemExecutionService) { this.systemExecutionService = systemExecutionService; }