From 2d928874a0499058b1d5a9d642e6e299a82698ac Mon Sep 17 00:00:00 2001 From: ccancellieri Date: Tue, 13 Sep 2011 22:58:46 +0200 Subject: [PATCH] changes implementing fix to the defects #14 and #15 --- .../rest/GeoServerRESTPublisher.java | 2 + .../rest/encoder/GSResourceEncoder.java | 181 ++++++++++++++---- .../encoder/utils/PropertyXMLEncoder.java | 14 +- .../coverage/GSCoverageEncoderTest.java | 2 - .../coverage/GSResourceEncoderTest.java | 26 +++ 5 files changed, 182 insertions(+), 43 deletions(-) create mode 100644 src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSResourceEncoderTest.java diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index 7e15c91..93e1296 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -29,6 +29,7 @@ import it.geosolutions.geoserver.rest.decoder.RESTCoverageStore; import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.GSPostGISDatastoreEncoder; import it.geosolutions.geoserver.rest.encoder.GSWorkspaceEncoder; +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder; import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; @@ -392,6 +393,7 @@ public class GeoServerRESTPublisher { GSCoverageEncoder coverageEncoder = new GSCoverageEncoder(); coverageEncoder.addName(FilenameUtils.getBaseName(geotiff.getName())); coverageEncoder.addSRS(srs); + coverageEncoder.setProjectionPolicy(ProjectionPolicy.REPROJECT_TO_DECLARED); configureCoverage(coverageEncoder, workspace, storeName, coverageName); // config layer props (style, ...) diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java index 79d3b87..f271b15 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/GSResourceEncoder.java @@ -27,6 +27,7 @@ package it.geosolutions.geoserver.rest.encoder; import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder; import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; import it.geosolutions.geoserver.rest.encoder.metadata.GSMetadataEncoder; import it.geosolutions.geoserver.rest.encoder.utils.PropertyXMLEncoder; @@ -35,20 +36,21 @@ import org.jdom.Element; /** * - * Encode a GeoServer resouce. - * The type regards the GDSDimensionInfoEncoder metadata Type which has - * different specialization for Features. + * Encode a GeoServer resouce. The type regards the GDSDimensionInfoEncoder + * metadata Type which has different specialization for Features. * - * @see GSDimensionInfoEncoder - * @see GSFeatureDimensionInfoEncoder + * @see GSDimensionInfoEncoder + * @see GSFeatureDimensionInfoEncoder * * @author ETj (etj at geo-solutions.it) * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it */ -public abstract class GSResourceEncoder extends PropertyXMLEncoder { - +public abstract class GSResourceEncoder + extends PropertyXMLEncoder { + /** - * @param rootName Actually 'feature' or 'coverage' + * @param rootName + * Actually 'feature' or 'coverage' * @see GSFeatureTypeEncoder * @see GSCoverageEncoder */ @@ -56,21 +58,21 @@ public abstract class GSResourceEncoder extend super(rootName); add("enabled", "true"); - // Link members to the parent + // Link members to the parent addContent(metadata.getRoot()); addContent(keywordsListEncoder); } - - final private GSMetadataEncoder metadata=new GSMetadataEncoder(); - + + final private GSMetadataEncoder metadata = new GSMetadataEncoder(); + public void addMetadata(String key, T dimensionInfo) { metadata.add(key, dimensionInfo.getRoot()); } final private Element keywordsListEncoder = new Element("keywords"); - + public void addKeyword(String keyword) { - final Element el=new Element("string"); + final Element el = new Element("string"); el.setText(keyword); keywordsListEncoder.addContent(el); } @@ -82,47 +84,146 @@ public abstract class GSResourceEncoder extend REPROJECT_TO_DECLARED, FORCE_DECLARED, NONE } + private final static String PROJECTIONPOLICY="projectionPolicy"; + /** + * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED + * + * @deprecated use the setProjectionPolicy.
+ * This method will be set as private in the next release + */ + public void addProjectionPolicy(ProjectionPolicy policy) { + add(PROJECTIONPOLICY, policy.toString()); + } + /** * NONE, REPROJECT_TO_DECLARED, FORCE_DECLARED */ - public void addProjectionPolicy(ProjectionPolicy policy) { - add("projectionPolicy", policy.toString()); + public void setProjectionPolicy(ProjectionPolicy policy) { + set(PROJECTIONPOLICY, policy.toString()); + } + + private final static String NAME="name"; + /** + * Add the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a resource + * @deprecated use the setName.
+ * This method will be set as private in the next release + */ + public void addName(final String name) { + add(NAME, name); + } + /** + * Set or modify the 'name' node with a text value from 'name' + * + * @note REQUIRED to configure a resource + */ + public void setName(final String name) { + set(NAME, name); + } + + private final static String TITLE="title"; + /** + * Add the 'title' node with a text value from 'title' + * + * @deprecated use the setTitle.
+ * This method will be set as private in the next release + */ + public void addTitle(final String title) { + add(TITLE, title); } /** - * Add the 'name' node with a text value from 'name' - * @note REQUIRED to configure a resource - * + * Set or modify the 'title' node with a text value from 'title' */ - public void addName(final String name) { - add("name", name); - } - - public void addTitle(final String title) { - add("title", title); - } - - public void addSRS(final String srs) { - add("srs", srs); + public void setTitle(final String title) { + set(TITLE, title); } + private final static String SRS="srs"; + /** + * Add the 'SRS' node with a text value from 'srs' + * + * @deprecated use the setSRS.
+ * This method will be set as private in the next release + */ + public void addSRS(final String srs) { + add(SRS, srs); + } + + /** + * Set or modify the 'SRS' node with a text value from 'srs' + */ + public void setSRS(final String srs) { + set(SRS, srs); + } + + private final static String LATLONBBMINX="latLonBoundingBox/minx"; + private final static String LATLONBBMAXX="latLonBoundingBox/maxx"; + private final static String LATLONBBMINY="latLonBoundingBox/miny"; + private final static String LATLONBBMAXY="latLonBoundingBox/maxy"; + private final static String LATLONBBCRS="latLonBoundingBox/crs"; + + /** + * @deprecated use the setSRS.
+ * This method will be set as private in the next release + * + * @param minx + * @param maxy + * @param maxx + * @param miny + * @param crs + */ public void addLatLonBoundingBox(double minx, double maxy, double maxx, double miny, final String crs) { - add("latLonBoundingBox/minx", String.valueOf(minx)); - add("latLonBoundingBox/maxy", String.valueOf(maxy)); - add("latLonBoundingBox/maxx", String.valueOf(maxx)); - add("latLonBoundingBox/miny", String.valueOf(miny)); - add("latLonBoundingBox/crs", crs); + add(LATLONBBMINX, String.valueOf(minx)); + add(LATLONBBMAXY, String.valueOf(maxy)); + add(LATLONBBMAXX, String.valueOf(maxx)); + add(LATLONBBMINY, String.valueOf(miny)); + add(LATLONBBCRS, crs); } + public void setLatLonBoundingBox(double minx, double maxy, double maxx, + double miny, final String crs) { + set(LATLONBBMINX, String.valueOf(minx)); + set(LATLONBBMAXY, String.valueOf(maxy)); + set(LATLONBBMAXX, String.valueOf(maxx)); + set(LATLONBBMINY, String.valueOf(miny)); + set(LATLONBBCRS, crs); + } + + private final static String NATIVEBBMINX="nativeBoundingBox/minx"; + private final static String NATIVEBBMAXX="nativeBoundingBox/maxx"; + private final static String NATIVEBBMINY="nativeBoundingBox/miny"; + private final static String NATIVEBBMAXY="nativeBoundingBox/maxy"; + private final static String NATIVEBBCRS="nativeBoundingBox/crs"; + + /** + * @deprecated use the setSRS.
+ * This method will be set as private in the next release + * + * @param minx + * @param maxy + * @param maxx + * @param miny + * @param crs + */ public void addNativeBoundingBox(double minx, double maxy, double maxx, double miny, final String crs) { - add("nativeBoundingBox/minx", String.valueOf(minx)); - add("nativeBoundingBox/maxy", String.valueOf(maxy)); - add("nativeBoundingBox/maxx", String.valueOf(maxx)); - add("nativeBoundingBox/miny", String.valueOf(miny)); - add("nativeBoundingBox/crs", crs); + add(NATIVEBBMINX, String.valueOf(minx)); + add(NATIVEBBMAXY, String.valueOf(maxy)); + add(NATIVEBBMAXX, String.valueOf(maxx)); + add(NATIVEBBMINY, String.valueOf(miny)); + add(NATIVEBBCRS, crs); + } + + public void setNativeBoundingBox(double minx, double maxy, double maxx, + double miny, final String crs) { + set(NATIVEBBMINX, String.valueOf(minx)); + set(NATIVEBBMAXY, String.valueOf(maxy)); + set(NATIVEBBMAXX, String.valueOf(maxx)); + set(NATIVEBBMINY, String.valueOf(miny)); + set(NATIVEBBCRS, crs); } - } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/utils/PropertyXMLEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/utils/PropertyXMLEncoder.java index 29ede05..4221618 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/utils/PropertyXMLEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/utils/PropertyXMLEncoder.java @@ -57,11 +57,23 @@ public class PropertyXMLEncoder extends XmlElement { super(rootName); } - protected void add(String key, String value) { + protected void add(final String key, final String value) { if (key != null && value != null) { add(this.getRoot(), key, value); } } + + protected void set(final String key, final String value) { + if (key != null && value != null) { + Element pp = null; + if ((pp = contains(key)) == null) + add(key, value); + else { + remove(pp); + add(key, value); + } + } + } private void add(Element e, String key, String value) { if (!key.contains("/")) { diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java index 826680d..d26e5bb 100644 --- a/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSCoverageEncoderTest.java @@ -79,7 +79,5 @@ public class GSCoverageEncoderTest extends TestCase { Assert.assertNull(el4); if (el4==null) LOGGER.info("REMOVED"); - - } } diff --git a/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSResourceEncoderTest.java b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSResourceEncoderTest.java new file mode 100644 index 0000000..d67945e --- /dev/null +++ b/src/test/java/it/geosolutions/geoserver/rest/encoder/coverage/GSResourceEncoderTest.java @@ -0,0 +1,26 @@ +package it.geosolutions.geoserver.rest.encoder.coverage; + +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; +import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; + +import org.junit.Assert; +import org.junit.Test; + +public class GSResourceEncoderTest { + + /** + * test set or reset of reprojection + */ + @Test + public void testReprojection(){ + GSResourceEncoder re=new GSCoverageEncoder(); + + re.setProjectionPolicy(ProjectionPolicy.FORCE_DECLARED); + Assert.assertNotNull(re.contains("projectionPolicy",ProjectionPolicy.FORCE_DECLARED.toString())); + + re.setProjectionPolicy(ProjectionPolicy.NONE); + Assert.assertNull(re.contains("projectionPolicy",ProjectionPolicy.FORCE_DECLARED.toString())); + Assert.assertNotNull(re.contains("projectionPolicy",ProjectionPolicy.NONE.toString())); + } +}