@@ -95,21 +95,39 @@ public ArrayList<ImportedShape> getImportedShapesFromTable(String tableName) thr
9595
9696 private ImportedShape getImportedShapeForId (String tableName , int id ) throws SQLException
9797 {
98- final String sql = String .format ("SELECT name, start_date, end_date FROM \" %s\" .\" %s\" WHERE gid = ?" , SCHEME_TEMP , tableName );
98+
99+
100+ //adding start_day, start_month, start_year
101+ final String sql_add_cols = String .format ("ALTER TABLE \" %s\" .\" %s\" ADD COLUMN IF NOT EXISTS start_day integer, " +
102+ "ADD COLUMN IF NOT EXISTS start_month integer, ADD COLUMN IF NOT EXISTS start_year integer, " +
103+ "ADD COLUMN IF NOT EXISTS end_day integer, ADD COLUMN IF NOT EXISTS end_month integer, " +
104+ "ADD COLUMN IF NOT EXISTS end_year integer" , SCHEME_TEMP , tableName );
105+ PreparedStatement ps_cols = connection .prepareStatement (sql_add_cols );
106+ ps_cols .executeUpdate ();
107+
108+
109+ final String sql = String .format ("SELECT name, start_date, start_day, start_month, start_year, end_date, end_day, " +
110+ "end_month, end_year FROM \" %s\" .\" %s\" WHERE gid = ?" , SCHEME_TEMP , tableName );
99111 PreparedStatement ps = connection .prepareStatement (sql );
100112 ps .setInt (1 , id );
101113
102114 try (ResultSet rs = ps .executeQuery ())
103115 {
104- if (!rs .next ())
105- return null ;
116+ if (!rs .next ()) return null ;
106117
107118 String name = rs .getString (1 );
108119 Date validSince = rs .getDate (2 );
109- Date validUntil = rs .getDate (3 );
120+ int columnValidSinceDay = rs .getInt (3 );
121+ int columnValidSinceMonth = rs .getInt (4 );
122+ int columnValidSinceYear = rs .getInt (5 );
123+ Date validUntil = rs .getDate (6 );
124+ int columnValidUntilDay = rs .getInt (7 );
125+ int columnValidUntilMonth = rs .getInt (8 );
126+ int columnValidUntilYear = rs .getInt (9 );
110127 ArrayList <Polygon > polygonList = getPolygonsForId (tableName , id );
111128 Polygon [] polygons = getPolygonsForId (tableName , id ).toArray (new Polygon [polygonList .size ()]);
112- return new ImportedShape (id , name , validSince , validUntil , polygons );
129+ return new ImportedShape (id , name , validSince , columnValidSinceDay , columnValidSinceMonth , columnValidSinceYear ,
130+ validUntil , columnValidUntilDay , columnValidUntilMonth , columnValidUntilYear , polygons );
113131 }
114132 /*
115133 final String sql = String.format("SELECT * FROM \"%s\".\"%s\" WHERE gid = ?", SCHEME_TEMP, tableName);
@@ -133,7 +151,9 @@ private ImportedShape getImportedShapeForId(String tableName, int id) throws SQL
133151
134152 private ImportedShape getImportedShapeFromCache (String tableName , int id ) throws SQLException
135153 {
136- final String sql = String .format ("SELECT \" name\" , \" validSince\" , \" validUntil\" , \" geom\" , ST_ASGEOJSON(geom) FROM \" %s\" .\" %s\" WHERE gid = ?" , SCHEME_CACHE , tableName );
154+ final String sql = String .format ("SELECT \" name\" , \" validSince\" , \" validSinceDay\" , \" validSinceMonth\" , " +
155+ "\" validSinceYear\" ,\" validUntil\" , \" validUntilDay\" , \" validUntilMonth\" , \" validUntilYear\" , " +
156+ "\" geom\" , ST_ASGEOJSON(geom) FROM \" %s\" .\" %s\" WHERE gid = ?" , SCHEME_CACHE , tableName );
137157 PreparedStatement ps = connection .prepareStatement (sql );
138158 ps .setInt (1 , id );
139159
@@ -144,20 +164,28 @@ private ImportedShape getImportedShapeFromCache(String tableName, int id) throws
144164
145165 String name = rs .getString (1 );
146166 Date validSince = rs .getDate (2 );
147- Date validUntil = rs .getDate (3 );
148- PGgeometry geom = (PGgeometry ) rs .getObject (4 );
167+ int columnValidSinceDay = rs .getInt (3 );
168+ int columnValidSinceMonth = rs .getInt (4 );
169+ int columnValidSinceYear = rs .getInt (5 );
170+ Date validUntil = rs .getDate (6 );
171+ int columnValidUntilDay = rs .getInt (7 );
172+ int columnValidUntilMonth = rs .getInt (8 );
173+ int columnValidUntilYear = rs .getInt (9 );
174+ PGgeometry geom = (PGgeometry ) rs .getObject (10 );
149175 MultiPolygon multiPolygon = new MultiPolygon (geom .getGeometry ().getValue ());
150176 Polygon [] polygons = multiPolygon .getPolygons ();
151- ImportedShape is = new ImportedShape (id , name , validSince , validUntil , polygons );
152- is .setGeoJson (rs .getString (5 ));
177+ ImportedShape is = new ImportedShape (id , name , validSince , columnValidSinceDay , columnValidSinceMonth , columnValidSinceYear ,
178+ validUntil , columnValidUntilDay , columnValidUntilMonth , columnValidUntilYear , polygons );
179+ is .setGeoJson (rs .getString (11 ));
153180 return is ;
154181 }
155182 }
156183
157184 private ArrayList <Polygon > getPolygonsForId (String tableName , int id ) throws SQLException
158185 {
159186 ArrayList <Polygon > polygons = new ArrayList <>();
160- final String sql = String .format ("SELECT ST_GeometryN(geom, generate_series(1, ST_NumGeometries(geom))) FROM %s.\" %s\" WHERE gid = ?" , SCHEME_TEMP , tableName );
187+ final String sql = String .format ("SELECT ST_GeometryN(geom, generate_series(1, ST_NumGeometries(geom))) " +
188+ " FROM %s.\" %s\" WHERE gid = ?" , SCHEME_TEMP , tableName );
161189 PreparedStatement stmtPolygons = connection .prepareStatement (sql );
162190 stmtPolygons .setInt (1 , id );
163191
@@ -207,7 +235,8 @@ private Geoobject getGeoobjectFromShape(ImportedShape importedShape)
207235 return geoobject ;
208236 }
209237
210- private ArrayList <GeoobjectGeometry > getGeoobjectGeometries (ImportedShape importedShape , Geoobject geoobject , ArrayList <OHDMPolygon > OHDMPolygons )
238+ private ArrayList <GeoobjectGeometry > getGeoobjectGeometries (ImportedShape importedShape , Geoobject geoobject ,
239+ ArrayList <OHDMPolygon > OHDMPolygons )
211240 {
212241 ArrayList <GeoobjectGeometry > geoobjectGeometries = new ArrayList <>();
213242
@@ -275,7 +304,9 @@ private void insertGeoobjectGeometries(ArrayList<GeoobjectGeometry> geoobjectGeo
275304
276305 private void insertGeoobjectGeometry (GeoobjectGeometry geoobjectGeometry ) throws SQLException
277306 {
278- final String sql = String .format ("INSERT INTO %s.\" geoobject_geometry\" (id_target, type_target, id_geoobject_source, classification_id, valid_since, valid_until, source_user_id) VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING id" , SCHEME_TEST );
307+ final String sql = String .format ("INSERT INTO %s.\" geoobject_geometry\" (id_target, type_target, id_geoobject_source, " +
308+ "classification_id, valid_since, valid_since_day, valid_since_month, valid_since_year, valid_until, " +
309+ "valid_until_day, valid_until_month, valid_until_year, source_user_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id" , SCHEME_TEST );
279310 PreparedStatement stmt = connection .prepareStatement (sql );
280311 stmt .setLong (1 , geoobjectGeometry .getIdTarget ());
281312 stmt .setLong (2 , geoobjectGeometry .getIdTargetType ());
@@ -287,12 +318,43 @@ private void insertGeoobjectGeometry(GeoobjectGeometry geoobjectGeometry) throws
287318 else
288319 stmt .setNull (5 , Types .DATE );
289320
321+ if (geoobjectGeometry .getValidSinceDay () > 0 )
322+ stmt .setInt (6 , geoobjectGeometry .getValidSinceDay ());
323+ else
324+ stmt .setNull (6 , Types .INTEGER );
325+
326+ if (geoobjectGeometry .getValidSinceMonth () > 0 )
327+ stmt .setInt (7 , geoobjectGeometry .getValidSinceMonth ());
328+ else
329+ stmt .setNull (7 , Types .INTEGER );
330+
331+ if (geoobjectGeometry .getValidSinceYear () > 0 )
332+ stmt .setInt (8 ,geoobjectGeometry .getValidSinceYear ());
333+ else
334+ stmt .setNull (8 , Types .INTEGER );
335+
336+
290337 if (geoobjectGeometry .getValidUntil () != null )
291- stmt .setDate (6 , new java .sql .Date (geoobjectGeometry .getValidUntil ().getTime ()));
338+ stmt .setDate (9 , new java .sql .Date (geoobjectGeometry .getValidUntil ().getTime ()));
292339 else
293- stmt .setDate (6 , new Date (0 ));
340+ stmt .setDate (9 , new Date (0 ));
294341
295- stmt .setLong (7 , geoobjectGeometry .getIdSourceUser ());
342+ if (geoobjectGeometry .getValidUntilDay () > 0 )
343+ stmt .setInt (10 , geoobjectGeometry .getValidUntilDay ());
344+ else
345+ stmt .setNull (10 , Types .INTEGER );
346+
347+ if (geoobjectGeometry .getValidUntilMonth () > 0 )
348+ stmt .setInt (11 , geoobjectGeometry .getValidUntilMonth ());
349+ else
350+ stmt .setNull (11 , Types .INTEGER );
351+
352+ if (geoobjectGeometry .getValidUntilYear () > 0 )
353+ stmt .setInt (12 ,geoobjectGeometry .getValidUntilYear ());
354+ else
355+ stmt .setNull (12 , Types .INTEGER );
356+
357+ stmt .setLong (13 , geoobjectGeometry .getIdSourceUser ());
296358
297359 if (stmt .execute ())
298360 {
@@ -359,7 +421,13 @@ private boolean createCacheTable(String tableName) throws Exception
359421 " gid SERIAL,\n " +
360422 " name character varying(254),\n " +
361423 " \" validSince\" date,\n " +
424+ " \" validSinceDay\" integer,\n " +
425+ " \" validSinceMonth\" integer,\n " +
426+ " \" validSinceYear\" integer,\n " +
362427 " \" validUntil\" date,\n " +
428+ " \" validUntilDay\" integer,\n " +
429+ " \" validUntilMonth\" integer,\n " +
430+ " \" validUntilYear\" integer,\n " +
363431 " \" classId\" integer,\n " +
364432 " username character varying(254),\n " +
365433 " geom geometry,\n " +
@@ -379,7 +447,10 @@ private boolean createCacheTable(String tableName) throws Exception
379447
380448 private void insertShapeIntoCache (String tableName , ImportedShape shape , String userName ) throws Exception
381449 {
382- final String sql = String .format ("INSERT INTO \" " +SCHEME_CACHE +"\" .\" %s\" (\" name\" , \" validSince\" , \" validUntil\" , \" classId\" , \" username\" , \" geom\" ) VALUES(?, ?, ?, ?, ?, ?)" , tableName );
450+ final String sql = String .format ("INSERT INTO \" " +SCHEME_CACHE +"\" .\" %s\" (\" name\" , " +
451+ "\" validSince\" ,\" validSinceDay\" ,\" validSinceMonth\" ,\" validSinceYear\" ," +
452+ " \" validUntil\" ,\" validUntilDay\" ,\" validUntilMonth\" ,\" validUntilYear\" ," +
453+ " \" classId\" , \" username\" , \" geom\" ) VALUES(?, ?, ?, ?, ?,?,?,?,?,?,?, ?)" , tableName );
383454 PreparedStatement ps = connection .prepareStatement (sql );
384455
385456 if (shape .getName () != null )
@@ -390,30 +461,63 @@ private void insertShapeIntoCache(String tableName, ImportedShape shape, String
390461 ps .setDate (2 , new java .sql .Date (shape .getValidSince ().getTime ()));
391462 else
392463 ps .setNull (2 , Types .DATE );
464+ if (shape .getValidSinceDay () >0 )
465+ ps .setInt (3 , shape .getValidSinceDay ());
466+ else
467+ ps .setNull (3 , Types .INTEGER );
468+ if (shape .getValidSinceMonth () >0 )
469+ ps .setInt (4 , shape .getValidSinceMonth ());
470+ else
471+ ps .setNull (4 , Types .INTEGER );
472+ if (shape .getValidSinceYear () >0 )
473+ ps .setInt (5 , shape .getValidSinceYear () );
474+ else
475+ ps .setNull (5 , Types .INTEGER );
393476
394477 if (shape .getValidUntil () != null )
395- ps .setDate (3 , new java .sql .Date (shape .getValidUntil ().getTime ()));
478+ ps .setDate (6 , new java .sql .Date (shape .getValidUntil ().getTime ()));
479+ else
480+ ps .setNull (6 , Types .DATE );
481+ if (shape .getValidUntilDay () >0 )
482+ ps .setInt (7 , shape .getValidUntilDay () );
483+ else
484+ ps .setNull (7 , Types .INTEGER );
485+ if (shape .getValidUntilMonth ()>0 )
486+ ps .setInt (8 , shape .getValidUntilMonth () );
487+ else
488+ ps .setNull (8 , Types .INTEGER );
489+ if (shape .getValidUntilYear () >0 )
490+ ps .setInt (9 , shape .getValidUntilYear () );
396491 else
397- ps .setNull (3 , Types .DATE );
492+ ps .setNull (9 , Types .INTEGER );
398493
399- ps .setInt (4 , shape .getClassificationId ());
400- ps .setString (5 , userName );
401- ps .setObject (6 , new PGgeometry (new MultiPolygon (shape .getPolygons ())));
494+ ps .setInt (10 , shape .getClassificationId ());
495+ ps .setString (11 , userName );
496+ ps .setObject (12 , new PGgeometry (new MultiPolygon (shape .getPolygons ())));
402497
403498 ps .execute ();
404499 }
405500
406501 public void updateImportedShape (ImportedShape updatedImportedShape , String table ) throws Exception
407502 {
408- final String sql = String .format ("UPDATE \" " +SCHEME_CACHE +"\" .\" %s\" SET \" name\" = ?, \" validSince\" = ?, \" validUntil\" = ?, \" classId\" = ? WHERE gid = ?" , table );
503+ final String sql = String .format ("UPDATE \" " +SCHEME_CACHE +"\" .\" %s\" SET \" name\" = ?, " +
504+ "\" validSince\" = ?,\" validSinceDay\" = ?,\" validSinceMonth\" = ?,\" validSinceYear\" = ?," +
505+ "\" validUntil\" = ?,\" validUntilDay\" = ?,\" validUntilMonth\" = ?,\" validUntilYear\" = ?," +
506+ "\" classId\" = ? WHERE gid = ?" , table );
409507
410508 PreparedStatement ps = connection .prepareStatement (sql );
411509
412510 ps .setString (1 , updatedImportedShape .getName ());
413511 ps .setDate (2 , new java .sql .Date (updatedImportedShape .getValidSince ().getTime ()));
414- ps .setDate (3 , new java .sql .Date (updatedImportedShape .getValidUntil ().getTime ()));
415- ps .setInt (4 , updatedImportedShape .getClassificationId ());
416- ps .setInt (5 , updatedImportedShape .getId ());
512+ ps .setInt (3 , updatedImportedShape .getValidSinceDay ());
513+ ps .setInt (4 , updatedImportedShape .getValidSinceMonth ());
514+ ps .setInt (5 , updatedImportedShape .getValidSinceYear ());
515+ ps .setDate (6 , new java .sql .Date (updatedImportedShape .getValidUntil ().getTime ()));
516+ ps .setInt (7 , updatedImportedShape .getValidUntilDay ());
517+ ps .setInt (8 , updatedImportedShape .getValidUntilMonth ());
518+ ps .setInt (9 , updatedImportedShape .getValidUntilYear ());
519+ ps .setInt (10 , updatedImportedShape .getClassificationId ());
520+ ps .setInt (11 , updatedImportedShape .getId ());
417521
418522 ps .executeUpdate ();
419523 }
0 commit comments