com.vividsolutions.jts.util.Debug Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of JTSplus Show documentation
Show all versions of JTSplus Show documentation
JTS Topology Suite 1.14 with additional functions for GeoSpark
/*
* The JTS Topology Suite is a collection of Java classes that
* implement the fundamental operations required to validate a given
* geo-spatial data set to a known topological specification.
*
* Copyright (C) 2001 Vivid Solutions
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* For more information, contact:
*
* Vivid Solutions
* Suite #1A
* 2328 Government Street
* Victoria BC V8T 5G5
* Canada
*
* (250)385-6040
* www.vividsolutions.com
*/
package com.vividsolutions.jts.util;
/**
*@version 1.7
*/
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import com.vividsolutions.jts.geom.*;
/**
* Provides routines to simplify and localize debugging output.
* Debugging is controlled via a Java system property value.
* If the system property with the name given in
* DEBUG_PROPERTY_NAME (currently "jts.debug") has the value
* "on" or "true" debugging is enabled.
* Otherwise, debugging is disabled.
* The system property can be set by specifying the following JVM option:
*
* -Djts.debug=on
*
*
*
* @version 1.7
*/
public class Debug {
public static String DEBUG_PROPERTY_NAME = "jts.debug";
public static String DEBUG_PROPERTY_VALUE_ON = "on";
public static String DEBUG_PROPERTY_VALUE_TRUE = "true";
private static boolean debugOn = false;
static {
String debugValue = System.getProperty(DEBUG_PROPERTY_NAME);
if (debugValue != null) {
if (debugValue.equalsIgnoreCase(DEBUG_PROPERTY_VALUE_ON)
|| debugValue.equalsIgnoreCase(DEBUG_PROPERTY_VALUE_TRUE) )
debugOn = true;
}
}
private static Stopwatch stopwatch = new Stopwatch();
private static long lastTimePrinted;
/**
* Prints the status of debugging to System.out
*
* @param args the cmd-line arguments (no arguments are required)
*/
public static void main(String[] args)
{
System.out.println("JTS Debugging is " +
(debugOn ? "ON" : "OFF") );
}
private static final Debug debug = new Debug();
private static final GeometryFactory fact = new GeometryFactory();
private static final String DEBUG_LINE_TAG = "D! ";
private PrintStream out;
private Class[] printArgs;
private Object watchObj = null;
private Object[] args = new Object[1];
public static boolean isDebugging() { return debugOn; }
public static LineString toLine(Coordinate p0, Coordinate p1) {
return fact.createLineString(new Coordinate[] { p0, p1 });
}
public static LineString toLine(Coordinate p0, Coordinate p1, Coordinate p2) {
return fact.createLineString(new Coordinate[] { p0, p1, p2});
}
public static LineString toLine(Coordinate p0, Coordinate p1, Coordinate p2, Coordinate p3) {
return fact.createLineString(new Coordinate[] { p0, p1, p2, p3});
}
public static void print(String str) {
if (!debugOn) {
return;
}
debug.instancePrint(str);
}
/*
public static void println(String str) {
if (! debugOn) return;
debug.instancePrint(str);
debug.println();
}
*/
public static void print(Object obj) {
if (! debugOn) return;
debug.instancePrint(obj);
}
public static void print(boolean isTrue, Object obj) {
if (! debugOn) return;
if (! isTrue) return;
debug.instancePrint(obj);
}
public static void println(Object obj) {
if (!debugOn) {
return;
}
debug.instancePrint(obj);
debug.println();
}
public static void resetTime()
{
stopwatch.reset();
lastTimePrinted = stopwatch.getTime();
}
public static void printTime(String tag)
{
if (!debugOn) {
return;
}
long time = stopwatch.getTime();
long elapsedTime = time - lastTimePrinted;
debug.instancePrint(
formatField(Stopwatch.getTimeString(time), 10)
+ " (" + formatField(Stopwatch.getTimeString(elapsedTime), 10) + " ) "
+ tag);
debug.println();
lastTimePrinted = time;
}
private static String formatField(String s, int fieldLen)
{
int nPad = fieldLen - s.length();
if (nPad <= 0) return s;
String padStr = spaces(nPad) + s;
return padStr.substring(padStr.length() - fieldLen);
}
private static String spaces(int n)
{
char[] ch = new char[n];
for (int i = 0; i < n; i++) {
ch[i] = ' ';
}
return new String(ch);
}
public static boolean equals(Coordinate c1, Coordinate c2, double tolerance)
{
return c1.distance(c2) <= tolerance;
}
/**
* Adds an object to be watched.
* A watched object can be printed out at any time.
*
* Currently only supports one watched object at a time.
* @param obj
*/
public static void addWatch(Object obj) {
debug.instanceAddWatch(obj);
}
public static void printWatch() {
debug.instancePrintWatch();
}
public static void printIfWatch(Object obj) {
debug.instancePrintIfWatch(obj);
}
public static void breakIf(boolean cond)
{
if (cond) doBreak();
}
public static void breakIfEqual(Object o1, Object o2)
{
if (o1.equals(o2)) doBreak();
}
public static void breakIfEqual(Coordinate p0, Coordinate p1, double tolerance)
{
if (p0.distance(p1) <= tolerance) doBreak();
}
private static void doBreak()
{
// Put breakpoint on following statement to break here
return;
}
public static boolean hasSegment(Geometry geom, Coordinate p0, Coordinate p1)
{
SegmentFindingFilter filter = new SegmentFindingFilter(p0, p1);
geom.apply(filter);
return filter.hasSegment();
}
private static class SegmentFindingFilter
implements CoordinateSequenceFilter
{
private Coordinate p0, p1;
private boolean hasSegment = false;
public SegmentFindingFilter(Coordinate p0, Coordinate p1)
{
this.p0 = p0;
this.p1 = p1;
}
public boolean hasSegment() { return hasSegment; }
public void filter(CoordinateSequence seq, int i)
{
if (i == 0) return;
hasSegment = p0.equals2D(seq.getCoordinate(i-1))
&& p1.equals2D(seq.getCoordinate(i));
}
public boolean isDone()
{
return hasSegment;
}
public boolean isGeometryChanged()
{
return false;
}
}
private Debug() {
out = System.out;
printArgs = new Class[1];
try {
printArgs[0] = Class.forName("java.io.PrintStream");
}
catch (Exception ex) {
// ignore this exception - it will fail later anyway
}
}
public void instancePrintWatch() {
if (watchObj == null) return;
instancePrint(watchObj);
}
public void instancePrintIfWatch(Object obj) {
if (obj != watchObj) return;
if (watchObj == null) return;
instancePrint(watchObj);
}
public void instancePrint(Object obj)
{
if (obj instanceof Collection) {
instancePrint(((Collection) obj).iterator());
}
else if (obj instanceof Iterator) {
instancePrint((Iterator) obj);
}
else {
instancePrintObject(obj);
}
}
public void instancePrint(Iterator it)
{
for (; it.hasNext(); ) {
Object obj = it.next();
instancePrintObject(obj);
}
}
public void instancePrintObject(Object obj) {
//if (true) throw new RuntimeException("DEBUG TRAP!");
Method printMethod = null;
try {
Class cls = obj.getClass();
try {
printMethod = cls.getMethod("print", printArgs);
args[0] = out;
out.print(DEBUG_LINE_TAG);
printMethod.invoke(obj, args);
}
catch (NoSuchMethodException ex) {
instancePrint(obj.toString());
}
}
catch (Exception ex) {
ex.printStackTrace(out);
}
}
public void println() {
out.println();
}
private void instanceAddWatch(Object obj) {
watchObj = obj;
}
private void instancePrint(String str) {
out.print(DEBUG_LINE_TAG);
out.print(str);
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy