/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, availible at the root
* application directory.
*/
package org.geoserver.wms;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.geotools.data.DataStore;
import org.geotools.data.DefaultQuery;
import org.geotools.data.FeatureSource;
import org.geotools.data.wfs.WFSDataStoreFactory;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.feature.FeatureCollection;
import org.opengis.filter.FilterFactory;
/**
* Utility class used to check wheter REMOTE_OWS_XXX related tests can be run against Sigma
* or not.
* @author Andrea Aime - TOPP
* @author Ben Caradoc-Davies, CSIRO Exploration and Mining
*/
public class RemoteOWSTestSupport {
// support for remote OWS layers
public static final String TOPP_STATES = "topp:states";
public static final String WFS_SERVER_URL = "http://demo.opengeo.org/geoserver/wfs?";
static Boolean remoteStatesAvailable;
public static boolean isRemoteStatesAvailable(Logger logger) {
if(remoteStatesAvailable == null) {
// let's see if the remote ows tests are enabled to start with
String value = System.getProperty("remoteOwsTests");
if(value == null || !"TRUE".equalsIgnoreCase(value)) {
logger.log(Level.WARNING, "Skipping remote OWS test because they were not enabled via -DremoteOwsTests=true");
remoteStatesAvailable = Boolean.FALSE;
} else {
// let's check if the remote WFS tests are runnable
try {
WFSDataStoreFactory factory = new WFSDataStoreFactory();
Map<String, Serializable> params = new HashMap(factory.getImplementationHints());
URL url = new URL(WFS_SERVER_URL + "service=WFS&request=GetCapabilities");
params.put(WFSDataStoreFactory.URL.key, url);
params.put(WFSDataStoreFactory.TRY_GZIP.key, Boolean.TRUE);
//give it five seconds to respond...
params.put(WFSDataStoreFactory.TIMEOUT.key, Integer.valueOf(5000));
DataStore remoteStore = factory.createDataStore(params);
FeatureSource fs = remoteStore.getFeatureSource(TOPP_STATES);
remoteStatesAvailable = Boolean.TRUE;
// check a basic response can be answered correctly
DefaultQuery dq = new DefaultQuery(TOPP_STATES);
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
dq.setFilter(ff.greater(ff.property("PERSONS"), ff.literal(20000000)));
FeatureCollection fc = fs.getFeatures(dq);
if(fc.size() != 1) {
logger.log(Level.WARNING, "Remote database status invalid, there should be one and only one " +
"feature with more than 20M persons in topp:states");
remoteStatesAvailable = Boolean.FALSE;
}
logger.log(Level.WARNING, "Remote OWS tests are enabled, remote server appears to be up");
} catch(IOException e) {
logger.log(Level.WARNING, "Skipping remote OWS test, either demo " +
"is down or the topp:states layer is not there", e);
remoteStatesAvailable = Boolean.FALSE;
}
}
}
return remoteStatesAvailable.booleanValue();
}
}