Merge pull request 'task_22747' (#1) from task_22747 into master
Reviewed-on: #1
This commit is contained in:
commit
d8518b664b
|
@ -6,17 +6,22 @@
|
|||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
||||
<attributes>
|
||||
<attribute name="test" value="true"/>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
<attribute name="test" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
|
|
|
@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
|
|||
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
|
||||
## [v1-2-0-SNAPSHOT] - 2022-02-01
|
||||
|
||||
- [#22747] Added WFS utilities
|
||||
|
||||
## [v1-1-2] - 2019-10-24
|
||||
|
||||
- [#17831#change-92733] Bug fixed
|
||||
|
|
25
pom.xml
25
pom.xml
|
@ -11,7 +11,7 @@
|
|||
<groupId>org.gcube.spatial.data</groupId>
|
||||
<artifactId>geo-utility</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.1.2-SNAPSHOT</version>
|
||||
<version>1.2.0-SNAPSHOT</version>
|
||||
<name>geo-utility</name>
|
||||
<description>A library with utility classes to interact with geo-spatial data: WmsUrlValidator, GeoGetStyles, etc..</description>
|
||||
|
||||
|
@ -28,6 +28,18 @@
|
|||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<developers>
|
||||
<developer>
|
||||
<name>Francesco Mangiacrapa</name>
|
||||
<email>francesco.mangiacrapa@isti.cnr.it</email>
|
||||
<organization>CNR Pisa, Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo"</organization>
|
||||
<roles>
|
||||
<role>architect</role>
|
||||
<role>developer</role>
|
||||
</roles>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
|
||||
<dependencies>
|
||||
|
||||
|
@ -69,11 +81,12 @@
|
|||
<artifactId>slf4j-log4j12</artifactId>
|
||||
<version>1.6.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>1.2.16</version>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency> -->
|
||||
<!-- <groupId>com.google.guava</groupId> -->
|
||||
<!-- <artifactId>guava</artifactId> -->
|
||||
<!-- <version>31.0.1-jre</version> -->
|
||||
<!-- </dependency> -->
|
||||
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module rename-to='geo-utility'>
|
||||
<!-- Inherit the core Web Toolkit stuff. -->
|
||||
<inherits name='com.google.gwt.user.User' />
|
||||
|
||||
<!-- Specify the paths for translatable code -->
|
||||
<source path='client' />
|
||||
<source path='shared' />
|
||||
|
||||
</module>
|
|
@ -0,0 +1,74 @@
|
|||
package org.gcube.spatial.data.geoutility.shared.wfs;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* The Class FeatureGeometry.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Sep 6, 2021
|
||||
*/
|
||||
public class FeatureGeometry implements WFSGeometry, Serializable {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 8231377594468260590L;
|
||||
private String type;
|
||||
private String coordinatesJSON;
|
||||
private String toJSON;
|
||||
|
||||
/**
|
||||
* Instantiates a new feature geometry.
|
||||
*/
|
||||
public FeatureGeometry() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new feature geometry.
|
||||
*
|
||||
* @param type the type
|
||||
* @param coordinatesJSON the coordinates JSON
|
||||
*/
|
||||
public FeatureGeometry(String type, String coordinatesJSON) {
|
||||
super();
|
||||
this.type = type;
|
||||
this.coordinatesJSON = coordinatesJSON;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getCoordinatesJSON() {
|
||||
return coordinatesJSON;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public void setCoordinatesJSON(String coordinatesJSON) {
|
||||
this.coordinatesJSON = coordinatesJSON;
|
||||
}
|
||||
|
||||
public String getToJSONObject() {
|
||||
if(toJSON==null)
|
||||
toJSON = "{\"type\":\""+type+"\",\"coordinates\":"+coordinatesJSON+"}";
|
||||
return toJSON;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("FeatureGeometry [type=");
|
||||
builder.append(type);
|
||||
builder.append(", coordinatesJSON=");
|
||||
builder.append(coordinatesJSON);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.spatial.data.geoutility.shared.wfs;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* The Class FeatureRow.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
||||
*
|
||||
* Oct 29, 2020
|
||||
*/
|
||||
public class FeatureRow implements Serializable {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 8741559784800931747L;
|
||||
|
||||
private String id;
|
||||
|
||||
private Map<String, List<String>> mapProperties;
|
||||
|
||||
private FeatureGeometry geometry;
|
||||
|
||||
private String crsName;
|
||||
|
||||
public FeatureRow() {
|
||||
}
|
||||
|
||||
public FeatureRow(Map<String, List<String>> mapProperties, FeatureGeometry geometry) {
|
||||
super();
|
||||
this.mapProperties = mapProperties;
|
||||
this.setGeometry(geometry);
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Map<String, List<String>> getMapProperties() {
|
||||
return mapProperties;
|
||||
}
|
||||
|
||||
public void setMapProperties(Map<String, List<String>> mapProperties) {
|
||||
this.mapProperties = mapProperties;
|
||||
}
|
||||
|
||||
public String getCrsName() {
|
||||
return crsName;
|
||||
}
|
||||
|
||||
public void setCrsName(String crsName) {
|
||||
this.crsName = crsName;
|
||||
}
|
||||
|
||||
public FeatureGeometry getGeometry() {
|
||||
return geometry;
|
||||
}
|
||||
|
||||
public void setGeometry(FeatureGeometry geometry) {
|
||||
this.geometry = geometry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("FeatureRow [id=");
|
||||
builder.append(id);
|
||||
builder.append(", mapProperties=");
|
||||
builder.append(mapProperties);
|
||||
builder.append(", geometry=");
|
||||
builder.append(geometry);
|
||||
builder.append(", crsName=");
|
||||
builder.append(crsName);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package org.gcube.spatial.data.geoutility.shared.wfs;
|
||||
|
||||
|
||||
/**
|
||||
* The Interface WFSGeometry.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Sep 6, 2021
|
||||
*/
|
||||
public interface WFSGeometry {
|
||||
|
||||
/**
|
||||
* Gets the type.
|
||||
*
|
||||
* @return the type
|
||||
*/
|
||||
String getType();
|
||||
|
||||
/**
|
||||
* Gets the coordinates JSON.
|
||||
*
|
||||
* @return the coordinates JSON
|
||||
*/
|
||||
String getCoordinatesJSON();
|
||||
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
package org.gcube.spatial.data.geoutility.shared.wfs;
|
||||
|
||||
|
||||
/**
|
||||
* The Enum WFSParameter with default value (parameter,value)
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Jan 28, 2022
|
||||
*/
|
||||
public enum WFSParameter {
|
||||
|
||||
SERVICE("SERVICE", "WFS"),
|
||||
VERSION("VERSION", "1.1.0"),
|
||||
REQUEST("REQUEST", "GetFeature"),
|
||||
TYPENAME("TYPENAME", ""),
|
||||
STYLES("STYLES", ""),
|
||||
BBOX("BBOX", "-180,-90,180,90"),
|
||||
WIDTH("WIDTH", "676"),
|
||||
HEIGHT("HEIGHT", "230"),
|
||||
SRSNAME("srsName", "EPSG:4326"),
|
||||
CRS("CRS","EPSG:4326"), //WMS 1.3.0 COMPLIANT
|
||||
OUTPUTFORMAT("OUTPUTFORMAT", "application/json"),
|
||||
MAXFEATURES("MAXFEATURES", "10"),
|
||||
PROPERTYNAME("PROPERTYNAME",""),
|
||||
CQL_FILTER("CQL_FILTER","");
|
||||
|
||||
private String parameter;
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* Instantiates a new wfs parameters.
|
||||
*
|
||||
* @param parameter the parameter
|
||||
* @param value the value
|
||||
*/
|
||||
WFSParameter(String parameter, String value) {
|
||||
this.parameter = parameter;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the parameter.
|
||||
*
|
||||
* @return the parameter
|
||||
*/
|
||||
public String getParameter() {
|
||||
return parameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the value.
|
||||
*
|
||||
* @return the value
|
||||
*/
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package org.gcube.spatial.data.geoutility.wfs;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.gcube.spatial.data.geoutility.shared.wfs.FeatureGeometry;
|
||||
import org.gcube.spatial.data.geoutility.shared.wfs.FeatureRow;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* The Class FeatureParser.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Jan 28, 2022
|
||||
*/
|
||||
public class FeatureParser {
|
||||
|
||||
private static Logger LOG = LoggerFactory.getLogger(FeatureParser.class);
|
||||
|
||||
/**
|
||||
* Gets the WFS features.
|
||||
*
|
||||
* @param wfsEndPoint the wfs end point
|
||||
* @param wfsQB the wfs QB
|
||||
* @return the WFS features
|
||||
*/
|
||||
public static List<FeatureRow> getWFSFeatures(String wfsEndPoint, WFSQueryBuilder wfsQB) {
|
||||
|
||||
return getWFSFeatureProperties(wfsEndPoint + "?" + wfsQB.getQuery());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the WFS feature properties.
|
||||
*
|
||||
* @param wfsURLRequest the wfs URL request
|
||||
* @return the WFS feature properties
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private static List<FeatureRow> getWFSFeatureProperties(String wfsURLRequest) {
|
||||
LOG.info("getWFSFeatureProperties for url: " + wfsURLRequest);
|
||||
InputStream is = null;
|
||||
List<FeatureRow> listFeaturesRow = new ArrayList<FeatureRow>();
|
||||
try {
|
||||
|
||||
LOG.info("Built WFS URL: " + wfsURLRequest);
|
||||
is = new URL(wfsURLRequest).openStream();
|
||||
String jsonTxt = IOUtils.toString(is);
|
||||
|
||||
if (jsonTxt == null || jsonTxt.isEmpty()) {
|
||||
jsonTxt = "{\"type\":\"FeatureCollection\",\"features\":[]}";
|
||||
}
|
||||
|
||||
// get json object
|
||||
JSONObject json = new JSONObject(jsonTxt);
|
||||
// iterate features
|
||||
JSONArray features = json.getJSONArray("features");
|
||||
if (features.length() == 0) {
|
||||
LOG.info("No features detected in the response, returning empty list");
|
||||
return listFeaturesRow;
|
||||
}
|
||||
|
||||
String featureCRSName = "";
|
||||
try {
|
||||
JSONObject crs = json.getJSONObject("crs");
|
||||
JSONObject crsProp = crs.getJSONObject("properties");
|
||||
featureCRSName = crsProp.getString("name");
|
||||
LOG.info("Crs name found: " + featureCRSName);
|
||||
} catch (Exception e) {
|
||||
LOG.warn("Unable to read the field 'crs'");
|
||||
}
|
||||
|
||||
LOG.info("Features are: " + features.length());
|
||||
|
||||
for (int i = 0; i < features.length(); i++) {
|
||||
final FeatureRow row = new FeatureRow();
|
||||
row.setCrsName(featureCRSName);
|
||||
JSONObject theFeature = ((JSONObject) features.get(i));
|
||||
LOG.debug("Building at index: " + i);
|
||||
|
||||
try {
|
||||
String fetaureId = theFeature.getString("id");
|
||||
row.setId(fetaureId);
|
||||
JSONObject geometry = theFeature.getJSONObject("geometry");
|
||||
String typeValue = geometry.getString("type");
|
||||
FeatureGeometry fg = new FeatureGeometry();
|
||||
fg.setType(typeValue);
|
||||
|
||||
try {
|
||||
JSONArray coordinates = geometry.getJSONArray("coordinates");
|
||||
String coordinateJSONString = coordinates.toString();
|
||||
LOG.debug("coordinates are: " + coordinateJSONString);
|
||||
fg.setCoordinatesJSON(coordinates.toString());
|
||||
} catch (Exception e) {
|
||||
LOG.warn("Not able to parse the 'coordinates' field: ", e);
|
||||
}
|
||||
|
||||
row.setGeometry(fg);
|
||||
} catch (Exception e) {
|
||||
LOG.debug("Unable to parse geometry at index: " + i);
|
||||
}
|
||||
|
||||
// // iterate properties
|
||||
JSONObject properties = theFeature.getJSONObject("properties");
|
||||
Map<String, List<String>> mapProperties = new HashMap<String, List<String>>();
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<String> ii = properties.keys();
|
||||
while (ii.hasNext()) {
|
||||
String key = ii.next();
|
||||
String value = properties.optString(key, "");
|
||||
|
||||
List<String> theValues = mapProperties.get(key);
|
||||
if (theValues == null)
|
||||
mapProperties.put(key, Arrays.asList(value));
|
||||
else {
|
||||
theValues.add(value);
|
||||
mapProperties.put(key, theValues);
|
||||
}
|
||||
}
|
||||
row.setMapProperties(mapProperties);
|
||||
listFeaturesRow.add(row);
|
||||
LOG.info("Added row " + row + " to exported properties");
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
LOG.error("Error on requesting properties for url: " + wfsURLRequest, e);
|
||||
} catch (JSONException e) {
|
||||
LOG.error("Error on requesting properties for url: " + wfsURLRequest, e);
|
||||
} finally {
|
||||
IOUtils.closeQuietly(is);
|
||||
}
|
||||
|
||||
LOG.info("Returning " + listFeaturesRow.size() + " features");
|
||||
return listFeaturesRow;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package org.gcube.spatial.data.geoutility.wfs;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.gcube.spatial.data.geoutility.shared.wfs.WFSParameter;
|
||||
|
||||
/**
|
||||
* The Class WFSQueryBuilder.
|
||||
*
|
||||
* @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
|
||||
*
|
||||
* Jan 28, 2022
|
||||
*/
|
||||
public class WFSQueryBuilder {
|
||||
|
||||
private String query = "";
|
||||
|
||||
/**
|
||||
* Instantiates a new WFS query builder.
|
||||
*/
|
||||
public WFSQueryBuilder() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the parameter.
|
||||
*
|
||||
* @param param the param
|
||||
* @param value the value
|
||||
*/
|
||||
public void addParameter(WFSParameter param, String value) {
|
||||
|
||||
if (!query.isEmpty())
|
||||
query += "&";
|
||||
|
||||
query += param + "=" + value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the parameter.
|
||||
*
|
||||
* @param param the param
|
||||
* @param values the values
|
||||
* @param separtor the separtor
|
||||
*/
|
||||
public void addParameter(WFSParameter param, List<String> values, String separtor) {
|
||||
|
||||
if (!query.isEmpty())
|
||||
query += "&";
|
||||
|
||||
String value = "";
|
||||
for (int i = 0; i < values.size() - 1; i++) {
|
||||
value += values.get(i) + separtor;
|
||||
}
|
||||
|
||||
value += values.get(values.size() - 1);
|
||||
|
||||
query += param + "=" + value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the query.
|
||||
*
|
||||
* @return the query
|
||||
*/
|
||||
public String getQuery() {
|
||||
return query;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module rename-to='geo-utility'>
|
||||
<!-- Inherit the core Web Toolkit stuff. -->
|
||||
<inherits name='com.google.gwt.user.User' />
|
||||
|
||||
<!-- Specify the paths for translatable code -->
|
||||
<source path='client' />
|
||||
<source path='shared' />
|
||||
|
||||
</module>
|
|
@ -0,0 +1,165 @@
|
|||
//package org.gcube.spatial.data.geoutility;
|
||||
//
|
||||
//import java.util.EnumSet;
|
||||
//import java.util.Map;
|
||||
//import java.util.stream.Stream;
|
||||
//
|
||||
//import org.gcube.spatial.data.geoutility.CustomerTable.Column;
|
||||
//
|
||||
//import com.google.common.base.Predicate;
|
||||
//import com.google.common.collect.HashBasedTable;
|
||||
//import com.google.common.collect.Maps;
|
||||
//import com.google.common.collect.Table;
|
||||
//
|
||||
//public class CustomerTable {
|
||||
//
|
||||
// public enum Column {
|
||||
// PARENT_LOCATION_ID, LOCATION_ID, LOCATION_TYPE, LOCATION_DEN;
|
||||
// }
|
||||
//
|
||||
// private Table<Integer, Column, String> table = HashBasedTable.create();
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return table.toString();
|
||||
// }
|
||||
//
|
||||
// public void createRow(String[] values) {
|
||||
// if (Column.values().length != values.length) {
|
||||
// throw new IllegalArgumentException();
|
||||
// }
|
||||
// Integer rowNum = table.rowKeySet().size() + 1;
|
||||
// for (int i = 0; i < values.length; i++) {
|
||||
// table.put(rowNum, Column.values()[i], values[i]);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//// private void query() {
|
||||
//// // TODO Auto-generated method stub
|
||||
////
|
||||
//// }
|
||||
////
|
||||
//// public Table<Integer, Column, String> query(Predicate<Map<Column, String>> query) {
|
||||
//// return query(query, allOf(Column.class));
|
||||
//// }
|
||||
//
|
||||
// public Table<Integer, Column, String> query(Predicate<Map<Column, String>> query, EnumSet<Column> columns) {
|
||||
// Map<Integer, Map<Column, String>> filtered = Maps.filterValues(table.rowMap(), query);
|
||||
// return createResultTable(filtered, columns);
|
||||
// }
|
||||
//
|
||||
// private Table<Integer, Column, String> createResultTable(Map<Integer, Map<Column, String>> resultMap,
|
||||
// final EnumSet<Column> columns) {
|
||||
//
|
||||
// int i = 0;
|
||||
// Table<Integer, Column, String> result = HashBasedTable.create();
|
||||
// for (Map<Column, String> row : resultMap.values()) {
|
||||
// i++;
|
||||
// for (Column column : row.keySet()) {
|
||||
// if (columns.contains(column)) {
|
||||
// result.put(i, column, row.get(column));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public Stream<Map<Column, String>> filter(String column, String value) {
|
||||
// Stream<Map<Column, String>> stream = table.rowMap().values().stream().filter(row -> {
|
||||
// return row.get(column).contains(value);
|
||||
// });
|
||||
// return stream;
|
||||
// }
|
||||
//
|
||||
// public Table<Integer, Column, String> table() {
|
||||
//
|
||||
// return table;
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//class EqualPredicate implements Predicate<Map<CustomerTable.Column, String>> {
|
||||
//
|
||||
// private Column column;
|
||||
// private String value;
|
||||
//
|
||||
// public EqualPredicate(Column column, String value) {
|
||||
// this.column = column;
|
||||
// this.value = value;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean apply(Map<Column, String> input) {
|
||||
// return input.get(column) != null && input.get(column).equals(value);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public static EqualPredicate equal(Column column, String value) {
|
||||
// return new EqualPredicate(column, value);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// StringBuilder builder = new StringBuilder();
|
||||
// builder.append("EqualPredicate [column=");
|
||||
// builder.append(column);
|
||||
// builder.append(", value=");
|
||||
// builder.append(value);
|
||||
// builder.append("]");
|
||||
// return builder.toString();
|
||||
// }
|
||||
//
|
||||
//
|
||||
//}
|
||||
//
|
||||
//
|
||||
//class Location {
|
||||
//
|
||||
// String parentId;
|
||||
// String id;
|
||||
// String type;
|
||||
// String name; // is denominazione
|
||||
//
|
||||
// public Location(String parentId, String id, String type, String name) {
|
||||
// super();
|
||||
// this.parentId = parentId;
|
||||
// this.id = id;
|
||||
// this.type = type;
|
||||
// this.name = name;
|
||||
// }
|
||||
//
|
||||
// public String getParentId() {
|
||||
// return parentId;
|
||||
// }
|
||||
//
|
||||
// public String getId() {
|
||||
// return id;
|
||||
// }
|
||||
//
|
||||
// public String getType() {
|
||||
// return type;
|
||||
// }
|
||||
//
|
||||
// public String getName() {
|
||||
// return name;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// StringBuilder builder = new StringBuilder();
|
||||
// builder.append("Location [parentId=");
|
||||
// builder.append(parentId);
|
||||
// builder.append(", id=");
|
||||
// builder.append(id);
|
||||
// builder.append(", type=");
|
||||
// builder.append(type);
|
||||
// builder.append(", name=");
|
||||
// builder.append(name);
|
||||
// builder.append("]");
|
||||
// return builder.toString();
|
||||
// }
|
||||
//
|
||||
//}
|
|
@ -3,23 +3,36 @@
|
|||
*/
|
||||
package org.gcube.spatial.data.geoutility;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
//import org.gcube.spatial.data.geoutility.CustomerTable.Column;
|
||||
import org.gcube.spatial.data.geoutility.shared.wfs.FeatureRow;
|
||||
import org.gcube.spatial.data.geoutility.shared.wfs.WFSParameter;
|
||||
import org.gcube.spatial.data.geoutility.wfs.FeatureParser;
|
||||
import org.gcube.spatial.data.geoutility.wfs.WFSQueryBuilder;
|
||||
import org.gcube.spatial.data.geoutility.wms.WmsUrlValidator;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
//import com.google.common.collect.Table;
|
||||
|
||||
/**
|
||||
* The Class GeoJUnitTest.
|
||||
*
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
* Jan 22, 2016
|
||||
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Jan 22, 2016
|
||||
*/
|
||||
public class GeoJUnitTest {
|
||||
|
||||
// CustomerTable tableReg = new CustomerTable();
|
||||
// CustomerTable tableProv = new CustomerTable();
|
||||
|
||||
/**
|
||||
* Test get styles.
|
||||
*/
|
||||
@Test
|
||||
// @Test
|
||||
public void testGetStyles() {
|
||||
// String wmsRequest = "http://repoigg.services.iit.cnr.it:8080/geoserver/IGG/ows?service=wms&version=1.1.0&request=GetMap&layers==IGG:area_temp_1000&width=676&height=330&srs=EPSG:4326&crs=EPSG:4326&format=application/openlayers&bbox=-85.5,-180.0,90.0,180.0";
|
||||
// String wmsRequest = "http://thredds-d-d4s.d4science.org/thredds/wms/public/netcdf/test20.nc?service=wms&version=1.3.0&request=GetMap&layers=analyzed_field&styles=&width=640&height=480&srs=EPSG:4326&CRS=EPSG:4326&format=image/png&COLORSCALERANGE=auto&bbox=-85.0,-180.0,85.0,180.0";
|
||||
|
@ -28,16 +41,14 @@ public class GeoJUnitTest {
|
|||
GeoNcWMSMetadataUtility geo;
|
||||
try {
|
||||
geo = new GeoNcWMSMetadataUtility(wmsRequest);
|
||||
System.out.println("Returned styles: "+geo.loadStyles());
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("Returned styles: " + geo.loadStyles());
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test get styles.
|
||||
*/
|
||||
|
@ -49,9 +60,8 @@ public class GeoJUnitTest {
|
|||
GeoNcWMSMetadataUtility geo;
|
||||
try {
|
||||
geo = new GeoNcWMSMetadataUtility(wmsRequest);
|
||||
System.out.println("Returned Z-Axis: "+geo.loadZAxis());
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("Returned Z-Axis: " + geo.loadZAxis());
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
@ -68,12 +78,223 @@ public class GeoJUnitTest {
|
|||
WmsUrlValidator wms;
|
||||
try {
|
||||
wms = new WmsUrlValidator(wmsRequest);
|
||||
System.out.println("Returned wms: "+wms.toString());
|
||||
}
|
||||
catch (Exception e) {
|
||||
System.out.println("Returned wms: " + wms.toString());
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*@Before
|
||||
public void fillRegioneProvinceComuniWFSRequest() {
|
||||
|
||||
String wfsEndPoint = "https://geoserver1.dev.d4science.org/geoserver/devvre/wfs";
|
||||
try {
|
||||
// REGIONI
|
||||
String layerName = "devvre:Reg01012021_g_WGS84";
|
||||
List<String> propertyName = new ArrayList<String>();
|
||||
propertyName.add("devvre:COD_REG");
|
||||
propertyName.add("devvre:DEN_REG");
|
||||
// Querying list of Regioni
|
||||
WFSQueryBuilder queryBuilder = new WFSQueryBuilder();
|
||||
queryBuilder.addParameter(WFSParameter.SERVICE, WFSParameter.SERVICE.getValue());
|
||||
queryBuilder.addParameter(WFSParameter.VERSION, "2.0.0");
|
||||
queryBuilder.addParameter(WFSParameter.REQUEST, "GetFeature");
|
||||
queryBuilder.addParameter(WFSParameter.TYPENAME, layerName);
|
||||
queryBuilder.addParameter(WFSParameter.OUTPUTFORMAT, WFSParameter.OUTPUTFORMAT.getValue());
|
||||
queryBuilder.addParameter(WFSParameter.PROPERTYNAME, propertyName, ",");
|
||||
System.out.println(queryBuilder.getQuery());
|
||||
FeatureParser fp = new FeatureParser();
|
||||
List<FeatureRow> rows = fp.getWFSFeatures(wfsEndPoint, queryBuilder);
|
||||
System.out.println("Regioni: ");
|
||||
|
||||
for (FeatureRow featureRow : rows) {
|
||||
System.out.println(featureRow);
|
||||
Map<String, List<String>> properties = featureRow.getMapProperties();
|
||||
tableReg.createRow(new String[] { "", properties.get("COD_REG").get(0), "Regione",
|
||||
properties.get("DEN_REG").get(0) });
|
||||
}
|
||||
System.out.println("Table regioni: " + tableReg);
|
||||
|
||||
// PROVINCE
|
||||
layerName = "devvre:ProvCM01012021_g_WGS84";
|
||||
propertyName = new ArrayList<String>();
|
||||
propertyName.add("devvre:COD_REG");
|
||||
propertyName.add("devvre:COD_PROV");
|
||||
propertyName.add("devvre:DEN_PROV");
|
||||
propertyName.add("devvre:DEN_CM"); // è pieno per i capoluoghi di provincia
|
||||
|
||||
queryBuilder = new WFSQueryBuilder();
|
||||
queryBuilder.addParameter(WFSParameter.SERVICE, WFSParameter.SERVICE.getValue());
|
||||
queryBuilder.addParameter(WFSParameter.VERSION, "2.0.0");
|
||||
queryBuilder.addParameter(WFSParameter.REQUEST, "GetFeature");
|
||||
queryBuilder.addParameter(WFSParameter.TYPENAME, layerName);
|
||||
queryBuilder.addParameter(WFSParameter.OUTPUTFORMAT, WFSParameter.OUTPUTFORMAT.getValue());
|
||||
queryBuilder.addParameter(WFSParameter.PROPERTYNAME, propertyName, ",");
|
||||
// queryBuilder.addParameter(WFSParameter.CQL_FILTER,
|
||||
// URLEncoder.encode("devvre:COD_REG=9", "UTF-8"));
|
||||
System.out.println(queryBuilder.getQuery());
|
||||
fp = new FeatureParser();
|
||||
rows = fp.getWFSFeatures(wfsEndPoint, queryBuilder);
|
||||
|
||||
System.out.println("PROVINCE: ");
|
||||
for (FeatureRow featureRow : rows) {
|
||||
System.out.println(featureRow);
|
||||
Map<String, List<String>> properties = featureRow.getMapProperties();
|
||||
String denProv = properties.get("DEN_PROV").get(0);
|
||||
if (denProv == null || denProv.isEmpty() || denProv.equals("-")) {
|
||||
denProv = properties.get("DEN_CM").get(0); // è un capoluogo di provincia
|
||||
}
|
||||
|
||||
tableProv.createRow(new String[] { properties.get("COD_REG").get(0), properties.get("COD_PROV").get(0),
|
||||
"Provincia", denProv });
|
||||
}
|
||||
|
||||
// COMUNI
|
||||
// layerName = "devvre:Com01012021_g_WGS84";
|
||||
// propertyName = new ArrayList<String>();
|
||||
// //propertyName.add("devvre:COD_REG");
|
||||
// propertyName.add("devvre:COD_PROV");
|
||||
// propertyName.add("devvre:COMUNE");
|
||||
//
|
||||
// queryBuilder = new WFSQueryBuilder();
|
||||
// queryBuilder.addParameter(WFSParameter.SERVICE, WFSParameter.SERVICE.getValue());
|
||||
// queryBuilder.addParameter(WFSParameter.VERSION, "2.0.0");
|
||||
// queryBuilder.addParameter(WFSParameter.REQUEST, "GetFeature");
|
||||
// queryBuilder.addParameter(WFSParameter.TYPENAME, layerName);
|
||||
// queryBuilder.addParameter(WFSParameter.OUTPUTFORMAT, WFSParameter.OUTPUTFORMAT.getValue());
|
||||
// queryBuilder.addParameter(WFSParameter.PROPERTYNAME, propertyName, ",");
|
||||
// queryBuilder.addParameter(WFSParameter.CQL_FILTER, URLEncoder.encode("devvre:COD_PROV=9", "UTF-8"));
|
||||
// System.out.println(queryBuilder.getQuery());
|
||||
// fp = new FeatureParser();
|
||||
// rows = fp.getWFSFeatures(wfsEndPoint, queryBuilder);
|
||||
//
|
||||
// System.out.println("COMUNI: ");
|
||||
// for (FeatureRow featureRow : rows) {
|
||||
// System.out.println(featureRow);
|
||||
// Map<String, List<String>> properties = featureRow.getMapProperties();
|
||||
// String denProv = properties.get("DEN_PROV").get(0);
|
||||
// if(denProv==null || denProv.isEmpty()) {
|
||||
// denProv = properties.get("DEN_CM").get(0); //è un capoluogo di provincia
|
||||
// }
|
||||
//
|
||||
// tableProv.createRow(new String[] {properties.get("COD_REG").get(0),properties.get("COD_PROV").get(0),"Provincia",denProv});
|
||||
// }
|
||||
//
|
||||
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}*/
|
||||
|
||||
/*@Test
|
||||
public void testQueryTableRegioneProvince() {
|
||||
|
||||
try {
|
||||
|
||||
Table<Integer, Column, String> theTableProv = tableReg.table();
|
||||
List<Location> locations = new ArrayList<Location>();
|
||||
for (Integer tableRowId : theTableProv.rowKeySet()) {
|
||||
Location location = rowToLocation(theTableProv, tableRowId);
|
||||
locations.add(location);
|
||||
}
|
||||
|
||||
System.out.println("Location Regioni: " + locations);
|
||||
|
||||
String regID = "9";
|
||||
EqualPredicate equalPredicate = new EqualPredicate(Column.PARENT_LOCATION_ID, regID);
|
||||
EnumSet<Column> returnColumn = EnumSet.of(Column.PARENT_LOCATION_ID, Column.LOCATION_ID,
|
||||
Column.LOCATION_TYPE, Column.LOCATION_DEN);
|
||||
|
||||
Table<Integer, Column, String> tableResult = tableProv.query(equalPredicate, returnColumn);
|
||||
|
||||
List<Location> locationResult = new ArrayList<Location>();
|
||||
for (Integer rowId : tableResult.rowKeySet()) {
|
||||
Location location = rowToLocation(tableResult, rowId);
|
||||
locationResult.add(location);
|
||||
}
|
||||
|
||||
System.out.println("Query location for " + equalPredicate + ":");
|
||||
System.out.println(locationResult);
|
||||
|
||||
//
|
||||
// String valueType = "Regione";
|
||||
// String regId = "9"; //Toscana
|
||||
// Stream<Map<Column, String>> stream1 = tableReg.table().rowMap().values().stream().filter(row -> {
|
||||
// return row.get(Column.LOCATION_TYPE) != null && row.get(Column.LOCATION_ID) !=null && row.get(Column.LOCATION_TYPE).equals(valueType) && row.get(Column.LOCATION_ID).equals(regId);
|
||||
// });
|
||||
//
|
||||
// EqualPredicate equalPredicate = new EqualPredicate(Column.LOCATION_ID, regId);
|
||||
// stream1.forEach(s -> System.out.println(s));
|
||||
// // Print the stream
|
||||
// System.out.println("Query regione:" +tableReg.query(equalPredicate,returnColumn));
|
||||
//
|
||||
// CustomerTable tableProv = new CustomerTable();
|
||||
//
|
||||
// //PROVINCE
|
||||
// layerName = "devvre:ProvCM01012021_g_WGS84";
|
||||
// propertyName = new ArrayList<String>();
|
||||
// propertyName.add("devvre:COD_REG");
|
||||
// propertyName.add("devvre:COD_PROV");
|
||||
// propertyName.add("devvre:DEN_PROV");
|
||||
// propertyName.add("devvre:DEN_CM"); //è pieno per i capoluoghi di provincia
|
||||
//
|
||||
// queryBuilder = new WFSQueryBuilder();
|
||||
// queryBuilder.addParameter(WFSParameter.SERVICE, WFSParameter.SERVICE.getValue());
|
||||
// queryBuilder.addParameter(WFSParameter.VERSION, "2.0.0");
|
||||
// queryBuilder.addParameter(WFSParameter.REQUEST, "GetFeature");
|
||||
// queryBuilder.addParameter(WFSParameter.TYPENAME, layerName);
|
||||
// queryBuilder.addParameter(WFSParameter.OUTPUTFORMAT, WFSParameter.OUTPUTFORMAT.getValue());
|
||||
// queryBuilder.addParameter(WFSParameter.PROPERTYNAME, propertyName, ",");
|
||||
// //queryBuilder.addParameter(WFSParameter.CQL_FILTER, URLEncoder.encode("devvre:COD_REG=9", "UTF-8"));
|
||||
// fp = new FeatureParser();
|
||||
// rows = fp.getWFSFeatures(wfsEndPoint, queryBuilder);
|
||||
// System.out.println("PROVINCE: ");
|
||||
// for (FeatureRow featureRow : rows) {
|
||||
// //System.out.println(featureRow);
|
||||
// Map<String, List<String>> properties = featureRow.getMapProperties();
|
||||
// String denProv = properties.get("DEN_PROV").get(0);
|
||||
// if(denProv==null || denProv.isEmpty()) {
|
||||
// denProv = properties.get("DEN_CM").get(0); //è un capoluogo di provincia
|
||||
// }
|
||||
//
|
||||
// tableProv.createRow(new String[] {properties.get("COD_REG").get(0),properties.get("COD_PROV").get(0),"Provincia",denProv});
|
||||
// }
|
||||
//
|
||||
// System.out.println("Table PROVINCE: "+tableProv);
|
||||
//
|
||||
// Table<Integer, Column, String> theTableProv = tableProv.table();
|
||||
// List<Location> locationsProv = new ArrayList<Location>();
|
||||
// for (Integer tableRowId : theTableProv.rowKeySet()) {
|
||||
// Location location = rowToLocation(table, tableRowId);
|
||||
// locationsProv.add(location);
|
||||
// }
|
||||
// System.out.println("Location Province: "+locationsProv);
|
||||
//
|
||||
//
|
||||
// EqualPredicate ep = new EqualPredicate(Column.PARENT_LOCATION_ID,"5");
|
||||
// Table<Integer, Column, String> provQuery = tableProv.query(ep, returnColumn);
|
||||
// System.out.println("Query PROVINCIA: "+provQuery);
|
||||
//
|
||||
//
|
||||
// System.out.println(queryBuilder.getQuery());
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}*/
|
||||
|
||||
/*
|
||||
public static Location rowToLocation(Table<Integer, Column, String> table, Integer rowId) {
|
||||
Map<Column, String> column = table.row(rowId);
|
||||
column.get(Column.PARENT_LOCATION_ID);
|
||||
column.get(Column.LOCATION_ID);
|
||||
column.get(Column.LOCATION_TYPE);
|
||||
column.get(Column.LOCATION_DEN);
|
||||
return new Location(column.get(Column.PARENT_LOCATION_ID), column.get(Column.LOCATION_ID),
|
||||
column.get(Column.LOCATION_TYPE), column.get(Column.LOCATION_DEN));
|
||||
}*/
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
/devNext.gcubekey
|
||||
/devsec.gcubekey
|
||||
/gcube.gcubekey
|
||||
/log4j.properties
|
||||
/pred4s.gcubekey
|
||||
/preprod.gcubekey
|
Loading…
Reference in New Issue