package cz.agents.dbtokmlexporter.darptestbed.kmlitembuilder; import java.awt.Color; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import org.apache.log4j.Logger; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; import cz.agents.agentpolis.tools.geovisio.database.connection.DatabaseConnection; import cz.agents.dbtokmlexporter.factory.DescriptionFactory; import cz.agents.dbtokmlexporter.factory.TableColumnsDescriptionFactory; import cz.agents.dbtokmlexporter.factory.geometry.GeometryFactory; import cz.agents.dbtokmlexporter.factory.geometry.LineGeometryFactory; import cz.agents.dbtokmlexporter.factory.style.LineStyleFactory; import cz.agents.dbtokmlexporter.factory.style.StyleFactory; import cz.agents.dbtokmlexporter.kmlitem.NonInterpolatedTimeKmlItem; import cz.agents.dbtokmlexporter.kmlitem.builder.KmlItemBuilder; import cz.agents.resultsvisio.kml.KmlItem; /** * * @author Marek Cuchy * */ public class PassengerTaxiDriverPairKmlItemBuilder extends KmlItemBuilder { private static final Logger logger = Logger.getLogger(PassengerTaxiDriverPairKmlItemBuilder.class); private final StyleFactory styleFactory = new LineStyleFactory(Color.CYAN, 1); private final GeometryFactory geometryFactory = new LineGeometryFactory(); private final DescriptionFactory descriptionFactory; public PassengerTaxiDriverPairKmlItemBuilder(DatabaseConnection connection, String schemaName, long interval) { super(connection, schemaName, interval, "taxi_passenger_pair.kml"); this.descriptionFactory = new TableColumnsDescriptionFactory("PASSENGER", "TAXI_DRIVER"); } @Override public KmlItem buildKmlItem() throws SQLException { logger.info("Preparing visualizations: " + this.getClass().getSimpleName()); NonInterpolatedTimeKmlItem kmlItem = new NonInterpolatedTimeKmlItem(styleFactory, geometryFactory, 0, false, interval); String sql = " SELECT " + "pas.agentid," + "pas.geom AS p1," + " taxi.geom AS p2," + "pas.from_time, " + "pas.agentid AS passenger, " + "taxi.agentid AS taxi_driver, " + "pas.request_status AS status" + " FROM " + "passengers AS pas INNER JOIN " + "taxi_drivers AS taxi ON pas.current_driver_id = taxi.agentid AND pas.from_time = taxi.from_time " + "AND pas.request_status != 'OUT_OF_VEHICLE' " + "AND pas.request_status != 'OUT_OF_VEHICLE_WITH_DELAYED_ARRIVAL'" + "AND pas.request_status != 'REJECTED'"; ResultSet resultSet = connection.executeQueryWithFetchSize(sql, 10000); while (resultSet.next()) { String id = getRecordId(resultSet); Geometry geom = getGeometry(resultSet, "geom"); Timestamp timestamp = resultSet.getTimestamp("from_time"); kmlItem.addTimeGeometry(id, convertJTSCoordinatesToKmlCoordinates(geom.getCoordinates()), timestamp.getTime(), descriptionFactory.createDescription(resultSet)); } return kmlItem; } @Override public Geometry getGeometry(ResultSet resultSet, String columnName) throws SQLException { Point p1 = (Point) resultSet.getObject("p1"); Point p2 = (Point) resultSet.getObject("p2"); Coordinate[] c = new Coordinate[] { p1.getCoordinate(), p2.getCoordinate() }; return new com.vividsolutions.jts.geom.GeometryFactory().createLineString(c); } private String getRecordId(ResultSet resultSet) throws SQLException { return resultSet.getString("agentid"); } }