diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java index d3e4b75..f0f2157 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTPublisher.java @@ -39,6 +39,7 @@ import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy import it.geosolutions.geoserver.rest.encoder.GSWorkspaceEncoder; import it.geosolutions.geoserver.rest.encoder.coverage.GSCoverageEncoder; import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; +import it.geosolutions.geoserver.rest.encoder.wmsstore.GSWMSTypeEncoder; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStructuredGridCoverageReaderManager.ConfigureCoveragesOption; import it.geosolutions.geoserver.rest.manager.GeoServerRESTStyleManager; @@ -985,6 +986,48 @@ public class GeoServerRESTPublisher { return publishDBLayer(workspace, storename, fte, layerEncoder); } + public boolean publishWMSLayer(final String workspace, final String storename, final GSWMSTypeEncoder fte, final GSLayerEncoder layerEncoder){ + String ftypeXml = fte.toString(); + + StringBuilder postUrl = new StringBuilder(restURL).append("/rest/workspaces/") + .append(workspace).append("/wmsstores/").append(storename).append("/wmslayers.xml"); + + final String layername = fte.getName(); + if (layername == null || layername.isEmpty()) { + if (LOGGER.isErrorEnabled()) + LOGGER.error("GSFeatureTypeEncoder has no valid name associated, try using GSFeatureTypeEncoder.setName(String)"); + return false; + } + + String configuredResult = HTTPUtils.postXml(postUrl.toString(), ftypeXml, this.gsuser, + this.gspass); + boolean published = configuredResult != null; + boolean configured = false; + + if (!published) { + LOGGER.warn("Error in publishing (" + configuredResult + ") " + workspace + ":" + + storename + "/" + layername); + } else { + LOGGER.info("DB layer successfully added (layer:" + layername + ")"); + + if (layerEncoder == null) { + if (LOGGER.isErrorEnabled()) + LOGGER.error("GSLayerEncoder is null: Unable to find the defaultStyle for this layer"); + return false; + } + + configured = configureLayer(workspace, layername, layerEncoder); + + if (!configured) { + LOGGER.warn("Error in configuring (" + configuredResult + ") " + workspace + ":" + + storename + "/" + layername); + } else { + LOGGER.info("DB layer successfully configured (layer:" + layername + ")"); + } + } + + return published && configured; + } /** * Publish and configure a new layer from an existing DataStore (v. gr. a layer from a DB table). * diff --git a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java index 5aa06ef..8297477 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java +++ b/src/main/java/it/geosolutions/geoserver/rest/GeoServerRESTReader.java @@ -833,6 +833,12 @@ public class GeoServerRESTReader { return RESTFeatureTypeList.build(load(url)); } + public RESTFeatureTypeList getWMSFeatureTypes(String workspace){ + String url; + + return null; + } + /** * Get detailed info about a given Layer. * diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSDatastoreEncoder.java similarity index 97% rename from src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java rename to src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSDatastoreEncoder.java index 1ab06c1..675cf48 100644 --- a/src/main/java/it/geosolutions/geoserver/rest/encoder/datastore/GSWMSDatastoreEncoder.java +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSDatastoreEncoder.java @@ -1,4 +1,4 @@ -package it.geosolutions.geoserver.rest.encoder.datastore; +package it.geosolutions.geoserver.rest.encoder.wmsstore; import it.geosolutions.geoserver.rest.encoder.GSAbstractStoreEncoder; import it.geosolutions.geoserver.rest.GeoServerRESTPublisher; diff --git a/src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSTypeEncoder.java b/src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSTypeEncoder.java new file mode 100644 index 0000000..573f706 --- /dev/null +++ b/src/main/java/it/geosolutions/geoserver/rest/encoder/wmsstore/GSWMSTypeEncoder.java @@ -0,0 +1,133 @@ +/* + * GeoServer-Manager - Simple Manager Library for GeoServer + * + * Copyright (C) 2007,2011 GeoSolutions S.A.S. + * http://www.geo-solutions.it + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package it.geosolutions.geoserver.rest.encoder.wmsstore; + +import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder; +import it.geosolutions.geoserver.rest.encoder.feature.FeatureTypeAttribute; +import it.geosolutions.geoserver.rest.encoder.feature.GSAttributeEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.GSDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.GSFeatureDimensionInfoEncoder; +import it.geosolutions.geoserver.rest.encoder.metadata.virtualtable.GSVirtualTableEncoder; + +import org.jdom.Element; + +/** + * + * Encode a GeoServer resource as FeatureType + * + * @author ETj (etj at geo-solutions.it) + * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it + */ +public class GSWMSTypeEncoder extends GSResourceEncoder { + + public final static String ATTRIBUTES = "attributes"; + + final private Element attributes = new Element(ATTRIBUTES); + + public GSWMSTypeEncoder() { + super("wmsLayer"); + addContent(attributes); + } + + + /** + * @deprecated Use {@link GSResourceEncoder#addMetadataDimension(String, GSDimensionInfoEncoder)} this method will be removed soon + * @param key + * @param dimensionInfo + * + */ + protected void addMetadata(String key, GSFeatureDimensionInfoEncoder dimensionInfo) { + super.addMetadata(key, dimensionInfo); + } + + + /** + * @deprecated Use {@link GSResourceEncoder#setMetadataDimension(String, GSDimensionInfoEncoder)} this method will be removed soon + * @param key + * @param dimensionInfo + * + */ + public void setMetadata(String key, GSFeatureDimensionInfoEncoder dimensionInfo) { + super.setMetadata(key, dimensionInfo); + } + + /** + * Add a VirtualTable (SQL View feature type) + * + * @param virtualtable + */ + protected void addMetadataVirtualTable( + final GSVirtualTableEncoder virtualtable) { + super.addMetadata("JDBC_VIRTUAL_TABLE", virtualtable); + } + + /** + * Set a VirtualTable (SQL View feature type) + * + * @param virtualtable + */ + public void setMetadataVirtualTable(final GSVirtualTableEncoder virtualtable) { + super.setMetadata("JDBC_VIRTUAL_TABLE", virtualtable); + } + + /** + * Deletes the VirtualTable metadata + * + * @return true if deleted, false otherwise + */ + public boolean delMetadataVirtualTable(){ + return super.delMetadata("JDB_VIRTUAL_TABLE"); + } + + /** + * delete a keyword from the list + * + * @param keyword + * @return true if something is removed, false otherwise + */ + public boolean delAttribute(final String keyword) { + final Element el = new Element("string"); + el.setText(keyword); + return (attributes.removeContent(GSAttributeEncoder.getFilterByName(keyword))).size() == 0 ? false + : true; + } + + /** + * @param attribute the attribute to add + */ + protected void addAttribute(GSAttributeEncoder attribute) { + attributes.addContent(attribute.getRoot()); + } + + /** + * @param attribute the attribute to set (overriding an attribute with the same name if present) + */ + public void setAttribute(GSAttributeEncoder attribute) { + delAttribute(attribute.getAttribute(FeatureTypeAttribute.name)); + addAttribute(attribute); + } + +} \ No newline at end of file