package net.refractions.linecleaner; import java.util.logging.Level; import java.util.logging.Logger; import org.geotools.feature.Feature; /* * level, stage name, process name, action, comments */ public class LoggingSystem { private Logger logger; private long startTime; private LogAction currentAction; private static LoggingSystem instance = new LoggingSystem(); private LoggingSystem() { this.logger = Logger.getLogger(LoggingSystem.class.getName()); this.logger.addHandler(new LineCleanerLogHandler()); } public static LoggingSystem getInstance() { instance.setLevel(Level.OFF); return instance; } public void setLevel(Level level) { logger.setLevel(level); } public Logger getLogger() { return logger; } public void setCurrentAction(LogAction action) { this.currentAction = action; } public static String featureToString(Feature feature) { //TODO if loggin is level.finest, print geom too - no, do that elsewhere? return feature.getID(); } public void begin() { this.logger.info(currentAction+SEPARATOR+BEGIN); startTime = System.currentTimeMillis(); } public void delete(Feature feature) { this.logger.info(currentAction+SEPARATOR + DELETE + SEPARATOR + featureToString(feature)); } public void modify(Feature newFeature) { modify(newFeature, null); } public void modify(Feature newFeature, String comment) { if (comment != null && comment.length() != 0) { comment = SEPARATOR + comment; } else { comment = ""; } this.logger.info(currentAction+SEPARATOR + MODIFY + SEPARATOR + featureToString(newFeature) + comment); } public void info(String message) { message(Level.INFO, message); } public void warning(String message) { message(Level.WARNING, message); } public void severe(String message) { message(Level.SEVERE, message); } public void fine(String message) { message(Level.FINE, message); } public void finest(String message) { message(Level.FINEST, message); } public void message(Level level, String message) { this.logger.log(level, currentAction+SEPARATOR+ INFORMATION + SEPARATOR + message); } public void finish() { long finishTime = System.currentTimeMillis() - startTime; this.logger.info(currentAction+SEPARATOR+FINISH+SEPARATOR+finishTime); } public void finish(int metric) { long finishTime = System.currentTimeMillis() - startTime; this.logger.info(currentAction+SEPARATOR+FINISH+SEPARATOR+finishTime+SEPARATOR+metric); } protected final static String SEPARATOR = ","; protected final static String CLEANSING = "Cleansing"; protected final static String CLEANING = "Cleaning"; protected final static String BEGIN = "begin"; protected final static String FINISH = "finish"; protected final static String DELETE = "delete"; protected final static String MODIFY = "modify"; protected final static String INFORMATION = "information"; public static final LogAction PSEUDO_NODES = new LogAction() { @Override public String getStageName() { return CLEANSING; } @Override public String getProcessName() { return "Pseudo Nodes"; } }; public static final LogAction CYCLES = new LogAction() { @Override public String getStageName() { return CLEANSING; } @Override public String getProcessName() { return "Cycles"; } }; public static final LogAction END_NODES = new LogAction() { @Override public String getStageName() { return CLEANSING; } @Override public String getProcessName() { return "End Nodes"; } }; public static final LogAction DOUGLAS_PEUCKER = new LogAction() { @Override public String getStageName() { return CLEANSING; } @Override public String getProcessName() { return "Douglas-Peucker"; } }; public static final LogAction MINIMUM_LENGTH = new LogAction() { @Override public String getStageName() { return CLEANSING; } @Override public String getProcessName() { return "Minimum Length"; } }; public static final LogAction SIMILAR_FEATURES = new LogAction() { @Override public String getStageName() { return CLEANING; } @Override public String getProcessName() { return "Similar Features"; } }; public static final LogAction NODE_INSERTION = new LogAction() { @Override public String getStageName() { return CLEANING; } @Override public String getProcessName() { return "Node Insertion"; } }; }