/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2014, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library 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 * Lesser General Public License for more details. */ package org.geotools.data.solr; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.nio.file.Paths; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.TimeZone; import java.util.logging.Level; import java.util.logging.Logger; import org.geotools.temporal.object.DefaultInstant; import org.geotools.temporal.object.DefaultPeriod; import org.geotools.temporal.object.DefaultPosition; import org.geotools.test.OnlineTestCase; import org.opengis.temporal.Instant; import org.opengis.temporal.Period; import com.vividsolutions.jts.geom.Geometry; public abstract class SolrTestSupport extends OnlineTestCase { protected static final Logger LOGGER = org.geotools.util.logging.Logging .getLogger(SolrTestSupport.class); static { // uncomment to turn up logging java.util.logging.ConsoleHandler handler = new java.util.logging.ConsoleHandler(); handler.setLevel(java.util.logging.Level.FINE); org.geotools.util.logging.Logging.getLogger("org.geotools.data.solr").setLevel( java.util.logging.Level.FINE); org.geotools.util.logging.Logging.getLogger("org.geotools.data.solr").addHandler(handler); } protected SolrFeatureSource featureSource; protected SolrDataStore dataStore; protected String testFile = "wifiAccessPoint.xml"; protected String layerName = "active"; protected int SOURCE_SRID = 4326; protected String pkField; private ArrayList<SolrAttribute> attributes; private static boolean setUpIsDone = false; protected DateFormat df = new SimpleDateFormat("yyyy-dd-MM HH:mm:ss"); public void setUpSolrFile(String url) throws Exception { if (setUpIsDone) { return; } // do the setup File testDir = (Paths.get(getClass().getResource("/" + testFile).toURI()).getParent()) .toFile(); ProcessBuilder pb = new ProcessBuilder("java", "-Durl=" + url + "/update", "-jar", "post.jar", testFile); pb.directory(testDir); LOGGER.log(Level.FINE, "Starting SOLR import"); final Process command = pb.start(); LOGGER.log(Level.FINE, "Started SOLR import"); String line; BufferedReader bri = new BufferedReader(new InputStreamReader(command.getInputStream())); BufferedReader bre = new BufferedReader(new InputStreamReader(command.getErrorStream())); while ((line = bri.readLine()) != null) { LOGGER.log(Level.FINE, line); } bri.close(); while ((line = bre.readLine()) != null) { LOGGER.log(Level.FINE, line); } bre.close(); int i = command.waitFor(); assertTrue(i == 0); LOGGER.log(Level.FINE, "SOLR import DONE!"); setUpIsDone = true; } @Override protected void connect() throws Exception { String url = fixture.getProperty(SolrDataStoreFactory.URL.key); setUpSolrFile(url); Map params = createConnectionParams(url, fixture); SolrDataStoreFactory factory = new SolrDataStoreFactory(); dataStore = (SolrDataStore) factory.createDataStore(params); attributes = dataStore.getSolrAttributes(this.layerName); for (SolrAttribute at : attributes) { if (at.isPk()) { this.pkField = at.getName(); } if (Geometry.class.isAssignableFrom(at.getType())) { at.setSrid(SOURCE_SRID); } at.setUse(true); } } protected Map createConnectionParams(String url, Properties fixture) { String field = fixture.getProperty(SolrDataStoreFactory.FIELD.key); Map params = new HashMap(); params.put(SolrDataStoreFactory.URL.key, url); params.put(SolrDataStoreFactory.FIELD.key, field); params.put(SolrDataStoreFactory.NAMESPACE.key, SolrDataStoreFactory.NAMESPACE.sample); return params; } protected void init() throws Exception { df.setTimeZone(TimeZone.getTimeZone("UTC")); init(this.layerName); } protected void init(String layerName) throws Exception { init(layerName, "geo"); } protected void init(String layerName, String geometryField) throws Exception { this.layerName = layerName; SolrLayerConfiguration solrLayerConfiguration = new SolrLayerConfiguration( new ArrayList<SolrAttribute>()); solrLayerConfiguration.setLayerName(this.layerName); List<SolrAttribute> layerAttributes = new ArrayList<>(); for (SolrAttribute solrAttribute : attributes) { if (geometryField.equals(solrAttribute.getName())) { SolrAttribute copy = new SolrAttribute(solrAttribute); copy.setDefaultGeometry(true); layerAttributes.add(copy); } else { layerAttributes.add(solrAttribute); } } solrLayerConfiguration.getAttributes().addAll(layerAttributes); dataStore.setSolrConfigurations(solrLayerConfiguration); featureSource = (SolrFeatureSource) dataStore.getFeatureSource(this.layerName); } @Override protected void disconnect() throws Exception { dataStore.dispose(); } @Override protected String getFixtureId() { return SolrDataStoreFactory.NAMESPACE.sample.toString(); } protected Date date(String date) throws ParseException { return df.parse(date); } protected Instant instant(String d) throws ParseException { return new DefaultInstant(new DefaultPosition(date(d))); } protected Period period(String d1, String d2) throws ParseException { return new DefaultPeriod(instant(d1), instant(d2)); } }