package cz.agents.dbtokmlexporter.darptestbed.kmlitembuilder; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import org.apache.log4j.Logger; import cz.agents.agentpolis.tools.geovisio.database.connection.DatabaseConnection; import cz.agents.dbtokmlexporter.kmlitem.ScreenOverlayTimeKmlItem; import cz.agents.dbtokmlexporter.kmlitem.builder.KmlItemBuilder; import cz.agents.resultsvisio.kml.KmlItem; /** * *@author Marek Cuchy * */ public class RequestNumbersScreenOverlayKmlItemBuilder extends KmlItemBuilder { private static final Logger logger = Logger.getLogger(RequestNumbersScreenOverlayKmlItemBuilder.class); public RequestNumbersScreenOverlayKmlItemBuilder(DatabaseConnection connection, String schemaName, long interval, String fileName) { super(connection, schemaName, interval, fileName); } public RequestNumbersScreenOverlayKmlItemBuilder(DatabaseConnection connection, String schemaName, long interval) { super(connection, schemaName, interval, "request_screenoverlay.kml"); } @Override public KmlItem buildKmlItem() throws SQLException { logger.info("Preparing visualizations: "+this.getClass().getSimpleName()); ScreenOverlayTimeKmlItem kmlItem = new ScreenOverlayTimeKmlItem(interval); kmlItem.addTextOverlay(0, "Active passengers: " + 0 + "\nSuccessful/failed requests: " + 0 + "/" + 0); String sql = "SELECT time.from_time AS time, succ.c AS success, failed.c AS failed, active.c AS active " + "FROM " + "(SELECT DISTINCT from_time FROM " + schemaName + ".passengers ORDER BY from_time) AS time " + "LEFT JOIN " + "(SELECT from_time,count(*) as c FROM " + schemaName + ".passengers WHERE request_status = 'OUT_OF_VEHICLE' GROUP BY from_time ORDER BY from_time) AS succ " + "ON time.from_time = succ.from_time " + " LEFT JOIN " + "(SELECT from_time,count(*) as c FROM " + schemaName + ".passengers WHERE request_status = 'OUT_OF_VEHICLE_WITH_DELAYED_ARRIVAL' OR request_status = 'REJECTED' GROUP BY from_time ORDER BY from_time) AS failed " + "ON time.from_time = failed.from_time " + " LEFT JOIN " + "(SELECT from_time, count(*) as c FROM " + schemaName + ".passengers WHERE from_time BETWEEN request_departure_min AND request_arrival_max GROUP BY from_time ORDER BY from_time) AS active " + "ON " + "time.from_time = active.from_time"; ResultSet resultSet = connection.executeQuery(sql); while (resultSet.next()) { Timestamp timestamp = resultSet.getTimestamp("time"); int success = resultSet.getInt("success"); int failed = resultSet.getInt("failed"); int active = resultSet.getInt("active"); kmlItem.addTextOverlay(timestamp.getTime(), "Active passengers: " + active + "\nSuccessful/failed requests: " + success + "/" + failed); } //logger.info(this.getClass().getSimpleName()+" finishes building."); return kmlItem; } }