diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index c68c533..d3e4b75 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -562,8 +562,13 @@ public class GeoServerRESTPublisher { * Vector based data sources. Can be a file in the case of a Shapefile, a database connection in the case of PostGIS, or a server in the case * of a remote Web Feature Service. */ - DATASTORES; + DATASTORES, + /** + * WMS-Service Based Data Source. + * Can be used to publish WMS data from other Servers. + */ + WMSSTORES; /** * @deprecated use {@link StoreType#getTypeNameWithFormat(StoreType, Format)} * @param type @@ -600,7 +605,13 @@ public class GeoServerRESTPublisher { * Vector based data sources. Can be a file in the case of a Shapefile, a database connection in the case of PostGIS, or a server in the case * of a remote Web Feature Service. */ - DATASTORES; + DATASTORES, + + /** + * WMS-Service Based Data Source. + * Can be used to publish WMS data from other Servers. + */ + WMSSTORES; /** * Get the type name of a StoreType with the specified format. @@ -632,12 +643,14 @@ public class GeoServerRESTPublisher { */ public static String getTypeName(StoreType type) { switch (type) { - case COVERAGESTORES: - return "coverages"; // Format - case DATASTORES: - return "featureTypes"; - default: - return "coverages"; + case COVERAGESTORES: + return "coverages"; // Format + case DATASTORES: + return "featureTypes"; + case WMSSTORES: + return "wmsStore"; + default: + return "coverages"; } } @@ -649,12 +662,14 @@ public class GeoServerRESTPublisher { */ public static String getType(StoreType type) { switch (type) { - case COVERAGESTORES: - return "coverageStore"; // Format - case DATASTORES: - return "dataStore"; - default: - return "coverageStore"; + case COVERAGESTORES: + return "coverageStore"; // Format + case DATASTORES: + return "dataStore"; + case WMSSTORES: + return "wmsStore"; + default: + return "coverageStore"; } } diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java new file mode 100644 index 0000000..1ab06c1 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java @@ -0,0 +1,95 @@ +package it.geosolutions.geoserver.rest.encoder.datastore; + +import it.geosolutions.geoserver.rest.encoder.GSAbstractStoreEncoder; +import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; +import it.geosolutions.geoserver.rest.encoder.utils.NestedElementEncoder; + +import java.net.URL; + +/** + * Created by r3sist3nt on 21.12.2016. + */ +public class GSWMSDatastoreEncoder extends GSAbstractStoreEncoder { + static final String TYPE = "wmsStore"; + + static final int DEFAULT_MAX_CONNECTIONS = 10; + static final int DEFAULT_READ_TIMEOUT = 16; + static final int DEFAULT_CONNECTION_TIMEOUT = 16; + static final boolean DEFAULT_USE_CONNECTION_POOLING = true; + + /** + * Encoder for the WMS-Datastore + * @author r3sist3nt + * + * Can be used to create a WMS Datastore on the Server. + */ + public GSWMSDatastoreEncoder(String workspace,String name) { + // Set fixed values + super(GeoServerRESTPublisher.StoreType.WMSSTORES,"wmsStores"); + setType(TYPE); + setRoot("wmsStore"); + set("name" , name); + set("type","WMS"); + + + //Set Metadata + NestedElementEncoder e = new NestedElementEncoder("metadata"); + e.add("useConnectionPooling", Boolean.toString(DEFAULT_USE_CONNECTION_POOLING)); + addContent(e.getRoot()); + + //Set Default Values + setMaxConnections(DEFAULT_MAX_CONNECTIONS); + setReadTimeout(DEFAULT_READ_TIMEOUT); + setConnectTimeout(DEFAULT_CONNECTION_TIMEOUT); + + + } + + + /** + * Set the URL for the the remote Capabilities Document. + * @param capabilitiesURL Service Endpoint. + */ + public void setCapabilitiesURL(String capabilitiesURL){ + set("capabilitiesURL", capabilitiesURL); + } + + public void setReadTimeout(int readTimeout){ + set("readTimeout", ""+readTimeout); + } + + public void setConnectTimeout(int connectTimeout){ + set("connectTimeout",""+connectTimeout); + } + + public void setEnabled(boolean e){ + set("enabled",Boolean.toString(e)); + } + + public void setMaxConnections(int maxConnections){ + set("maxConnections", ""+maxConnections); + + } + + + + /** + * Check url validity. + * + * @param url the url + * @throws IllegalArgumentException if url is null or empty + */ + private static void ensureValidURL(URL url) { + if (url == null || url.toString().equals("")) { + throw new IllegalArgumentException( + "Shapefile store URL cannot be null or empty"); + } + } + + /** + * @return {@value #TYPE} + */ + protected String getValidType() { + return TYPE; + } +}