#102 master - specific encoders in GSLayer for GS=2.1
This commit is contained in:
parent
bc233d4f7a
commit
e5033df000
@ -0,0 +1,188 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.authorityurl.AuthorityURLInfo;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.utils.NestedElementEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layer encoder for Geoserver = 2.1
|
||||||
|
*
|
||||||
|
* @author Emmanuel Blondel - emmanuel.blondel1@gmail.com
|
||||||
|
*
|
||||||
|
* The layer encoder is enabled by default
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GSLayerEncoder21 extends GSLayerEncoder {
|
||||||
|
|
||||||
|
|
||||||
|
public final static String METADATA = "metadata";
|
||||||
|
final private GSMetadataEncoder metadata = new GSMetadataEncoder();
|
||||||
|
public Map<String,String> authorityURLList;
|
||||||
|
public Map<String,String> identifierList;
|
||||||
|
|
||||||
|
private class GSMetadataEncoder extends NestedElementEncoder{
|
||||||
|
public GSMetadataEncoder() {
|
||||||
|
super(METADATA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public GSLayerEncoder21() {
|
||||||
|
super();
|
||||||
|
addContent(metadata.getRoot());
|
||||||
|
addAdvertised();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key
|
||||||
|
* @param dimensionInfo
|
||||||
|
*/
|
||||||
|
protected void addMetadata(String key, XmlElement dimensionInfo) {
|
||||||
|
metadata.add(key, dimensionInfo.getRoot());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* advertise the layer
|
||||||
|
*/
|
||||||
|
protected void addAdvertised(){
|
||||||
|
metadata.add("advertised", "true");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param advertised true if the layer should be advertised
|
||||||
|
*/
|
||||||
|
public void setAdvertised(boolean advertised){
|
||||||
|
if(advertised){
|
||||||
|
metadata.add("advertised", "true");
|
||||||
|
}else{
|
||||||
|
metadata.add("advertised", "false");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an authorityURLInfo to the GeoServer layer
|
||||||
|
*
|
||||||
|
* @param authorityURLInfo
|
||||||
|
*/
|
||||||
|
public void addAuthorityURL(GSAuthorityURLInfoEncoder authorityURLInfo){
|
||||||
|
if(authorityURLList == null){
|
||||||
|
authorityURLList = new HashMap<String,String>();
|
||||||
|
}
|
||||||
|
authorityURLList.put(authorityURLInfo.getHref(), authorityURLInfo.getName());
|
||||||
|
String jsonStr = "";
|
||||||
|
for(Entry<String, String> entry : authorityURLList.entrySet()){
|
||||||
|
jsonStr += "{"+
|
||||||
|
"\""+AuthorityURLInfo.name.name()+"\":\""+entry.getValue()+"\","+
|
||||||
|
"\""+AuthorityURLInfo.href.name()+"\":\""+entry.getKey()+"\""+
|
||||||
|
"},";
|
||||||
|
}
|
||||||
|
metadata.set("authorityURLs", "["+jsonStr+"]");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a AuthorityURLInfo from the list using the authorityURL
|
||||||
|
* (AuthorityURLInfo href)
|
||||||
|
*
|
||||||
|
* @param authorityURL
|
||||||
|
* @return true if something is removed, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean delAuthorityURL(final String authorityURL){
|
||||||
|
boolean delete = false;
|
||||||
|
if(!(authorityURLList == null || authorityURLList.isEmpty())){
|
||||||
|
if(authorityURLList.containsKey(authorityURL)){
|
||||||
|
identifierList.remove(authorityURL);
|
||||||
|
String jsonStr = "";
|
||||||
|
for(Entry<String, String> entry : identifierList.entrySet()){
|
||||||
|
jsonStr += "{"+
|
||||||
|
"\""+AuthorityURLInfo.name.name()+"\":\""+entry.getValue()+"\","+
|
||||||
|
"\""+AuthorityURLInfo.href.name()+"\":\""+entry.getKey()+"\""+
|
||||||
|
"},";
|
||||||
|
}
|
||||||
|
metadata.set("identifiers", "["+jsonStr+"]");
|
||||||
|
delete = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return delete;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an identifierInfo to the GeoServer layer
|
||||||
|
*
|
||||||
|
* @param identifierInfo
|
||||||
|
*/
|
||||||
|
public void addIdentifier(GSIdentifierInfoEncoder identifierInfo){
|
||||||
|
if(identifierList == null){
|
||||||
|
identifierList = new HashMap<String,String>();
|
||||||
|
}
|
||||||
|
identifierList.put(identifierInfo.getAuthority(), identifierInfo.getIdentifier());
|
||||||
|
String jsonStr = "";
|
||||||
|
for(Entry<String, String> entry : identifierList.entrySet()){
|
||||||
|
jsonStr += "{"+
|
||||||
|
"\""+IdentifierInfo.authority.name()+"\":\""+entry.getKey()+"\","+
|
||||||
|
"\""+IdentifierInfo.identifier.name()+"\":\""+entry.getValue()+"\""+
|
||||||
|
"},";
|
||||||
|
}
|
||||||
|
metadata.set("identifiers", "["+jsonStr+"]");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a IdentifierInfo from the list using the authority
|
||||||
|
* name (IdentifierInfo authority)
|
||||||
|
*
|
||||||
|
* @param authority
|
||||||
|
* @return true if something is removed, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean delIdentifier(final String authority){
|
||||||
|
boolean delete = false;
|
||||||
|
if(!(identifierList == null || identifierList.isEmpty())){
|
||||||
|
if(identifierList.containsKey(authority)){
|
||||||
|
identifierList.remove(authority);
|
||||||
|
String jsonStr = "";
|
||||||
|
for(Entry<String, String> entry : identifierList.entrySet()){
|
||||||
|
jsonStr += "{"+
|
||||||
|
"\""+IdentifierInfo.authority.name()+"\":\""+entry.getKey()+"\","+
|
||||||
|
"\""+IdentifierInfo.identifier.name()+"\":\""+entry.getValue()+"\""+
|
||||||
|
"},";
|
||||||
|
}
|
||||||
|
metadata.set("identifiers", "["+jsonStr+"]");
|
||||||
|
delete = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return delete;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2007 - 2011 GeoSolutions S.A.S.
|
||||||
|
* http://www.geo-solutions.it
|
||||||
|
*
|
||||||
|
* GPLv3 + Classpath exception
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package it.geosolutions.geoserver.rest.encoder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.authorityurl.AuthorityURLInfo;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.identifier.IdentifierInfo;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
|
||||||
|
import org.jdom.Element;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GSLayerEncoder21Test
|
||||||
|
*
|
||||||
|
* @author Emmanuel Blondel - emmanuel.blondel1@gmail.com |
|
||||||
|
* emmanuel.blondel@fao.org
|
||||||
|
*/
|
||||||
|
public class GSLayerEncoder21Test {
|
||||||
|
|
||||||
|
GSLayerEncoder21 layerEncoder;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setup() {
|
||||||
|
layerEncoder = new GSLayerEncoder21();
|
||||||
|
layerEncoder.setAdvertised(true);
|
||||||
|
layerEncoder.addAuthorityURL(new GSAuthorityURLInfoEncoder(
|
||||||
|
"authority1", "http://www.authority1.org"));
|
||||||
|
layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority1",
|
||||||
|
"identifier1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMetadata(){
|
||||||
|
List<Element> metaElements = layerEncoder.getRoot().getChild("metadata").getChildren();
|
||||||
|
for(Element el : metaElements){
|
||||||
|
String key = el.getAttributeValue("key");
|
||||||
|
|
||||||
|
if(key.matches("advertised")){
|
||||||
|
Assert.assertEquals(true,
|
||||||
|
Boolean.parseBoolean(el.getValue()));
|
||||||
|
|
||||||
|
}else if(key.matches("authorityURLs")){
|
||||||
|
String content = el.getValue();
|
||||||
|
content = content.substring(2);
|
||||||
|
content = content.substring(0, content.length()-2);
|
||||||
|
String[] props = content.split(",");
|
||||||
|
for(String prop : props){
|
||||||
|
String[] kvp = prop.split(":");
|
||||||
|
if(kvp[0].matches(AuthorityURLInfo.name.name())){
|
||||||
|
Assert.assertEquals("authority1", kvp[1]);
|
||||||
|
}else if(kvp[0].matches(AuthorityURLInfo.href.name())){
|
||||||
|
Assert.assertEquals("http://www.authority1.org", kvp[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(key.matches("identifiers")){
|
||||||
|
String content = el.getValue();
|
||||||
|
content = content.substring(2);
|
||||||
|
content = content.substring(0, content.length()-2);
|
||||||
|
String[] props = content.split(",");
|
||||||
|
for(String prop : props){
|
||||||
|
String[] kvp = prop.split(":");
|
||||||
|
if(kvp[0].matches(IdentifierInfo.authority.name())){
|
||||||
|
Assert.assertEquals("authority1", kvp[1]);
|
||||||
|
}else if(kvp[0].matches(IdentifierInfo.identifier.name())){
|
||||||
|
Assert.assertEquals("identifier1", kvp[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -24,6 +24,7 @@ import it.geosolutions.geoserver.rest.GeoserverRESTTest;
|
|||||||
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
|
import it.geosolutions.geoserver.rest.decoder.RESTLayer;
|
||||||
import it.geosolutions.geoserver.rest.decoder.RESTResource;
|
import it.geosolutions.geoserver.rest.decoder.RESTResource;
|
||||||
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
|
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder;
|
||||||
|
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder21;
|
||||||
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder;
|
import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder;
|
||||||
import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder;
|
import it.geosolutions.geoserver.rest.encoder.authorityurl.GSAuthorityURLInfoEncoder;
|
||||||
import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder;
|
import it.geosolutions.geoserver.rest.encoder.identifier.GSIdentifierInfoEncoder;
|
||||||
@ -133,6 +134,64 @@ public class GSFeatureEncoderTest extends GeoserverRESTTest {
|
|||||||
assertTrue(publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder));
|
assertTrue(publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIntegration_21() throws IOException {
|
||||||
|
|
||||||
|
if (!enabled())
|
||||||
|
return;
|
||||||
|
deleteAll();
|
||||||
|
|
||||||
|
GeoServerRESTPublisher publisher = new GeoServerRESTPublisher(RESTURL, RESTUSER, RESTPW);
|
||||||
|
|
||||||
|
String storeName = "resttestshp";
|
||||||
|
String layerName = "cities";
|
||||||
|
|
||||||
|
GSFeatureTypeEncoder fte = new GSFeatureTypeEncoder();
|
||||||
|
fte.setNativeName(layerName);
|
||||||
|
fte.setName(layerName + "_NEW2");
|
||||||
|
fte.setTitle("title");
|
||||||
|
fte.setNativeCRS("EPSG:4326");
|
||||||
|
fte.setDescription("desc");
|
||||||
|
fte.setEnabled(true);
|
||||||
|
|
||||||
|
//metadataLink
|
||||||
|
GSMetadataLinkInfoEncoder metadatalink = new GSMetadataLinkInfoEncoder(
|
||||||
|
"text/xml", "ISO19115:2003",
|
||||||
|
"http://www.organization.org/metadata1");
|
||||||
|
fte.addMetadataLinkInfo(metadatalink);
|
||||||
|
|
||||||
|
//use of GSLayerEncoder specific to GS 2.1
|
||||||
|
GSLayerEncoder21 layerEncoder = new GSLayerEncoder21();
|
||||||
|
layerEncoder.setEnabled(true);
|
||||||
|
layerEncoder.setQueryable(true);
|
||||||
|
layerEncoder.setAdvertised(true);
|
||||||
|
|
||||||
|
layerEncoder.setDefaultStyle("point");
|
||||||
|
layerEncoder.addStyle("point2");
|
||||||
|
layerEncoder.addStyle("point3");
|
||||||
|
|
||||||
|
// authorityURL
|
||||||
|
GSAuthorityURLInfoEncoder authorityURL = new GSAuthorityURLInfoEncoder(
|
||||||
|
"authority1", "http://www.authority1.org");
|
||||||
|
GSAuthorityURLInfoEncoder authorityURL2 = new GSAuthorityURLInfoEncoder(
|
||||||
|
"authority2", "http://www.authority2.org");
|
||||||
|
layerEncoder.addAuthorityURL(authorityURL);
|
||||||
|
layerEncoder.addAuthorityURL(authorityURL2);
|
||||||
|
|
||||||
|
// identifier
|
||||||
|
GSIdentifierInfoEncoder identifier = new GSIdentifierInfoEncoder(
|
||||||
|
"authority1", "identifier1");
|
||||||
|
GSIdentifierInfoEncoder identifier2 = new GSIdentifierInfoEncoder(
|
||||||
|
"authority2", "identifier2");
|
||||||
|
layerEncoder.addIdentifier(identifier);
|
||||||
|
layerEncoder.addIdentifier(identifier2);
|
||||||
|
|
||||||
|
publisher.createWorkspace(DEFAULT_WS);
|
||||||
|
assertTrue(publisher.publishDBLayer(DEFAULT_WS, storeName, fte, layerEncoder));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFeatureTypeEncoder() {
|
public void testFeatureTypeEncoder() {
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user