如何在服务器上创建GEF图的图像

时间:2015-01-23 10:26:57

标签: java eclipse bpmn eclipse-gef graphiti

我想在服务器端创建一个Eclipse GEF图的图像,而不必加载整个编辑器环境。

该图表是使用eclipse bpmn2-modeler设计的,该eclipse graphiti基于GEF,基于{{3}}。

这个想法将是:

  1. 加载BPMN模型
  2. 生成图表信息
  3. 将图表导出为图像
  4. 此代码段应执行步骤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);
    
    1. 生成我发现org.eclipse.bpmn2.modeler.core.di.DIImport的图表信息 这里的问题是构造函数需要org.eclipse.graphiti.ui.editor.DiagramEditor,而在服务器上我没有,没有正在运行的UI环境。
      是否有其他的工具或处理程序可以为我生成图表?

    2. 我看了org.eclipse.graphiti.ui.features.DefaultSaveImageFeatureorg.eclipse.graphiti.ui.internal.util.ui.print.AbstractFigureSelectionDialog (initScaledImage()) 但是我需要首先通过第2步,然后再深入研究这个问题。

    3. 也许我的方法不对,而且方法更简单?

2 个答案:

答案 0 :(得分:1)

您可以查看GMF如何在没有编辑器的情况下生成图表图像。但是,这一代仍然依赖于UI,因为您需要SWT和Display线程(您可以在无头Eclipse模式下启动Display线程)。

我们的想法是使用EditPart工厂为模型元素创建editpart,然后在由屏幕外创建的Shell托管的Canvas上绘制根图。 GC的图形上下文是SWT图像。有些方法可以在不使用基于AWT的Eclipse UI或生成SVG的情况下生成图表的图像。但是,请记住,当涉及文本标签时,图形的布局与SWT相关,因此您需要SWT和Display线程。数字的颜色,字体和其他属性也是SWT对象。

GMF中要查看的课程为org.eclipse.gmf.runtime.diagram.ui.OffscreenEditPartFactory

答案 1 :(得分:1)

Graphiti最近收到了一个enhancement,它允许您导出图表而无需调出编辑器。您仍然需要eclipse UI环境。我有一个示例here,它使用下面列出的帮助方法。

org.eclipse.graphiti.ui.internal.services.impl.ImageService.convertDiagramToBytes(Diagram, int)