Java 图形数据流组合框架

Java 图形数据流组合框架,java,workflow,dsl,modeling,dataflow,Java,Workflow,Dsl,Modeling,Dataflow,我有兴趣在我的应用程序中嵌入一个类似类型的工具。在这种情况下,嵌入式工具单元表示为块,其输入和输出端口以及每个块的参数使用以工具想要的任何方式编写的我的块定义文件。我希望框架是通用的,从某个地方读取块定义,然后允许用户根据给定块的定义组成数据流(最好使用图形编辑器)。然后,我希望该工具导出由用户组成的数据流块,在这里我可以用Java(或其他语言)实际地阅读它,并使用它做任何我需要做的事情,比如构建给定数据流的可执行版本 我知道在高级阶段,导出的块组合可以足够智能,可以执行,但我可以导出块组合/拓

我有兴趣在我的应用程序中嵌入一个类似类型的工具。在这种情况下,嵌入式工具单元表示为块,其输入和输出端口以及每个块的参数使用以工具想要的任何方式编写的我的块定义文件。我希望框架是通用的,从某个地方读取块定义,然后允许用户根据给定块的定义组成数据流(最好使用图形编辑器)。然后,我希望该工具导出由用户组成的数据流块,在这里我可以用Java(或其他语言)实际地阅读它,并使用它做任何我需要做的事情,比如构建给定数据流的可执行版本

我知道在高级阶段,导出的块组合可以足够智能,可以执行,但我可以导出块组合/拓扑以及相互连接的输入和输出。换句话说,我不是在寻找一种数据流编程语言。我正在寻找一个工具集,它允许数据流的图形化组合,然后将组合导出为json或其他我可以在编程语言中加载的东西,并对其执行任何操作


上面的框架/工具是Simulink对来自不同库的块所做的,但我需要将这些东西嵌入到我自己的工具中,我想知道什么开源项目接近我想要做的。我想我想要的是一个数据流组合框架。请纠正我的看法。

我不确定以下内容是否符合您的期望,但您可以看一看——它有一个图形编辑器,并以自己的语言导出模型。然而,我不知道这个项目在实践中有多成熟,以及目前可以用Java中的模型做些什么


你也可以复习其他的

你应该去J.Paul Morrison家的山顶。我没能从中获得优势,但这一定是我的错

此外,我见过的最好的UI是,如果我曾经写过一个(我会写),它将是类似的。不错的预览区,教程模式,很漂亮。我还没有弄清楚,编辑器是否可用,或者这个项目的目的是什么。
最后,我们的DF脚本语言(只是想看看,我们应该用图形编辑器隐藏什么):

如您所见,该语言只有3个元素:

  • 放置零部件(名称:类型)
  • 设置属性的值(compname.propname=value)
  • 定义消息(srccomp.srcport>>dest.destport)
当然,图形编辑器应该更好。我们现在只有可视化工具


我觉得您的用户应该编辑UML活动。因此,您可以基于和。您需要为正在编辑的活动附加更具体的语义,并限制用户可以编辑的内容(例如,您可能不希望通过活动fork和join节点并行执行)。执行编辑过的模型,然后变成在活动中阅读和浏览。如果输入节点,则只需调用节点定义。听起来很简单


不管怎样,我按照@mantrid的建议看了一下。我的建议是。但我不确定这是否太复杂了。但我认为应该在这里提及。您可以定义规则,并在不应该连接的事物连接时显示错误。我认为它看起来也有点像Simulink,不是吗?

我也在寻找这样的工具,并且偶然发现了一个开发人员库,它可以用来自行构建交互式图形/图表绘制工具。这并不意味着您必须自己完成所有的艰苦工作,因为examples文件夹中的com.mxgraph.examples.swing.GraphEditor已经提供了一个良好的起点

演示编辑器的屏幕截图

当导出到所谓的mx图形编辑器文件(*.xme)时,实际上会得到xml。对于上述示例:

<mxGraphModel>
    <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="4" parent="1" style="fontSize=24" value="Start"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="80.0"
                y="250.0" />
        </mxCell>
        <mxCell id="5" parent="1" style="fontSize=24" value="???"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="310.0"
                y="480.0" />
        </mxCell>
        <mxCell edge="1" id="6" parent="1" source="4" style="" target="5"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="290.0" y="310.0" />
                <mxPoint as="targetPoint" x="220.0" y="330.0" />
            </mxGeometry>
        </mxCell>
        <mxCell id="9" parent="1" style="fontSize=24" value="Profit"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="570.0"
                y="710.0" />
        </mxCell>
        <mxCell edge="1" id="10" parent="1" source="5" style="" target="9"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="520.0" y="670.0" />
                <mxPoint as="targetPoint" x="490.0" y="840.0" />
            </mxGeometry>
        </mxCell>
    </root>
</mxGraphModel>

使用标准XML库解析文件不应该是一个问题,因此总而言之,当忽略所有位置信息时,可以得到一个简单的数据流描述


但是,请对我的建议持保留态度,因为我也在寻找正确的方法。

数据流语言是(有色)的特例。A由一个位置图组成,每个位置都有带值的彩色标记(颜色是“数据类型”的有趣名称,值只是一个颜色/数据类型实例)。来自多个地方的令牌通过转换组合,在以下地方生成令牌;“过渡”可以组合“颜色”(例如,计算值)。因此,浮点值可能有一个标记“颜色”,以及由加、减、乘、除组成的转换;您可以很容易地用它来建模算术数据流(例如Simulink)

更重要的是,CPN具有惊人的通用性。它们由层次化CPN填充,这些CPN提供了数据流子例程的效果,并允许各种扩展(如时间约束等)

该网站提供了一套完整的工具,用于构建/编辑/显示甚至评估任意颜色的Petri网。(您甚至不需要编写Java程序来评估它们!)。它甚至还提供了对此类图形的静态分析,如“终止”等,而这通常是使用Matlab或National Instruments风格的数据流语言无法获得的

如果有一个基于Java的CPN工具版本,我不会感到惊讶;该组织十多年来一直在开发此类工具。如果有办法约束t,我也不会感到惊讶
<mxGraphModel>
    <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="4" parent="1" style="fontSize=24" value="Start"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="80.0"
                y="250.0" />
        </mxCell>
        <mxCell id="5" parent="1" style="fontSize=24" value="???"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="310.0"
                y="480.0" />
        </mxCell>
        <mxCell edge="1" id="6" parent="1" source="4" style="" target="5"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="290.0" y="310.0" />
                <mxPoint as="targetPoint" x="220.0" y="330.0" />
            </mxGeometry>
        </mxCell>
        <mxCell id="9" parent="1" style="fontSize=24" value="Profit"
            vertex="1">
            <mxGeometry as="geometry" height="120.0" width="160.0" x="570.0"
                y="710.0" />
        </mxCell>
        <mxCell edge="1" id="10" parent="1" source="5" style="" target="9"
            value="">
            <mxGeometry as="geometry" relative="1">
                <mxPoint as="sourcePoint" x="520.0" y="670.0" />
                <mxPoint as="targetPoint" x="490.0" y="840.0" />
            </mxGeometry>
        </mxCell>
    </root>
</mxGraphModel>