An error occurred while loading the file. Please try again.
-
Dumoulin Nicolas authored2a9651ce
package fr.cemagref.observation.observers;
import java.awt.Dimension;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import fr.cemagref.observation.gui.Configurable;
import fr.cemagref.observation.kernel.ObservablesHandler;
import fr.cemagref.observation.kernel.ObserverListener;
import fr.cemagref.ohoui.annotations.Anchor;
import fr.cemagref.ohoui.annotations.Description;
import fr.cemagref.ohoui.annotations.Link;
import fr.cemagref.ohoui.filters.NoTransientField;
import fr.cemagref.ohoui.swing.OhOUI;
import fr.cemagref.ohoui.swing.OhOUIDialog;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class ConsoleObserver implements ObserverListener, Configurable {
@Description(name = "Use standard output", tooltip = "")
@Link(action = "disable", target = "filename")
private boolean sysout = true;
@Anchor(id = "filename")
private File outputFile = new File("");
private transient File outputFileBak = outputFile;
protected transient PrintStream outputStream = System.out;
private List<Integer> dates;
public ConsoleObserver() {
}
public ConsoleObserver(boolean sysout, String outputFile) {
this.sysout = sysout;
this.outputFile = new File(outputFile);
this.init();
}
@Override
public void addObservable(ObservablesHandler classObservable) {
// nothing to do
}
protected boolean isInDates(long date) {
return dates == null || dates.contains((int) date);
}
@Override
public void valueChanged(ObservablesHandler clObservable, Object instance, long t) {
if (isInDates(t)) {
StringBuffer buf = new StringBuffer(t + " " + instance.getClass().getName() + " :\n");
for (int i = 0; i < clObservable.numberOfAttributes(); i++) {
buf.append(" " + clObservable.getDescription(i) + " = ");
try {
buf.append(clObservable.getObservableFetcher(i).fetchValue(instance));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
return;
}
if (i < clObservable.numberOfAttributes() - 1) {
buf.append("\n");
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
}
outputStream.println(buf);
}
}
protected void println(CharSequence message) {
if (sysout) {
outputStream.print(this.getClass().getSimpleName() + " :: ");
}
outputStream.println(message);
}
@Override
public void configure() {
OhOUIDialog dialog = OhOUI.getDialog(null, this, new NoTransientField());
dialog.setSize(new Dimension(510, 160));
dialog.setVisible(true);
if (!outputFile.equals(outputFileBak)) {
init();
}
outputFileBak = outputFile;
}
@Override
public void init() {
if (sysout) {
outputStream = System.out;
} else {
try {
File outputDir = outputFile.getParentFile();
if (!outputDir.exists()) {
outputDir.mkdirs();
}
// it's rather better to use a buffetred outputstream, and to disable to default buffer of the PrintStream
outputStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile), 1024), false);
} catch (FileNotFoundException e) {
// TODO bring info to the user. Or prevent exception when directory of file doesn't exist
e.printStackTrace();
outputStream = System.out;
}
}
}
@Override
public void close() {
if (outputStream != System.out) {
outputStream.close();
}
}
}