VirtualTable support - fix encoders
This commit is contained in:
parent
6b27c57bfc
commit
3dc49b952f
@ -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,
|
||||||
|
|||||||
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -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));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user