diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java index ce530a7..3a8603e 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java @@ -3,10 +3,8 @@ import application.editor.FlowCellEditor; import com.mxgraph.model.mxCell; import com.mxgraph.swing.mxGraphComponent; -import models.dataFlowModel.DataTransferChannel; import javax.swing.*; -import java.awt.*; import java.awt.event.MouseEvent; import java.util.EventObject; @@ -18,26 +16,35 @@ @Override public void startEditing(Object cellObj, EventObject eventObj) { + if (editingCell != null) stopEditing(true); + DependencyModelingStage ddmStage = (DependencyModelingStage) stage; + // セルがnull、または頂点以外なら編集しない - if (cellObj == null || !(cellObj instanceof mxCell)) { - return; - } + if (cellObj == null || !(cellObj instanceof mxCell)) return; mxCell cell = (mxCell) cellObj; - // エッジの場合もスキップ - if (cell.isEdge()) { - return; + switch (ddmStage.getCurState()){ + + case IDLE: //未選択状態 + if (cell.isEdge()) { + ddmStage.setState(DependencyModelingStageStatus.SELECT_DEPENDENCY_GRAPH); + } else { + ddmStage.setState(DependencyModelingStageStatus.SELECT_INTERFACE_NODE); + editInterfaceName(cell, eventObj); + ddmStage.setState(DependencyModelingStageStatus.IDLE); + } + break; + case SELECT_DEPENDENCY_GRAPH: //依存関係グラフを選択中 + break; + case SELECT_INTERFACE_NODE: //interface選択中 + break; } - // ダブルクリック以外では編集しない - if (eventObj instanceof MouseEvent) { - MouseEvent e = (MouseEvent) eventObj; - if (e.getClickCount() < 2) { - return; - } - } + } + + public void editInterfaceName(mxCell cell, EventObject eventObj){ // 現在のラベルを取得 String currentName = (cell.getValue() != null) ? cell.getValue().toString() : ""; diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java index a20f2b0..e9cc6e3 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStage.java @@ -17,15 +17,13 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; public class DependencyModelingStage extends Stage { - public final int PORT_DIAMETER = 8; - public final int PORT_RADIUS = PORT_DIAMETER / 2; public final int DEPENDENCY_NODE_SIZE = 40; + private DependencyModelingStageStatus curState = null; + private DependencyGraph dependencyGraph = null; private List nodes = new ArrayList<>(); @@ -35,8 +33,21 @@ //-------------------------------------------------- public DependencyModelingStage(mxGraphComponent graphComponent) { super(graphComponent); + this.curState = DependencyModelingStageStatus.IDLE; } + //-------------------------------------------------- + // getter / setter + //-------------------------------------------------- + public DependencyModelingStageStatus getCurState(){ + return curState; + } + + public void setState(DependencyModelingStageStatus nextState){ + curState = nextState; + } + + @Override public void init(Stage prevStage) { /* @@ -49,13 +60,13 @@ dependencyFlowGraph = new DependencyFlowGraph(controlFlowGraph, model); }*/ if (prevStage instanceof PushPullSelectionStage) { - model = ((PushPullSelectionStage) prevStage).getModel(); + model = prevStage.getModel(); DataFlowGraph dataFlowGraph = ((PushPullSelectionStage) prevStage).getDataFlowGraph(); ControlFlowGraph controlFlowGraph = new ControlFlowGraph(dataFlowGraph, model); - dependencyGraph = new DependencyGraph(controlFlowGraph, model); + graph = constructGraph(graph, dependencyGraph); } } @@ -86,6 +97,7 @@ }; } + //interfaceを追加 private void insertDependencyNodeAt(int mouseX, int mouseY) { mxGraphModel model = (mxGraphModel) graph.getModel(); mxCell parent = (mxCell) graph.getDefaultParent(); @@ -126,11 +138,23 @@ } } - @Override public boolean canChangeFrom(Stage prevStage) { return true; } + private mxGraph constructGraph(mxGraph graph, DependencyGraph dependencyGraph) { + + graph.getModel().beginUpdate(); + try { + + + } finally { + graph.getModel().endUpdate(); + } + return graph; + } + } + diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStageStatus.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStageStatus.java new file mode 100644 index 0000000..6b202ad --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyModelingStageStatus.java @@ -0,0 +1,7 @@ +package application.editor.stages; + +public enum DependencyModelingStageStatus { + IDLE, //未選択状態 + SELECT_DEPENDENCY_GRAPH, //依存関係グラフを選択中 + SELECT_INTERFACE_NODE //Interface選択中 +} diff --git a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java index 6fdf98d..15dc07e 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dependencyModel/DependencyGraph.java @@ -1,5 +1,7 @@ package models.dependencyModel; +import models.DirectedGraph; +import models.Edge; import models.Node; import models.controlFlowModel.CallGraph; import models.controlFlowModel.ControlFlowGraph; @@ -10,19 +12,32 @@ import java.util.Map; import java.util.Set; -public class DependencyGraph implements IFlowGraph { +public class DependencyGraph extends DirectedGraph implements IFlowGraph { private DataFlowGraph dataFlowGraph; - private final CallGraph pushCallGraph; - private final CallGraph pullCallGraph; + private ControlFlowGraph controlFlowGraph; + + private DirectedGraph dependencyGraph; public DependencyGraph(ControlFlowGraph controlFlowGraph, DataTransferModel model) { - this.dataFlowGraph = controlFlowGraph.getDataFlowGraph(); - pushCallGraph = new CallGraph(); - pullCallGraph = new CallGraph(); + + //ControlFlowGraphのPush,PullCallGraphをDependencyGraphに追加する + this.controlFlowGraph = controlFlowGraph; + for(Edge e: controlFlowGraph.getPushCallGraph().getEdges()){ + this.addEdge(e); + } + for(Edge e: controlFlowGraph.getPullCallGraph().getEdges()){ + this.addEdge(e); + } + } + + //ControlFlowGraphが統合できるまでのサンプル 統合次第削除 + public DependencyGraph(DataFlowGraph dataFlowGraph, DataTransferModel model){ + this.dataFlowGraph = dataFlowGraph; + } public DataFlowGraph getDataFlowGraph(){ - return dataFlowGraph; + return controlFlowGraph.getDataFlowGraph(); } @Override