我想在服务器端创建一个Eclipse GEF图的图像,而不必加载整个编辑器环境。
该图是使用基于GEF的eclipse graphiti的eclipse bpmn2-modeler设计的。
这个想法是:
- 加载 BPMN 模型
- 生成逻辑示意图信息
- 将图表导出为图像
此代码段应执行第 1 步,加载 BPMN 模型:
URI modelUri = URI.createFileURI("D:/temp/data.bpmn");
ResourceSet resourceSet = new Bpmn2ModelerResourceSetImpl();
resourceSet.setURIConverter(new ProxyURIConverterImplExtension(modelUri));
Bpmn2ResourceImpl resource = (Bpmn2ResourceImpl) resourceSet.createResource(modelUri, Bpmn2ModelerResourceImpl.BPMN2_CONTENT_TYPE_ID);
ModelHandler modelHandler = ModelHandlerLocator.createModelHandler(modelUri, resource);
生成我
org.eclipse.bpmn2.modeler.core.di.DIImport
找到的图表信息.
这里的问题是构造函数需要一个org.eclipse.graphiti.ui.editor.DiagramEditor
,而在服务器上我没有,没有正在运行的 UI 环境。
是否有其他实用程序或处理程序可以为我生成图表?我看了看
org.eclipse.graphiti.ui.features.DefaultSaveImageFeature
和org.eclipse.graphiti.ui.internal.util.ui.print.AbstractFigureSelectionDialog (initScaledImage())
.
但是在深入研究这个问题之前,我需要首先通过第 2 步问题。
也许我走错了路,有一种更简单的方法?
您可以在没有编辑器的情况下查看 GMF 如何生成图表图像。但是,该生成仍然依赖于UI,因为您需要SWT和显示线程(您可以在无头Eclipse模式下启动显示线程)。
这个想法是使用 EditPart 工厂为模型元素创建编辑部分,然后在屏幕外创建的命令行管理程序托管的画布上绘制根图形。GC 的图形上下文是 SWT 图像。有一些方法可以在不使用基于 AWT 的 Eclipse UI 或生成 SVG 的情况下生成图表的图像。但是,请记住,当涉及到文本标签时,图形的布局取决于 SWT,因此无论哪种方式,您都需要 SWT 和显示线程。图形的颜色、字体和其他属性也是 SWT 对象。
GMF 中要查看的类将是org.eclipse.gmf.runtime.diagram.ui.OffscreenEditPartFactory
Graphiti最近获得了一个增强功能,它允许你在不打开编辑器的情况下导出图表。不过,您仍然需要 eclipse UI 环境。我这里有一个使用下面列出的帮助程序方法的示例。
org.eclipse.graphiti.ui.internal.services.impl.ImageService.convertDiagramToBytes(Diagram, int)