package org.clothocore.widget.fabdash;
import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Logger;
import org.openide.awt.StatusDisplayer;
import org.openide.util.Exceptions;
import org.openide.windows.IOColorLines;
import org.openide.windows.IOProvider;
import org.openide.windows.InputOutput;
import org.openide.windows.OutputListener;
/**
*
* @author Javier A. Ortiz Bultrón <javier.ortiz.78@gmail.com>
*/
public final class OutputHandler {
private OutputHandler() {
}
private static ArrayList<String> outputMap = new ArrayList<String>();
public static void output(String name, String mess, Color c) {
output(name, mess, c, null);
}
public static void output(String name, String mess, OutputListener listener) {
output(name, mess, Color.BLACK, listener);
}
/**
* Print in specified color
* @param name Tab name
* @param mess Message to display
* @param c Color to display the method
* @param listener
*/
public static void output(String name, String mess, Color c, OutputListener listener) {
boolean select = getIO(name) || !outputMap.contains(name);
InputOutput io = IOProvider.getDefault().getIO(name, select);
if (select) {
io.select();
}
io.setFocusTaken(false);
if (mess == null || mess.trim().isEmpty()) {
if (listener == null) {
io.getOut().print(mess);
} else {
try {
io.getOut().println(mess, listener);
} catch (IOException ex1) {
Logger.getLogger(OutputHandler.class.getSimpleName(), ex1.getMessage());
io.getOut().print(mess);
}
}
} else {
if (c != null && c != Color.BLACK) {
try {
if (listener == null) {
IOColorLines.println(io, mess, c);
} else {
IOColorLines.println(io, mess, listener, true, c);
}
} catch (IOException ex) {
Logger.getLogger(OutputHandler.class.getSimpleName(), ex.getMessage());
if (listener == null) {
io.getOut().print(mess);
} else {
try {
io.getOut().println(mess, listener);
} catch (IOException ex1) {
Logger.getLogger(OutputHandler.class.getSimpleName(), ex1.getMessage());
io.getOut().print(mess);
}
}
}
} else {
//Just print in black as default
if (listener == null) {
io.getOut().print(mess);
} else {
try {
io.getOut().println(mess, listener);
} catch (IOException ex1) {
Logger.getLogger(OutputHandler.class.getSimpleName(), ex1.getMessage());
io.getOut().print(mess);
}
}
}
}
}
/**
* Print in default color black
* @param name Tab name
* @param mess Message to display
*/
public static void output(String name, String mess) {
output(name, mess, Color.BLACK, null);
}
/**
* Clear a tab (close and so it'll be recreated next time)
* @param name
*/
public static void clear(String name) {
if (outputMap.contains(name)) {
try {
//Remove it
IOProvider.getDefault().getIO(name, false).getOut().reset();
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
}
}
private static boolean getIO(String name) {
boolean create = true;
if (outputMap.contains(name)) {
create = false;
} else {
outputMap.add(name);
}
return create;
}
/**
* Close all I/O tabs (defined)
*/
public static void closeOutputs() {
for (String name : outputMap) {
IOProvider.getDefault().getIO(name, false).closeInputOutput();
}
outputMap.clear();
}
/**
* Select an output tab (if it exists)
* @param name
*/
public static void select(String name) {
if (outputMap.contains(name)) {
IOProvider.getDefault().getIO(name, getIO(name)).select();
}
}
/**
* Update the message in the status windows of the platform
* @param mess
*/
public static void setStatus(String mess) {
StatusDisplayer.getDefault().setStatusText(mess);
}
}