VirtualTable support - fix encoders

This commit is contained in:
eblondel 2013-04-15 11:50:56 +02:00
parent 6b27c57bfc
commit 3dc49b952f
4 changed files with 205 additions and 75 deletions

View File

@ -45,9 +45,9 @@ import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
* @code * @code
* // Set-up the vtGeom * // Set-up the vtGeom
* final VTGeometryEncoder vtGeom = new VTGeometryEncoder(); * final VTGeometryEncoder vtGeom = new VTGeometryEncoder();
* vtGeom.setVirtualTableGeometryMember(VTGeometry.name, "the_geom"); * vtGeom.setName("the_geom");
* vtGeom.setVirtualTableGeometryMember(VTGeometry.type, "MultiPolygon"); * vtGeom.setType("MultiPolygon");
* vtGeom.setVirtualTableGeometryMember(VTGeometry.srid, "4326"); * vtGeom.setSrid("4326");
* *
* // Set-up 2 virtual table parameters * // Set-up 2 virtual table parameters
* final VTParameterEncoder vtParam1 = new VTParameterEncoder("high", * final VTParameterEncoder vtParam1 = new VTParameterEncoder("high",
@ -116,11 +116,11 @@ public class GSVirtualTableEncoder extends XmlElement {
/** /**
* Constructs directly a GSVirtualTableEncoder * Constructs directly a GSVirtualTableEncoder
* *
* @param name * @param name (required)
* @param sql * @param sql (required)
* @param keyColumns * @param keyColumns (optional)
* @param geomEncList * @param geomEncList (optional for geometryless sql view)
* @param paramEncList * @param paramEncList (optional)
*/ */
public GSVirtualTableEncoder(String name, String sql, List<String> keyColumns, public GSVirtualTableEncoder(String name, String sql, List<String> keyColumns,
List<VTGeometryEncoder> geomEncList, List<VTGeometryEncoder> geomEncList,

View File

@ -27,23 +27,20 @@ package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
import java.util.Map;
import java.util.Map.Entry;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; import org.jdom.filter.Filter;
/** /**
* GSVirtualTableGeomEncoder - Encodes a metadata VirtualTable geometry for a * VTGeometryEncoder - Encodes a metadata VirtualTable geometry for a
* GeoServer featureType, as follows: * GeoServer featureType, as follows:
* *
* <pre> * <pre>
* { * {
* @code * @code
* final GSVirtualTableGeomEncoder vtGeom = new GSVirtualTableGeomEncoder(); * final VTGeometryEncoder vtGeom = new VTGeometryEncoder();
* vtGeom.setVirtualTableGeometryMember(VTGeometry.name, "the_geom"); * vtGeom.setName("the_geom");
* vtGeom.setVirtualTableGeometryMember(VTGeometry.type, "MultiPolygon"); * vtGeom.setType("MultiPolygon");
* vtGeom.setVirtualTableGeometryMember(VTGeometry.srid, "4326"); * vtGeom.setSrid("4326");
* } * }
* </pre> * </pre>
* *
@ -69,7 +66,7 @@ public class VTGeometryEncoder extends XmlElement {
* A class to filter the VirtualTable geometries by name * A class to filter the VirtualTable geometries by name
* *
*/ */
public static class filterByName implements Filter { private static class filterByName implements Filter {
final private String key; final private String key;
@ -110,9 +107,9 @@ public class VTGeometryEncoder extends XmlElement {
/** /**
* Constructs quickly a VTGeometryEncoder * Constructs quickly a VTGeometryEncoder
* *
* @param name * @param name (required)
* @param geometryType * @param geometryType (required)
* @param srid * @param srid (required)
*/ */
public VTGeometryEncoder(String name, String geometryType, String srid) { public VTGeometryEncoder(String name, String geometryType, String srid) {
super("geometry"); super("geometry");
@ -127,21 +124,9 @@ public class VTGeometryEncoder extends XmlElement {
* @param srid * @param srid
*/ */
protected void setup(String name, String geometryType, String srid) { protected void setup(String name, String geometryType, String srid) {
set(VTGeometry.name.name(), name); setName(name);
set(VTGeometry.type.name(), geometryType); setType(geometryType);
set(VTGeometry.srid.name(), srid); setSrid(srid);
}
/**
* Set-up a GSVirtualTableGeomEncoder
*
* @param vtGeometryMembers
*/
public void setup(Map<VTGeometry, String> vtGeometryMembers) {
for (Entry<VTGeometry, String> vtGeomMember : vtGeometryMembers
.entrySet()) {
set(vtGeomMember.getKey().toString(), vtGeomMember.getValue());
}
} }
/** /**
@ -150,32 +135,113 @@ public class VTGeometryEncoder extends XmlElement {
* @param type * @param type
* @param value * @param value
*/ */
public void setVirtualTableGeometryMember(VTGeometry type, protected void setMember(VTGeometry type,
String value) { String value) {
set(type.toString(), value); set(type.toString(), value);
} }
/**
* Set a geometry name
*
* @param name
*/
public void setName(String name){
this.setMember(VTGeometry.name, name);
}
/**
* Set a geometry type
*
* @param type
*/
public void setType(String type){
this.setMember(VTGeometry.type, type);
}
/**
* Set a geometry srid
*
* @param srid
*/
public void setSrid(String srid){
this.setMember(VTGeometry.srid, srid);
}
/** /**
* Deletes a VirtualTableGeometry member * Deletes a VirtualTableGeometry member
* *
* @param type * @param type
* @return * @return true if removed, false otherwise
*/ */
public boolean delVirtualTableGeometryMember(VTGeometry type) { protected boolean delMember(VTGeometry type) {
return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString())); return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString()));
} }
/**
* Deletes the name
*
* @return true if removed, false otherwise
*/
public boolean delName(){
return this.delMember(VTGeometry.name);
}
/**
* Deletes the type
*
* @return true if removed, false otherwise
*/
public boolean delType(){
return this.delMember(VTGeometry.type);
}
/**
* Deletes the srid
*
* @return true if removed, false otherwise
*/
public boolean delSrid(){
return this.delMember(VTGeometry.srid);
}
/** /**
* Get the VirtualTableGeometry member value * Get the VirtualTableGeometry member value
* *
* @param type * @param type
* @return * @return
*/ */
public String getVirtualTableGeometryMember(VTGeometry type) { protected String getMember(VTGeometry type) {
Element el = this.getRoot().getChild(type.toString()); Element el = this.getRoot().getChild(type.toString());
if (el != null) if (el != null)
return el.getTextTrim(); return el.getTextTrim();
else else
return null; return null;
} }
/**
* Get the geometry column name
*
* @return
*/
public String getName(){
return this.getMember(VTGeometry.name);
}
/**
* Get the geometry column type
*
* @return
*/
public String getType(){
return this.getMember(VTGeometry.type);
}
/**
* Get the geometry column srid
*
* @return
*/
public String getSrid(){
return this.getMember(VTGeometry.srid);
}
} }

View File

@ -27,24 +27,19 @@ package it.geosolutions.geoserver.rest.encoder.metadata.virtualtable;
import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils; import it.geosolutions.geoserver.rest.encoder.utils.ElementUtils;
import it.geosolutions.geoserver.rest.encoder.utils.XmlElement; import it.geosolutions.geoserver.rest.encoder.utils.XmlElement;
import java.util.Map;
import java.util.Map.Entry;
import org.jdom.Element; import org.jdom.Element;
import org.jdom.filter.Filter; import org.jdom.filter.Filter;
/** /**
* GSVirtualTableParamEncoder - Encodes a metadata VirtualTable parameter for a * VTParameterEncoder - Encodes a metadata VirtualTable parameter for a
* GeoServer featureType, as follows: * GeoServer featureType, as follows:
* *
* <pre> * <pre>
* { @code * { @code
* final VTParameterEncoder vtParam = new VTParameterEncoder(); * final VTParameterEncoder vtParam = new VTParameterEncoder();
* vtParam.setVirtualTableParamMember(VTParameter.name, "fieldname"); * vtParam.setName("fieldname");
* vtParam.setVirtualTableParamMember(VTParameter.defaultValue, * vtParam.setDefaultValue("default_value");
* "default_value"); * vtParam.setRegexpValidator("^[\\w\\d\\s]+$");
* vtParam.setVirtualTableParamMember(VTParameter.regexpValidator,
* "^[\\w\\d\\s]+$");
* } * }
* </pre> * </pre>
* *
@ -70,7 +65,7 @@ public class VTParameterEncoder extends XmlElement {
* A class to filter the VirtualTable parameters by name * A class to filter the VirtualTable parameters by name
* *
*/ */
public static class filterByName implements Filter { private static class filterByName implements Filter {
final private String key; final private String key;
@ -110,9 +105,9 @@ public class VTParameterEncoder extends XmlElement {
/** /**
* Constructs quickly a VTParameterEncoder * Constructs quickly a VTParameterEncoder
* *
* @param name * @param name (required)
* @param defaultValue * @param defaultValue (required)
* @param regexpValidator * @param regexpValidator (required)
*/ */
public VTParameterEncoder(String name, String defaultValue, String regexpValidator){ public VTParameterEncoder(String name, String defaultValue, String regexpValidator){
super("parameter"); super("parameter");
@ -127,21 +122,9 @@ public class VTParameterEncoder extends XmlElement {
* @param regexpValidator * @param regexpValidator
*/ */
protected void setup(String name, String defaultValue, String regexpValidator) { protected void setup(String name, String defaultValue, String regexpValidator) {
set(VTParameter.name.name(), name); setName(name);
set(VTParameter.defaultValue.name(), defaultValue); setDefaultValue(defaultValue);
set(VTParameter.regexpValidator.name(), regexpValidator); setRegexpValidator(regexpValidator);
}
/**
* Set-up a VirtualTable parameter
*
* @param vtParamMembers
*/
public void setup(Map<VTParameter, String> vtParamMembers) {
for (Entry<VTParameter, String> vtParamMember : vtParamMembers
.entrySet()) {
set(vtParamMember.getKey().toString(), vtParamMember.getValue());
}
} }
/** /**
@ -150,32 +133,114 @@ public class VTParameterEncoder extends XmlElement {
* @param type * @param type
* @param value * @param value
*/ */
public void setVirtualTableParamMember(VTParameter type, protected void setMember(VTParameter type,
String value) { String value) {
set(type.toString(), value); set(type.toString(), value);
} }
/**
* Set the parameter name
*
* @param name
*/
public void setName(String name){
this.setMember(VTParameter.name, name);
}
/**
* Set the parameter default value
*
* @param value
*/
public void setDefaultValue(String value){
this.setMember(VTParameter.defaultValue, value);
}
/**
* Set the parameter regexp validator
*
* @param validator
*/
public void setRegexpValidator(String validator){
this.setMember(VTParameter.regexpValidator, validator);
}
/** /**
* Deletes a VirtualTableParameter member * Deletes a VirtualTableParameter member
* *
* @param type * @param type
* @return * @return
*/ */
public boolean delVirtualTableParamMember(VTParameter type) { protected boolean delMember(VTParameter type) {
return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString())); return ElementUtils.remove(this.getRoot(), this.getRoot().getChild(type.toString()));
} }
/**
* Deletes the name
*
* @return true if removed, false otherwise
*/
public boolean delName(){
return this.delMember(VTParameter.name);
}
/**
* Deletes the default value
*
* @return true if removed, false otherwise
*/
public boolean delDefaultValue(){
return this.delMember(VTParameter.defaultValue);
}
/**
* Deletes the Regexp validator
*
* @return true if removed, false otherwise
*/
public boolean delRegexpValidator(){
return this.delMember(VTParameter.regexpValidator);
}
/** /**
* Get a VirtualTableParameter member * Get a VirtualTableParameter member
* *
* @param type * @param type
* @return * @return
*/ */
public String getVirtualTableParamMember(VTParameter type) { protected String getMember(VTParameter type) {
Element el = getRoot().getChild(type.toString()); Element el = getRoot().getChild(type.toString());
if (el != null) if (el != null)
return el.getTextTrim(); return el.getTextTrim();
else else
return null; return null;
} }
/**
* Get the parameter name
*
* @return
*/
public String getName(){
return this.getMember(VTParameter.name);
}
/**
* Get the parameter default value
*
* @return
*/
public String getDefaultValue(){
return this.getMember(VTParameter.defaultValue);
}
/**
* Get the parameter regexp validator
*
* @return
*/
public String getRegexpValidator(){
return this.getMember(VTParameter.regexpValidator);
}
} }

View File

@ -81,8 +81,8 @@ public class GSVirtualTableEncoderTest {
Assert.assertEquals("mysqlview", vte.getName()); Assert.assertEquals("mysqlview", vte.getName());
Assert.assertEquals(sql, vte.getSql()); Assert.assertEquals(sql, vte.getSql());
vtGeom.setVirtualTableGeometryMember(VTGeometry.type, "Point"); vtGeom.setType("Point");
vtParam1.setVirtualTableParamMember(VTParameter.name, "newfieldname"); vtParam1.setName("newfieldname");
Assert.assertEquals("Point", Assert.assertEquals("Point",
((Element) vte.getRoot().getChildren("geometry").get(0)) ((Element) vte.getRoot().getChildren("geometry").get(0))
@ -91,9 +91,8 @@ public class GSVirtualTableEncoderTest {
.getChildren("parameter").get(0)).getChildText(VTParameter.name .getChildren("parameter").get(0)).getChildText(VTParameter.name
.toString())); .toString()));
Assert.assertTrue(vtGeom.delVirtualTableGeometryMember(VTGeometry.srid)); Assert.assertTrue(vtGeom.delSrid());
Assert.assertTrue(vtParam1 Assert.assertTrue(vtParam1.delRegexpValidator());
.delVirtualTableParamMember(VTParameter.regexpValidator));
} }
} }