/**
*
*/
package se.sics.kompics.ide.model.ast;
import java.util.LinkedList;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jdt.core.dom.ASTNode;
import se.sics.kompics.ide.Activator;
import se.sics.kompics.ide.Model;
import se.sics.kompics.model.kompicsComponents.Component;
import se.sics.kompics.model.kompicsComponents.Handler;
import se.sics.kompics.model.kompicsComponents.KompicsComponentsFactory;
import se.sics.kompics.model.kompicsComponents.KompicsComponentsPackage;
import se.sics.kompics.model.kompicsComponents.Port;
import se.sics.kompics.model.kompicsComponents.PortType;
import se.sics.kompics.model.kompicsComponents.Subscription;
/**
* The <code>ASTPort</code> .
*
* @author Lars Kroll <lkr@lars-kroll.com>
* @version $Id: $
*
*/
public class ASTPort extends ASTModelObject {
private KompicsComponentsFactory factory = KompicsComponentsFactory.eINSTANCE;
private Port model;
private List<ASTSubscription> subscribers = new LinkedList<ASTSubscription>();
public ASTPort(String id, Port model, ASTNode node) {
super(id, node, model.eClass());
this.model = model;
}
/* (non-Javadoc)
* @see se.sics.kompics.ide.model.ast.ASTModelObject#getEObject()
*/
@Override
public EObject getEObject() {
return model;
}
public Port getModel() {
return model;
}
public List<ASTSubscription> getSubs() {
return subscribers;
}
public void addChild(ASTSubscription asts) {
super.addChild(asts);
this.subscribers.add(asts);
}
/* (non-Javadoc)
* @see se.sics.kompics.ide.model.ast.ASTModelObject#addToModel(org.eclipse.emf.ecore.EObject, int)
*/
@Override
public void addToModel(EObject obj, int environmentModifier) {
int classifID = obj.eClass().getClassifierID();
if (classifID == KompicsComponentsPackage.PORT_TYPE) {
model.setPortType((PortType) obj);
} else if (classifID == KompicsComponentsPackage.SUBSCRIPTION) {
model.getSubscribers().add((Subscription) obj);
}
}
public ASTPort copy(String id, Component c) {
Port p = factory.createPort();
ASTPort dupl = new ASTPort(id + "/Port:" + getIdCore(), p, this.getNode());
ASTPort existing = Model.add(dupl);
if (!existing.equals(dupl)) {
return existing;
}
p.setComponent(c);
p.setPortType(this.model.getPortType());
p.setProvided(this.model.isProvided());
for (ASTSubscription asts : this.subscribers) {
ASTSubscription copyS = asts.copy(dupl);
dupl.subscribers.add(copyS);
dupl.model.getSubscribers().add(copyS.getModel());
}
dupl.setBinding(getBinding());
dupl.setLocationBinding(getLocationBinding());
for (ASTModelObject astmo : this.getChildren()) {
dupl.addChild(astmo);
}
return dupl;
}
private String getIdCore() {
String id = getId();
Activator.log("Trying to split ID: " + id);
//String[] split = getId().split("/Port:", 1);
int i = id.indexOf("/Port:");
if (i <= 0) {
Activator.log("Substring '/Port:' not found :(");
}
String core = id.substring(i);
return core;
}
}