package com.revolsys.webservice; import java.util.Collections; import java.util.List; import com.revolsys.geometry.model.BoundingBox; import com.revolsys.io.PathName; import com.revolsys.record.ArrayRecord; 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.record.schema.RecordDefinitionProxy; import com.revolsys.spring.resource.UrlResource; public interface WebServiceFeatureLayer extends RecordDefinitionProxy, WebServiceResource { default BoundingBox getBoundingBox() { return BoundingBox.empty(); } @Override default String getIconName() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return "table"; } else { return recordDefinition.getIconName(); } } default int getMaxRecordCount() { return Integer.MAX_VALUE; } @Override default String getName() { final PathName pathName = getPathName(); return pathName.getName(); } @Override default PathName getPathName() { return WebServiceResource.super.getPathName(); } default int getRecordCount(final BoundingBox boundingBox) { return 0; } default int getRecordCount(final Query query) { return 0; } @SuppressWarnings({ "unchecked", "rawtypes" }) default <V extends Record> List<V> getRecords(final RecordFactory<V> recordFactory, final BoundingBox boundingBox) { try ( RecordReader reader = newRecordReader(recordFactory, boundingBox)) { if (reader == null) { return Collections.emptyList(); } else { return (List)reader.toList(); } } } @SuppressWarnings({ "unchecked", "rawtypes" }) default <V extends Record> List<V> getRecords(final RecordFactory<V> recordFactory, final Query query) { try ( RecordReader reader = newRecordReader(recordFactory, query)) { if (reader == null) { return Collections.emptyList(); } else { return (List)reader.toList(); } } } @Override default UrlResource getServiceUrl() { return null; } default RecordReader newRecordReader(final BoundingBox boundingBox) { return newRecordReader(ArrayRecord.FACTORY, boundingBox); } default RecordReader newRecordReader(final Query query) { return newRecordReader(ArrayRecord.FACTORY, query); } <V extends Record> RecordReader newRecordReader(final RecordFactory<V> recordFactory, final BoundingBox boundingBox); <V extends Record> RecordReader newRecordReader(final RecordFactory<V> recordFactory, final Query query); }