X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=gis%2Fruntime%2Forg.argeo.gis.geotools%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fgeotools%2Fjcr%2FGeoJcrIndex.java;h=b9281b8229d1c9e19d1df22ebc1ea62e46fd4773;hb=c3be9f8db8a79e159d6a057758dfc7f3580efc2d;hp=75c1b81ad745b30e2e9ddc85ee3fc38393e50653;hpb=03db65bd74ce09b696a4c5af15a58df988e5368d;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 75c1b81ad..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 @@ -26,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; @@ -36,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"; @@ -56,6 +59,8 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { private Session session; private Executor systemExecutionService; + private String crs = "EPSG:4326"; + /** The key is the workspace */ private Map> geoJcrIndexes = Collections .synchronizedMap(new HashMap>()); @@ -63,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.execute(new Runnable() { - public void run() { - initGeoJcrIndex(); - } - }); + if (systemExecutionService != null)// legacy + systemExecutionService.execute(new Runnable() { + public void run() { + initGeoJcrIndex(); + } + }); + else + initGeoJcrIndex(); } protected void initGeoJcrIndex() { @@ -175,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); @@ -201,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); } @@ -231,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); @@ -292,8 +307,7 @@ public class GeoJcrIndex implements EventListener, GisNames, GisTypes { this.session = session; } - public void setSystemExecutionService( - Executor systemExecutionService) { + public void setSystemExecutionService(Executor systemExecutionService) { this.systemExecutionService = systemExecutionService; }