package jeql.command.io.kml; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import jeql.api.row.Row; import jeql.api.row.RowSchema; import jeql.api.row.SchemaUtil; public class KMLUtil { static String intToDateString(int i) { String s = Integer.toString(i); if (i <= 9999) { return s; } if (s.length() < 8) return s.substring(0, 4); // return yyyy-mm-dd return s.substring(0, 4) + "-" + s.substring(4, 2) + "-" + s.substring(6, 2); } public static String KML_DATE_PATTERN = "yyyy-MM-dd"; public static String KML_DATETIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss'Z'"; public static DateFormat KML_DATETIME_FORMAT = new SimpleDateFormat(KML_DATETIME_PATTERN); static String formatDate(Object o) { if (o instanceof Date) { String dateStr = KML_DATETIME_FORMAT.format((Date) o); // return only date if HMS is zero if (dateStr.endsWith("T00:00:00Z")) return dateStr.substring(0, 10); return dateStr; } // TODO: allow numeric dates of form 2008 or 20080101 else if (o instanceof Number) { int idate = ((Number) o).intValue(); return intToDateString(idate); } return o.toString(); } public static boolean toBooleanLoose(RowSchema schema, String colName, Row row, boolean defaultVal) { int index = schema.getColIndex(colName); if (index < 0) return defaultVal; Object oval = row.getValue(index); boolean val = false; if (oval instanceof Boolean) { boolean bval = ((Boolean) oval).booleanValue(); val = bval; } if (oval instanceof String) { String sval = (String) oval; val = false; if (sval.equalsIgnoreCase("y")) val = true; if (sval.equalsIgnoreCase("true")) val = true; if (sval.equalsIgnoreCase("1")) val = true; } if (oval instanceof Integer) { int ival = ((Integer) oval).intValue(); val = ival > 0; } return val; } static Geometry geomWithLabelPoint(Geometry g) { GeometryFactory fact = g.getFactory(); Geometry labelPoint = g.getInteriorPoint(); Geometry[] gs = new Geometry[] { labelPoint, g }; return fact.createGeometryCollection(gs); } static Geometry getGeometry(RowSchema rowSchema, Row row) { int index = rowSchema.getColIndexIgnoreCase(KMLCol.KML_GEOMETRY); // if no named geometry, use any geometry column if (index < 0) { index = SchemaUtil.getColumnWithType(rowSchema, Geometry.class); } //---- allow no geometry, for descriptive placemarks if (index < 0) return null; //throw new ExecutionException("no geometry column in KML data table"); Geometry val = (Geometry) row.getValue(index); return val; } }