package fr.inria.soctrace.framesoc.ui.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.inria.soctrace.framesoc.core.FramesocManager;
import fr.inria.soctrace.framesoc.ui.model.ToolDescriptor;
import fr.inria.soctrace.framesoc.core.bus.FramesocBusTopic;
import fr.inria.soctrace.framesoc.core.bus.FramesocBusTopicList;
import fr.inria.soctrace.framesoc.core.bus.IFramesocBusListener;
import fr.inria.soctrace.framesoc.core.tools.model.EmptyInput;
import fr.inria.soctrace.framesoc.core.tools.model.IFramesocToolInput;
import fr.inria.soctrace.lib.model.Tool;
import fr.inria.soctrace.lib.model.utils.SoCTraceException;
public class FramesocToolManager implements IFramesocBusListener {
/**
* Single instance of the manager
*/
private static FramesocToolManager instance = null;
/**
* Logger
*/
private static Logger logger = LoggerFactory
.getLogger(FramesocToolManager.class);
private FramesocBusTopicList topics;
/**
* Instance getter
*
* @return the manager instance
*/
public static FramesocToolManager getInstance() {
if (instance == null)
instance = new FramesocToolManager();
return instance;
}
@Override
public void handle(FramesocBusTopic topic, Object data) {
if (topic.equals(FramesocBusTopic.TOPIC_UI_LAUNCH_TOOL)) {
try {
if (data instanceof ToolDescriptor) {
ToolDescriptor tDes = (ToolDescriptor) data;
IFramesocToolInput toolInput = tDes.getToolInput();
// If no input is provided
if (toolInput == null) {
// Launch tool with empty input
logger.debug("Using EmptyInput as default");
toolInput = new EmptyInput();
}
if (tDes.getTool() != null) {
logger.debug("Launching tool "
+ tDes.getTool().getName());
FramesocManager.getInstance().launchTool(
tDes.getTool(), toolInput);
} else if (!tDes.getToolName().isEmpty()) {
Tool tool = FramesocManager.getInstance().getTool(
tDes.getToolName());
if (tool != null) {
logger.debug("Launching tool " + tool.getName());
FramesocManager.getInstance().launchTool(
tDes.getTool(), toolInput);
} else {
throw new SoCTraceException(
"Invalid tool name provided: "
+ tDes.getToolName());
}
} else {
throw new SoCTraceException("No valid tool provided.");
}
} else {
throw new SoCTraceException(
"Invalid data provided: was expecting data of type ToolDescriptor got "
+ data.getClass().getName() + " instead.");
}
} catch (SoCTraceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* Private methods
*/
/**
* Private constructor. Prevents instantiation.
*/
private FramesocToolManager() {
topics = new FramesocBusTopicList(this);
topics.addTopic(FramesocBusTopic.TOPIC_UI_LAUNCH_TOOL);
topics.registerAll();
}
}