委譲可能範囲のうち、共通する範囲の取得可能にした.
1 parent 986ae9c commit 559bbe3a7b955229fb0778939ef6223e9f221f5d
k-fujii authored on 11 Jun 2023
Showing 5 changed files
View
9
AlgebraicDataflowArchitectureModel/src/application/editor/stages/ControlFlowDelegationCellEditor.java
 
import application.editor.FlowCellEditor;
import models.controlFlowModel.CallEdge;
import models.controlFlowModel.CallEdgeAttribute;
import models.controlFlowModel.ControlFlowDelegator;
 
public class ControlFlowDelegationCellEditor extends FlowCellEditor {
/*************************************************************
public void startEditing(Object cellObj, EventObject eventObj) {
if( editingCell != null) stopEditing(true);
if( graphComponent.getGraph().getModel().isEdge(cellObj) ) {
CallEdgeAttribute callEdgeAttrl = (CallEdgeAttribute)graphComponent.getGraph().getModel().getValue(cellObj);
CallEdgeAttribute callEdgeAttr = (CallEdgeAttribute)graphComponent.getGraph().getModel().getValue(cellObj);
if(callEdgeAttrl == null) return;
System.out.println("Edge: " + callEdgeAttrl.getSelectedOption().name());
if(callEdgeAttr == null) return;
System.out.println("Edge: " + callEdgeAttr.getSelectedOption().name());
((ControlFlowDelegationStage)stage).getDelegatableNodes(callEdgeAttr.getCallEdge());
}
}
 
View
22
AlgebraicDataflowArchitectureModel/src/application/editor/stages/ControlFlowDelegationStage.java
package application.editor.stages;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.mxgraph.model.mxCell;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;
 
import application.editor.FlowCellEditor;
import application.editor.InEdgeAttribute;
import application.editor.OutEdgeAttribute;
import application.editor.Stage;
import models.Edge;
import models.controlFlowModel.CallEdge;
import models.controlFlowModel.CallEdgeAttribute;
import models.controlFlowModel.CallGraph;
import models.controlFlowModel.ControlFlowDelegator;
import models.controlFlowModel.ControlFlowGraph;
import models.controlFlowModel.ObjectNode;
import models.controlFlowModel.StatefulObjectNode;
import models.dataConstraintModel.IdentifierTemplate;
import models.dataFlowModel.DataFlowGraph;
import models.dataFlowModel.ResourceNode;
@Override
public FlowCellEditor createCellEditor(mxGraphComponent graphComponent) {
return new ControlFlowDelegationCellEditor(this, graphComponent);
}
/*************************************************************
*
*/
public List<ObjectNode> getDelegatableNodes(final CallEdge callEdge){
ControlFlowDelegator delegator = new ControlFlowDelegator(controlFlowGraph);
return delegator.searchDelegatableNodes(callEdge);
}
/*************************************************************
* [ *private ]
/*************************************************************
Object srcNodeCell =resNodeCells.get(srcResNode);
Object dstNodeCell = resNodeCells.get(dstResNode);
graph.insertEdge(layerCell, null, new CallEdgeAttribute(callEdge), srcNodeCell, dstNodeCell, "movable=false;");
CallEdgeAttribute callEdgeAttr = new CallEdgeAttribute(callEdge);
callEdge.setAttribute(callEdgeAttr);
graph.insertEdge(layerCell, null, callEdgeAttr, srcNodeCell, dstNodeCell, "movable=false;");
}
return graph;
}
}
View
1
■■■■
AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallEdge.java
public PushPullValue getSelectedOption() {
return this.selectedOption;
}
 
}
View
36
AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/CallEdgeAttribute.java
import models.EdgeAttribute;
import models.dataFlowModel.PushPullValue;
 
public class CallEdgeAttribute extends EdgeAttribute {
private PushPullValue selectedOption;
private ObjectNode srcObjNode;
private ObjectNode dstObjNode;
private CallEdge callEdge = null;
/*************************************************************
* [ *constructor ]
/*************************************************************
*
*/
public CallEdgeAttribute(CallEdge callEdge) {
this.selectedOption = callEdge.getSelectedOption();
 
if(!(callEdge.getSource() instanceof ObjectNode)) throw new ClassCastException(callEdge.getSource() + "is not type of ObjectNode");
this.srcObjNode = (ObjectNode)callEdge.getSource();
if(!(callEdge.getDestination() instanceof ObjectNode)) throw new ClassCastException(callEdge.getDestination() + "is not type of ObjectNode");
this.dstObjNode = (ObjectNode)callEdge.getDestination();
this.callEdge = callEdge;
}
/*************************************************************
* [ *public ]
/*************************************************************
* [ getter ]
/*************************************************************/
public CallEdge getCallEdge() {
return callEdge;
}
public PushPullValue getSelectedOption() {
return selectedOption;
return callEdge.getSelectedOption();
}
public ObjectNode getSourceObjectNode() {
return srcObjNode;
if(callEdge.getSource() instanceof ObjectNode) throw new ClassCastException("sourceNode isn't type of <ObjectNode>");
return (ObjectNode)callEdge.getSource();
}
public ObjectNode getDestinationObjectNode() {
return dstObjNode;
if(callEdge.getDestination() instanceof ObjectNode) throw new ClassCastException("destinationNode isn't type of <ObjectNode>");
return (ObjectNode)callEdge.getDestination();
}
 
/*************************************************************
*
*/
public String toString() {
return this.selectedOption.name();
return callEdge.getSelectedOption().name();
}
}
View
154
AlgebraicDataflowArchitectureModel/src/models/controlFlowModel/ControlFlowDelegator.java
package models.controlFlowModel;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.swing.event.ListDataEvent;
 
import models.Edge;
import models.Node;
import models.dataFlowModel.DataFlowGraph;
import models.dataFlowModel.PushPullAttribute;
import models.dataFlowModel.PushPullValue;
 
/**--------------------------------------------------------------------------------
* it has Delegation of Control-Flow algorithm.
*/
public class ControlFlowDelegator {
private ControlFlowGraph controlFlowGraph = null;
/**--------------------------------------------------------------------------------
* [ *public ]
/**--------------------------------------------------------------------------------
* 1. object-nodeとmxCellを対応付ける
* 2. mxGraphを再構築?
* 3. mxGraphModelから委譲可能なmxCellのリストと
*/
public void changeControlFlowGraph() {}
public ControlFlowDelegator(final ControlFlowGraph controlFlowGraph) {
this.controlFlowGraph = controlFlowGraph;
}
 
/**--------------------------------------------------------------------------------
/*************************************************************
* [ *public ]
/*************************************************************
*
*@param callEdge
*/
public ArrayList<StatefulObjectNode> searchDelegatableNodes(final CallEdge callEdge){
ArrayList<StatefulObjectNode> nodes = new ArrayList<>();
public List<ObjectNode> searchDelegatableNodes(final CallEdge callEdge){
List<ObjectNode> nodes = new ArrayList<>();
 
CallGraph callGraph = null;
if(callEdge.getSelectedOption().equals(PushPullValue.PUSH)) {
callGraph = controlFlowGraph.getPushCallGraph();
}
else {
callGraph = controlFlowGraph.getPullCallGraph();
}
Node parentNode = callEdge.getSource();
if(parentNode == null) return null;
// 1. adding parentNode
ObjectNode delegatingNode = callEdge.getSelectedOption().equals(PushPullValue.PUSH)
? (ObjectNode) callEdge.getSource()
: (ObjectNode) callEdge.getDestination();
PushPullAttribute pushPullAttribute = (PushPullAttribute)callEdge.getAttribute();
if( pushPullAttribute == null) return null;
if( !(pushPullAttribute instanceof PushPullAttribute) ) return null;
ObjectNode parentNode = callEdge.getSelectedOption().equals(PushPullValue.PUSH)
? (ObjectNode) callEdge.getDestination()
: (ObjectNode) callEdge.getSource();
 
if(parentNode == null || delegatingNode == null)
throw new NullPointerException("parentNode is null.");
if( !(parentNode instanceof ObjectNode && delegatingNode instanceof ObjectNode))
throw new ClassCastException("callEdge.getSource() is not ObjectNode");
nodes.add(parentNode);
 
// 2. searchinge and adding children node of parentNode
searchOutOfNodes(nodes, parentNode, delegatingNode, callEdge.getSelectedOption());
// add to nodes in PUSH
// if() return nodes;
// switch objects by transfer type
return null;
return nodes;
}
/*************************************************************
*
*/
private void searchOutOfNodes(List<ObjectNode> nodes, ObjectNode currentNode, final ObjectNode delegatingNode, final PushPullValue selectedOption){
switch(selectedOption) {
case PUSH:
if(currentNode.getInEdges().size() == 0) return;
// get child of base-node
for(Edge e : currentNode.getInEdges()) {
ObjectNode foundNode = (ObjectNode)e.getSource();
 
if(foundNode.equals(delegatingNode)) continue;
 
nodes.add(foundNode);
searchOutOfNodes(nodes, foundNode, delegatingNode, selectedOption);
}
break;
case PULL:
case PUSHorPULL:
if(currentNode.getOutEdges().size() == 0) return;
// get child of base-node
for(Edge e : currentNode.getOutEdges()) {
ObjectNode foundNode = (ObjectNode)e.getDestination();
if(foundNode.equals(delegatingNode)) continue;
nodes.add(foundNode);
searchOutOfNodes(nodes, foundNode, delegatingNode, selectedOption);
}
break;
}
}
}