diff --git a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java index 32b4e79..492d109 100644 --- a/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java +++ b/AlgebraicDataflowArchitectureModel/src/application/editor/stages/DependencyCellEditor.java @@ -5,10 +5,14 @@ import com.mxgraph.model.mxGeometry; import com.mxgraph.swing.mxGraphComponent; import com.mxgraph.view.mxCellState; +import models.Edge; +import models.controlFlowModel.ObjectNode; +import models.dependencyModel.DependencyEdge; import models.dependencyModel.DependencyGraph; import models.dependencyModel.InterfaceNode; import javax.swing.*; +import javax.xml.transform.Source; import java.awt.*; import java.awt.event.MouseEvent; import java.util.EventObject; @@ -45,6 +49,7 @@ if (isInterfaceNode(cell) && mouseEvent.getClickCount() == 2) { showInterfaceEditDialog(cell, eventObj); } + } /** @@ -167,6 +172,42 @@ graphComponent.getGraph().getModel().beginUpdate(); try { + + DependencyGraph depGraph = ddmStage.getDependencyGraph(); + + InterfaceNode interfaceNode = ddmStage.getInterfaceNode(interfaceCell); + if (interfaceNode == null) { + return; + } + + ObjectNode srcNode = interfaceNode.getDependencySideNode(); + ObjectNode dstNode = interfaceNode.getImplementSideNode(); + + DependencyEdge depEdge = null; + DependencyEdge implEdge = null; + + for (Edge e : depGraph.getEdges()) { + DependencyEdge de = (DependencyEdge) e; + if (de.getDestination() == interfaceNode) { + if (de.getEdgeType() == DependencyEdge.DependencyEdgeType.DEPENDENCY) { + depEdge = de; + } else if (de.getEdgeType() == DependencyEdge.DependencyEdgeType.IMPLEMENT) { + implEdge = de; + } + } + } + + if (depEdge != null && implEdge != null) { + depGraph.removeEdge(depEdge); + depGraph.removeEdge(implEdge); + ddmStage.getDependencyGraph().removeNode(interfaceNode); + ddmStage.removeInterfaceNode(interfaceCell); + + DependencyEdge restored = + new DependencyEdge(srcNode, dstNode, DependencyEdge.DependencyEdgeType.DEPENDENCY); + depGraph.addEdge(restored); + } + // Remove the interface node and its edges graphComponent.getGraph().getModel().remove(edge1); graphComponent.getGraph().getModel().remove(edge2); @@ -203,15 +244,15 @@ DependencyModelingStage ddmStage = (DependencyModelingStage) stage; mxCell source = (mxCell) edgeCell.getSource(); - mxCell target = (mxCell) edgeCell.getTarget(); + mxCell destination = (mxCell) edgeCell.getTarget(); - if (source == null || target == null) return; + if (source == null || destination == null) return; mxCell root = (mxCell) graphComponent.getGraph().getDefaultParent(); mxCell layerCell = (mxCell) root.getChildAt(ddmStage.DEPENDENCY_LAYER); mxCellState s = graphComponent.getGraph().getView().getState(source); - mxCellState t = graphComponent.getGraph().getView().getState(target); + mxCellState t = graphComponent.getGraph().getView().getState(destination); double midX, midY; @@ -225,7 +266,7 @@ graphComponent.getGraph().getModel().remove(edgeCell); // Insert the interface node (Interface) into the DEPENDENCY_LAYER - mxCell interfaceNode = (mxCell) graphComponent.getGraph().insertVertex( + mxCell interfaceCell = (mxCell) graphComponent.getGraph().insertVertex( layerCell, null, "Interface", @@ -245,21 +286,48 @@ ); if (newName != null && !newName.trim().isEmpty()) { - interfaceNode.setValue(newName.trim()); + interfaceCell.setValue(newName.trim()); } - // Setting Interface Name - InterfaceNode modelNode = new InterfaceNode(interfaceNode.getValue().toString()); - ddmStage.setInterfaceNode(interfaceNode, modelNode); - // Get the original edge's style and value String edgeStyle = edgeCell.getStyle(); Object edgeValue = edgeCell.getValue(); - // Create edge from source -> interface (keep original style) - graphComponent.getGraph().insertEdge(layerCell, null, edgeValue, source, interfaceNode, edgeStyle); + //create InterfaceNode and InterfaceEdge + ObjectNode srcNode = ddmStage.getEventChannelObjectNode(source); + if (srcNode == null) { + srcNode = ddmStage.getStatefulObjectNode(source); + } + ObjectNode dstNode = ddmStage.getStatefulObjectNode(destination); + InterfaceNode InterfaceNode = new InterfaceNode(srcNode, dstNode, interfaceCell.getValue().toString()); + ddmStage.setInterfaceNode(interfaceCell, InterfaceNode); - // Create edge from target -> interface (reverse direction, dashed) + DependencyGraph depGraph = ddmStage.getDependencyGraph(); + DependencyEdge targetEdge = null; + + for (Edge e : depGraph.getEdges()) { + if (e.getSource() == srcNode) { + targetEdge = (DependencyEdge) e; + break; + } + } + + if (targetEdge != null) { + depGraph.removeEdge(targetEdge); + + DependencyEdge depEdge = + new DependencyEdge(srcNode, InterfaceNode, DependencyEdge.DependencyEdgeType.DEPENDENCY); + DependencyEdge implEdge = + new DependencyEdge(dstNode, InterfaceNode, DependencyEdge.DependencyEdgeType.IMPLEMENT); + + depGraph.addEdge(depEdge); + depGraph.addEdge(implEdge); + } + + // Create edge from source -> interface (keep original style) + graphComponent.getGraph().insertEdge(layerCell, null, edgeValue, source, interfaceCell, edgeStyle); + + // Create edge from destination -> interface (reverse direction, dashed) // Add "dashed=true" to the style String reversedStyle = edgeStyle; if (reversedStyle != null && !reversedStyle.contains("dashed")) { @@ -268,7 +336,7 @@ reversedStyle = "dashed=true"; } - graphComponent.getGraph().insertEdge(layerCell, null, edgeValue, target, interfaceNode, reversedStyle); + graphComponent.getGraph().insertEdge(layerCell, null, edgeValue, destination, interfaceCell, reversedStyle); } finally { graphComponent.getGraph().getModel().endUpdate(); @@ -284,11 +352,7 @@ // Get or create InterfaceNode InterfaceNode interfaceNode = ddmStage.getInterfaceNode(cell); - if (interfaceNode == null) { - String currentName = (cell.getValue() != null) ? cell.getValue().toString() : "Interface"; - interfaceNode = new InterfaceNode(currentName); - ddmStage.setInterfaceNode(cell, interfaceNode); - } + if (interfaceNode == null) return ; // Create dialog JDialog dialog = new JDialog((Frame) null, "Interface Settings", true); @@ -301,15 +365,6 @@ JTextField nameField = new JTextField(interfaceNode.getName(), 20); namePanel.add(nameField, BorderLayout.CENTER); - // Method code area - JPanel codePanel = new JPanel(new BorderLayout(5, 5)); - codePanel.setBorder(BorderFactory.createEmptyBorder(5, 10, 10, 10)); - codePanel.add(new JLabel("Method Code:"), BorderLayout.NORTH); - JTextArea codeArea = new JTextArea(interfaceNode.getMethodCode(), 20, 40); - codeArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12)); - JScrollPane scrollPane = new JScrollPane(codeArea); - codePanel.add(scrollPane, BorderLayout.CENTER); - // Buttons JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JButton okButton = new JButton("OK"); @@ -320,7 +375,6 @@ String newName = nameField.getText().trim(); if (!newName.isEmpty()) { finalInterfaceNode.setName(newName); - finalInterfaceNode.setMethodCode(codeArea.getText()); graphComponent.getGraph().getModel().beginUpdate(); try { @@ -340,7 +394,6 @@ // Add components to dialog dialog.add(namePanel, BorderLayout.NORTH); - dialog.add(codePanel, BorderLayout.CENTER); dialog.add(buttonPanel, BorderLayout.SOUTH); dialog.pack();