/*
* Copyright (C) Yutaka Matsuno 2010-2012 All rights reserved.
*/
package net.dependableos.dcase.diagram.editor.complement;
import net.dependableos.dcase.Argument;
import net.dependableos.dcase.BasicLink;
import net.dependableos.dcase.BasicNode;
import net.dependableos.dcase.DcaseFactory;
import net.dependableos.dcase.diagram.common.model.NodeType;
import net.dependableos.dcase.diagram.common.util.Menus;
import net.dependableos.dcase.diagram.editor.common.util.DcaseEditorUtil;
import net.dependableos.dcase.impl.ArgumentImpl;
import org.eclipse.emf.ecore.EObject;
/**
* This class provides methods that deal with the events that are generated when a node of the complement menu selected.
*/
public class NodeSelectionListener extends AbstractComplementSelectionListener {
/**
* the selected type of the node to add.
*/
private NodeType type;
/**
* Creates the listener and initializes it.
*
* @param type the selected type of the node to add.
*/
public NodeSelectionListener(NodeType type) {
super(Menus.NodeSelectionListener_0);
this.type = type;
}
/**
* Returns the the selected type of the node to add.
*
* @return the selected type of the node to add.
*/
public NodeType getType() {
return type;
}
/**
* Returns the model to add.
*
* @return the model to add.
*/
@Override
protected Argument getModel() {
// creates the argument.
ArgumentImpl argument = (ArgumentImpl) DcaseFactory.eINSTANCE
.createArgument();
// creates the node to add.
BasicNode node = null;
switch (type) {
case CONTEXT:
node = DcaseFactory.eINSTANCE.createContext();
break;
case EVIDENCE:
node = DcaseFactory.eINSTANCE.createEvidence();
break;
case GOAL:
node = DcaseFactory.eINSTANCE.createGoal();
break;
case JUSTIFICATION:
node = DcaseFactory.eINSTANCE.createJustification();
break;
case MONITOR:
node = DcaseFactory.eINSTANCE.createMonitor();
break;
case POLICY:
node = DcaseFactory.eINSTANCE.createPolicy();
break;
case STRATEGY:
node = DcaseFactory.eINSTANCE.createStrategy();
break;
case SYSTEM:
node = DcaseFactory.eINSTANCE.createSystem();
break;
case UNDEVELOPED:
node = DcaseFactory.eINSTANCE.createUndeveloped();
break;
case USERDEF001:
node = DcaseFactory.eINSTANCE.createUserdef001();
break;
case USERDEF002:
node = DcaseFactory.eINSTANCE.createUserdef002();
break;
case USERDEF003:
node = DcaseFactory.eINSTANCE.createUserdef003();
break;
case USERDEF004:
node = DcaseFactory.eINSTANCE.createUserdef004();
break;
case USERDEF005:
node = DcaseFactory.eINSTANCE.createUserdef005();
break;
case USERDEF006:
node = DcaseFactory.eINSTANCE.createUserdef006();
break;
default:
return null;
}
// creates the link.
BasicLink link;
if (type == NodeType.CONTEXT) {
link = DcaseFactory.eINSTANCE.createDcaseLink002();
} else {
link = DcaseFactory.eINSTANCE.createDcaseLink001();
}
// sets the target.
link.setTarget(node);
EObject selectedObject = DcaseEditorUtil.getSelectedObject();
if (selectedObject instanceof BasicNode) {
link.setSource((BasicNode) selectedObject);
}
// add the node and the link to the argument.
argument.getRootBasicNode().add(node);
argument.getRootBasicLink().add(link);
return argument;
}
}