package com.revolsys.record.io.format.mapguide; import java.util.Map; import com.revolsys.collection.map.LinkedHashMapEx; import com.revolsys.collection.map.MapEx; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.io.PathName; import com.revolsys.record.Record; import com.revolsys.record.RecordFactory; import com.revolsys.record.io.RecordReader; import com.revolsys.record.query.Query; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.spring.resource.Resource; import com.revolsys.webservice.WebServiceFeatureLayer; import com.revolsys.webservice.WebServiceResource; public class FeatureLayer implements WebServiceFeatureLayer { public static FeatureLayer getFeatureLayer(final String serverUrl, final PathName pathName) { final MapGuideWebService webService = new MapGuideWebService(serverUrl); return webService.getWebServiceResource(pathName, FeatureLayer.class); } public static FeatureLayer getFeatureLayer(final String serverUrl, final String path) { final PathName pathName = PathName.newPathName(path); return getFeatureLayer(serverUrl, pathName); } private final MapGuideWebService webService; private final FeatureSource featureSource; private final RecordDefinition recordDefinition; public FeatureLayer(final FeatureSource featureSource, final RecordDefinition recordDefinition) { this.featureSource = featureSource; this.webService = featureSource.getWebService(); this.recordDefinition = recordDefinition; } public FeatureSource getFeatureSource() { return this.featureSource; } @SuppressWarnings("unchecked") @Override public <R extends WebServiceResource> R getParent() { return (R)this.featureSource; } @Override public PathName getPathName() { return this.recordDefinition.getPathName(); } @Override public RecordDefinition getRecordDefinition() { return this.recordDefinition; } public Resource getResource(final Map<String, Object> queryParameters) { final MapGuideWebService webService = getWebService(); return webService.getResource("SELECTFEATURES", "text/xml", queryParameters); } public MapGuideWebService getWebService() { return this.webService; } @Override public <V extends Record> RecordReader newRecordReader(final RecordFactory<V> recordFactory, final BoundingBox boundingBox) { // TODO Auto-generated method stub return null; } @Override public <V extends Record> RecordReader newRecordReader(final RecordFactory<V> recordFactory, final Query query) { final MapEx queryParameters = new LinkedHashMapEx(); final String resourceId = this.featureSource.getResourceId(); queryParameters.put("RESOURCEID", resourceId); final String name = this.recordDefinition.getName(); queryParameters.put("CLASSNAME", name); int offset = 0; int limit = Integer.MAX_VALUE; if (query != null) { offset = query.getOffset(); limit = query.getLimit(); } return new MapGuideServerFeatureIterator(this, queryParameters, offset, limit, recordFactory); } @Override public String toString() { return getName(); } }