use of eu.esdihumboldt.hale.ui.common.graph.layout.FunctionTreeLayoutAlgorithm in project hale by halestudio.
the class ImageContent method getImageContent.
/**
* Get the function image for the function with the given identifier.
*
* @param func_id the function identifier
* @param tempDir the temporary directory where the function image may be
* stored
* @return the function image input stream or <code>null</code>
* @throws Exception if an error occurs generating the image
*/
public static InputStream getImageContent(String func_id, File tempDir) throws Exception {
final FunctionDefinition<?> function = FunctionUtil.getFunction(func_id, null);
if (function == null) {
log.warn("Unknown function " + func_id);
return null;
}
final File _functionFile = new File(tempDir, func_id + ".png");
if (!_functionFile.exists()) {
Display display;
if (Display.getCurrent() != null) {
// use the current display if available
display = Display.getCurrent();
} else {
try {
// use workbench display if available
display = PlatformUI.getWorkbench().getDisplay();
} catch (Throwable e) {
// use a dedicated display thread if no workbench is
// available
display = DisplayThread.getInstance().getDisplay();
}
}
display.syncExec(new Runnable() {
@Override
public void run() {
// create an initial off-screen graph with fixed values;
// resize the graph after computing the figures width and
// height
OffscreenGraph off_graph = new OffscreenGraph(300, 200) {
@Override
protected void configureViewer(GraphViewer viewer) {
LayoutAlgorithm algo = new FunctionTreeLayoutAlgorithm();
FunctionGraphContentProvider stcp = new FunctionGraphContentProvider();
// XXX no service provider given
FunctionGraphLabelProvider fglp = new FunctionGraphLabelProvider(null, false);
viewer.setContentProvider(stcp);
viewer.setLabelProvider(fglp);
viewer.setInput(function);
viewer.setLayoutAlgorithm(algo);
}
};
Graph graph = off_graph.getGraph();
Dimension dim = computeSize(graph);
int width;
if (dim.width > 450) {
width = dim.width;
} else {
// minimum width = 450
width = 450;
}
int height = dim.height;
off_graph.resize(width, height);
try {
off_graph.saveImage(new BufferedOutputStream(new FileOutputStream(_functionFile)), null);
} catch (IOException e) {
log.warn("Conversion from Graph to Image failed!");
} finally {
off_graph.dispose();
}
}
});
}
if (_functionFile.exists()) {
return new FileInputStream(_functionFile);
}
return null;
}
Aggregations