Skip to content

Commit 83d58dc

Browse files
authored
Replace system.out and system.err by Java logging framework (#451)
1 parent edbcaf3 commit 83d58dc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+407
-507
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<modelVersion>4.0.0</modelVersion>
1818
<artifactId>neo4j-spatial</artifactId>
1919
<groupId>org.neo4j</groupId>
20-
<version>2025.8-SNAPSHOT</version>
20+
<version>2025.07.1-SNAPSHOT</version>
2121
<name>Neo4j - Spatial Components</name>
2222
<description>Spatial utilities and components for Neo4j</description>
2323
<url>https://neo4j.com/labs/neo4j-spatial/5/</url>

server-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<parent>
2727
<groupId>org.neo4j</groupId>
2828
<artifactId>neo4j-spatial</artifactId>
29-
<version>2025.8-SNAPSHOT</version>
29+
<version>2025.07.1-SNAPSHOT</version>
3030
</parent>
3131

3232
<artifactId>neo4j-spatial-server-plugin</artifactId>

server-plugin/src/main/java/org/geotools/data/neo4j/StyledImageExporter.java

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
import static java.awt.RenderingHints.KEY_TEXT_ANTIALIASING;
2424
import static java.awt.RenderingHints.VALUE_ANTIALIAS_ON;
2525
import static java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_ON;
26-
import static java.util.Arrays.asList;
2726

2827
import java.awt.*;
2928
import java.awt.image.BufferedImage;
3029
import java.io.File;
3130
import java.io.IOException;
32-
import java.util.Collections;
31+
import java.util.logging.Level;
32+
import java.util.logging.Logger;
3333
import javax.imageio.ImageIO;
3434
import org.geotools.api.data.DataStore;
3535
import org.geotools.api.data.SimpleFeatureStore;
@@ -72,6 +72,7 @@
7272

7373
public class StyledImageExporter {
7474

75+
private static final Logger LOGGER = Logger.getLogger(StyledImageExporter.class.getName());
7576
private final Driver driver;
7677
private final String database;
7778
private File exportDir;
@@ -130,20 +131,12 @@ private File checkFile(File file) {
130131
file = file.getAbsoluteFile();
131132
file.getParentFile().mkdirs();
132133
if (file.exists()) {
133-
System.out.println("Deleting previous file: " + file);
134+
LOGGER.info("Deleting previous file: " + file);
134135
file.delete();
135136
}
136137
return file;
137138
}
138139

139-
@SuppressWarnings({"unused"})
140-
private static void debugStore(DataStore store, String[] layerNames) throws IOException {
141-
for (String layerName : layerNames) {
142-
System.out.println(asList(store.getTypeNames()));
143-
System.out.println(Collections.singletonList(store.getSchema(layerName).getAttributeDescriptors()));
144-
}
145-
}
146-
147140
public void saveLayerImage(String[] layerNames) throws IOException {
148141
saveLayerImage(layerNames, null, new File(layerNames[0] + ".png"), null);
149142
}
@@ -213,7 +206,7 @@ public void saveLayerImage(String[] layerNames, String sldFile, File imagefile,
213206
}
214207
names.append(name);
215208
}
216-
System.out.println("Exporting layers '" + names + "' to styled image " + imagefile.getPath());
209+
LOGGER.info("Exporting layers '" + names + "' to styled image " + imagefile.getPath());
217210

218211
Style style = getStyleFromSLDFile(sldFile);
219212

@@ -229,8 +222,8 @@ public void saveLayerImage(String[] layerNames, String sldFile, File imagefile,
229222
if (featureStyle == null) {
230223
featureStyle = createStyleFromGeometry(featureSource.getSchema(), Color.BLUE,
231224
Color.CYAN);
232-
System.out.println(
233-
"Created style from geometry '" + featureSource.getSchema().getGeometryDescriptor()
225+
LOGGER.info("Created style from geometry '" +
226+
featureSource.getSchema().getGeometryDescriptor()
234227
.getType() + "': " + featureStyle);
235228
}
236229

@@ -253,7 +246,7 @@ private static Style getStyleFromSLDFile(String sldFile) {
253246
if (sldFile != null) {
254247
style = createStyleFromSLD(sldFile);
255248
if (style != null) {
256-
System.out.println("Created style from sldFile '" + sldFile + "': " + style);
249+
LOGGER.info("Created style from sldFile '" + sldFile + "': " + style);
257250
}
258251
}
259252
return style;
@@ -293,7 +286,7 @@ private static Style createStyleFromSLD(String sldFile) {
293286
Style[] style = stylereader.readXML();
294287
return style[0];
295288
} catch (Exception e) {
296-
System.err.println("Failed to read style from '" + sldFile + "': " + e.getMessage());
289+
LOGGER.warning("Failed to read style from '" + sldFile + "': " + e.getMessage());
297290
}
298291
return null;
299292
}
@@ -332,7 +325,6 @@ public static Style createStyleFromGeometry(FeatureType schema, Color strokeColo
332325
style.featureTypeStyles().addAll(createPolygonStyle(strokeColor, fillColor).featureTypeStyles());
333326
style.featureTypeStyles().addAll(createLineStyle(strokeColor).featureTypeStyles());
334327
style.featureTypeStyles().addAll(createPointStyle(strokeColor, fillColor).featureTypeStyles());
335-
// System.out.println("Created Geometry Style: "+style);
336328
return style;
337329
}
338330

@@ -370,14 +362,12 @@ public static Style createPolygonStyle(Color strokeColor, Color fillColor, doubl
370362
try {
371363
rule.setFilter(ECQL.toFilter("geometryType(the_geom)='Polygon' or geometryType(the_geom)='MultiPoligon'"));
372364
} catch (CQLException e) {
373-
// TODO
374-
e.printStackTrace();
365+
LOGGER.log(Level.WARNING, "", e);
375366
}
376367

377368
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(rule);
378369
Style style = styleFactory.createStyle();
379370
style.featureTypeStyles().add(fts);
380-
// System.out.println("Created Polygon Style: " + style);
381371

382372
return style;
383373
}
@@ -402,14 +392,12 @@ private static Style createLineStyle(Color strokeColor) {
402392
rule.setFilter(ECQL.toFilter(
403393
"geometryType(the_geom)='LineString' or geometryType(the_geom)='LinearRing' or geometryType(the_geom)='MultiLineString'"));
404394
} catch (CQLException e) {
405-
// TODO
406-
e.printStackTrace();
395+
LOGGER.log(Level.WARNING, "", e);
407396
}
408397

409398
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(rule);
410399
Style style = styleFactory.createStyle();
411400
style.featureTypeStyles().add(fts);
412-
// System.out.println("Created Line Style: "+style);
413401

414402
return style;
415403
}
@@ -439,21 +427,19 @@ private static Style createPointStyle(Color strokeColor, Color fillColor) {
439427
try {
440428
rule.setFilter(ECQL.toFilter("geometryType(the_geom)='Point' or geometryType(the_geom)='MultiPoint'"));
441429
} catch (CQLException e) {
442-
// TODO
443-
e.printStackTrace();
430+
LOGGER.log(Level.WARNING, "", e);
444431
}
445432

446433
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(rule);
447434
Style style = styleFactory.createStyle();
448435
style.featureTypeStyles().add(fts);
449-
// System.out.println("Created Point Style: " + style);
450436

451437
return style;
452438
}
453439

454440
public static void main(String[] args) throws IOException {
455441
if (args.length < 6) {
456-
System.err.println(
442+
LOGGER.warning(
457443
"Too few arguments. Provide: <uri> <database> <user> <password> <exportdir> <stylefile> <zoom layer> <layers..>");
458444
System.exit(1);
459445
}
@@ -464,7 +450,7 @@ public static void main(String[] args) throws IOException {
464450
String exportdir = args[4];
465451
String stylefile = args[5];
466452
double zoom = Double.parseDouble(args[6]);
467-
var driver = GraphDatabase.driver(uri, AuthTokens.basic(user,password));
453+
var driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password));
468454

469455
StyledImageExporter imageExporter = new StyledImageExporter(driver, database);
470456
imageExporter.setExportDir(exportdir);

server-plugin/src/main/java/org/neo4j/gis/spatial/DynamicLayer.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.LinkedHashMap;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.logging.Logger;
2829
import org.geotools.filter.text.cql2.CQLException;
2930
import org.geotools.filter.text.ecql.ECQL;
3031
import org.neo4j.graphdb.Direction;
@@ -53,6 +54,7 @@
5354
*/
5455
public class DynamicLayer extends EditableLayerImpl {
5556

57+
private static final Logger LOGGER = Logger.getLogger(DynamicLayer.class.getName());
5658
private LinkedHashMap<String, Layer> layers;
5759

5860
private synchronized Map<String, Layer> getLayerMap(Transaction tx) {
@@ -84,10 +86,10 @@ protected boolean removeLayerConfig(Transaction tx, String name) {
8486
}
8587
}
8688
if (layer == null) {
87-
System.out.println("Dynamic layer not found: " + name);
89+
LOGGER.info("Dynamic layer not found: " + name);
8890
return false;
8991
}
90-
System.out.println("Layer is not dynamic and cannot be deleted: " + name);
92+
LOGGER.warning("Layer is not dynamic and cannot be deleted: " + name);
9193
return false;
9294
}
9395

@@ -155,12 +157,12 @@ public DynamicLayerConfig addLayerConfig(Transaction tx, String name, int type,
155157
if (layer != null) {
156158
if (layer instanceof DynamicLayerConfig config) {
157159
if (config.getGeometryType(tx) != type || !config.getQuery().equals(query)) {
158-
System.err.println("Existing LayerConfig with different geometry type or query: " + config);
160+
LOGGER.warning("Existing LayerConfig with different geometry type or query: " + config);
159161
return null;
160162
}
161163
return config;
162164
}
163-
System.err.println("Existing Layer has same name as requested LayerConfig: " + layer.getName());
165+
LOGGER.warning("Existing Layer has same name as requested LayerConfig: " + layer.getName());
164166
return null;
165167
}
166168
synchronized (this) {
@@ -192,10 +194,10 @@ public DynamicLayerConfig restrictLayerProperties(Transaction tx, String name, S
192194
}
193195
return config;
194196
}
195-
System.err.println("Existing Layer has same name as requested LayerConfig: " + layer.getName());
197+
LOGGER.warning("Existing Layer has same name as requested LayerConfig: " + layer.getName());
196198
return null;
197199
}
198-
System.err.println("No such layer: " + name);
200+
LOGGER.warning("No such layer: " + name);
199201
return null;
200202
}
201203

server-plugin/src/main/java/org/neo4j/gis/spatial/DynamicLayerConfig.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.LinkedHashMap;
2424
import java.util.Map;
2525
import java.util.TreeMap;
26+
import java.util.logging.Logger;
2627
import javax.annotation.Nonnull;
2728
import org.geotools.api.referencing.crs.CoordinateReferenceSystem;
2829
import org.geotools.filter.text.cql2.CQLException;
@@ -40,6 +41,7 @@
4041

4142
public class DynamicLayerConfig implements Layer, Constants {
4243

44+
private static final Logger LOGGER = Logger.getLogger(DynamicLayerConfig.class.getName());
4345
private final DynamicLayer parent;
4446
private final String name;
4547
private final int geometryType;
@@ -167,19 +169,18 @@ public int getNodeCount() {
167169
*/
168170
public void restrictLayerProperties(Transaction tx) {
169171
if (propertyNames != null && propertyNames.length > 0) {
170-
System.out.println("Restricted property names already exists - will be overwritten");
172+
LOGGER.fine("Restricted property names already exists - will be overwritten");
171173
}
172-
System.out.println(
173-
"Before property scan we have " + getExtraProperties(tx).size() + " known attributes for layer "
174-
+ getName());
174+
LOGGER.fine("Before property scan we have " + getExtraProperties(tx).size() + " known attributes for layer "
175+
+ getName());
175176

176177
PropertyUsageSearch search = new PropertyUsageSearch(this);
177178
getIndex().searchIndex(tx, search).count();
178179
setExtraPropertyNames(tx, search.getNames());
179180

180-
System.out.println(
181-
"After property scan of " + search.getNodeCount() + " nodes, we have " + getExtraProperties(
182-
tx).size() + " known attributes for layer " + getName());
181+
LOGGER.fine(
182+
"After property scan of " + search.getNodeCount() + " nodes, we have " + getExtraProperties(tx).size()
183+
+ " known attributes for layer " + getName());
183184
}
184185

185186
public Node configNode(Transaction tx) {

server-plugin/src/main/java/org/neo4j/gis/spatial/ConsoleListener.java renamed to server-plugin/src/main/java/org/neo4j/gis/spatial/LogListener.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,17 @@
1919
*/
2020
package org.neo4j.gis.spatial;
2121

22-
import java.io.PrintStream;
22+
import java.util.logging.Logger;
2323
import org.neo4j.gis.spatial.rtree.Listener;
2424

25+
public class LogListener implements Listener {
2526

26-
/**
27-
* This listener simply logs progress to System.out.
28-
*
29-
* @author Craig Taverner
30-
*/
31-
public class ConsoleListener implements Listener {
32-
33-
private final PrintStream out;
27+
private final Logger logger;
3428
private int total = 0;
3529
private int current = 0;
3630

37-
public ConsoleListener() {
38-
this(System.out);
39-
}
40-
41-
public ConsoleListener(PrintStream out) {
42-
this.out = out;
31+
public LogListener(Logger logger) {
32+
this.logger = logger;
4333
}
4434

4535
@Override
@@ -52,12 +42,12 @@ public void begin(int unitsOfWork) {
5242
public void worked(int workedSinceLastNotification) {
5343
current += workedSinceLastNotification;
5444
if (total < 1) {
55-
out.println("Completed " + current);
45+
logger.info("Completed " + current);
5646
} else if (total == 100) {
57-
out.println(current + "%: completed");
47+
logger.info(current + "%: completed");
5848
} else {
5949
int perc = (int) (100.0 * current / total);
60-
out.println(perc + "%: completed " + current + " / " + total);
50+
logger.fine(perc + "%: completed " + current + " / " + total);
6151
}
6252
}
6353

server-plugin/src/main/java/org/neo4j/gis/spatial/ShapefileExporter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.net.URL;
2525
import java.util.HashMap;
2626
import java.util.Map;
27+
import java.util.logging.Logger;
2728
import org.geotools.api.data.SimpleFeatureStore;
2829
import org.geotools.api.feature.simple.SimpleFeatureType;
2930
import org.geotools.api.feature.type.GeometryDescriptor;
@@ -35,6 +36,7 @@
3536

3637
public class ShapefileExporter {
3738

39+
private static final Logger LOGGER = Logger.getLogger(ShapefileExporter.class.getName());
3840
final Neo4jSpatialDataStore neo4jDataStore;
3941
File exportDir;
4042

@@ -47,6 +49,7 @@ public ShapefileExporter(Neo4jSpatialDataStore dataStore) {
4749
neo4jDataStore = dataStore;
4850
exportDir = null;
4951
}
52+
5053
public void setExportDir(String dir) {
5154
exportDir = (dir == null || dir.isEmpty()) ? null : (new File(dir)).getAbsoluteFile();
5255
}
@@ -67,7 +70,7 @@ private File checkFile(File file) {
6770
file = file.getAbsoluteFile();
6871
file.getParentFile().mkdirs();
6972
if (file.exists()) {
70-
System.out.println("Deleting previous file: " + file);
73+
LOGGER.info("Deleting previous file: " + file);
7174
file.delete();
7275
}
7376
return file;

0 commit comments

Comments
 (0)