connection.java
来自「plugin for eclipse」· Java 代码 · 共 317 行
JAVA
317 行
/*
* Created on May 9, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package isis.anp.nesc.ot;
import isis.anp.common.CodeLocation;
import isis.anp.common.ObjectTreeBuilderContext;
import isis.anp.common.ParserMessage;
import isis.anp.common.TNode;
import java.util.Iterator;
import java.util.List;
/**
* @author sallai
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class Connection {
ObjectTreeBuilderContext ctx;
ConfigurationImplementation configurationImplementation;
/**
* @param ctx
*/
public Connection(ObjectTreeBuilderContext ctx) {
this.ctx = ctx;
}
public class Direction {
public final static int EQUATE = 0;
public final static int FROM1TO2 = 1;
public final static int FROM2TO1 = 2;
}
Port endPoint1;
List parameterList1;
Port endPoint2;
List parameterList2;
int direction;
/**
* @return Returns the direction.
*/
public int getDirection() {
return direction;
}
/**
* @param direction
* The direction to set.
*/
public void setDirection(int direction) {
this.direction = direction;
}
public void setEndPoints(List idList1, List argExprList1, List idList2,
List argExprList2) {
Configuration config = configurationImplementation.getConfiguration();
parameterList1 = argExprList1;
parameterList2 = argExprList2;
// endPoint1 -> endPoint2
if (direction == Connection.Direction.FROM1TO2) {
endPoint1 = config
.getPortByPath(idList1, Port.Direction.USES, null);
endPoint2 = config.getPortByPath(idList2, Port.Direction.PROVIDES,
null);
// resolve implicit wiring
if (endPoint1 == null && endPoint2 != null) {
if (endPoint2.getTypeString() != null) {
endPoint1 = config.getPortByPath(idList1,
Port.Direction.USES, endPoint2.getTypeString());
}
}
// resolve implicit wiring
if (endPoint2 == null && endPoint1 != null) {
if (endPoint1.getTypeString() != null) {
endPoint2 = config.getPortByPath(idList2,
Port.Direction.PROVIDES, endPoint1.getTypeString());
}
}
}
// endPoint1 <- endPoint2
if (direction == Connection.Direction.FROM2TO1) {
endPoint1 = config.getPortByPath(idList1, Port.Direction.PROVIDES,
null);
endPoint2 = config
.getPortByPath(idList2, Port.Direction.USES, null);
// resolve implicit wiring
if (endPoint1 == null && endPoint2 != null) {
if (endPoint2.getTypeString() != null) {
endPoint1 = config.getPortByPath(idList1,
Port.Direction.PROVIDES, endPoint2.getTypeString());
}
}
// resolve implicit wiring
if (endPoint2 == null && endPoint1 != null) {
if (endPoint1.getTypeString() != null) {
endPoint2 = config.getPortByPath(idList2,
Port.Direction.USES, endPoint1.getTypeString());
}
}
}
// endPoint1 == endPoint2
if (direction == Connection.Direction.EQUATE) {
// try PROVIDES
Port tmp1EndPoint1 = config.getPortByPath(idList1,
Port.Direction.PROVIDES, null);
Port tmp1EndPoint2 = config.getPortByPath(idList2,
Port.Direction.PROVIDES, null);
// resolve implicit wiring
if (tmp1EndPoint1 == null && tmp1EndPoint2 != null) {
if (tmp1EndPoint2.getTypeString() != null) {
tmp1EndPoint1 = config.getPortByPath(idList1,
Port.Direction.PROVIDES, tmp1EndPoint2
.getTypeString());
}
}
// resolve implicit wiring
if (tmp1EndPoint2 == null && tmp1EndPoint1 != null) {
if (tmp1EndPoint1.getTypeString() != null) {
tmp1EndPoint2 = config.getPortByPath(idList2,
Port.Direction.PROVIDES, tmp1EndPoint1
.getTypeString());
}
}
// try USES
Port tmp2EndPoint1 = config.getPortByPath(idList1,
Port.Direction.USES, null);
Port tmp2EndPoint2 = config.getPortByPath(idList2,
Port.Direction.USES, null);
// resolve implicit wiring
if (tmp2EndPoint1 == null && tmp2EndPoint2 != null) {
if (tmp2EndPoint2.getTypeString() != null) {
tmp2EndPoint1 = config.getPortByPath(idList1,
Port.Direction.USES, tmp2EndPoint2.getTypeString());
}
}
// resolve implicit wiring
if (tmp2EndPoint2 == null && tmp2EndPoint1 != null) {
if (tmp2EndPoint1.getTypeString() != null) {
tmp2EndPoint2 = config.getPortByPath(idList2,
Port.Direction.USES, tmp2EndPoint1.getTypeString());
}
}
if (tmp1EndPoint1 != null && tmp1EndPoint2 != null
&& tmp2EndPoint1 != null && tmp2EndPoint2 != null) {
String err = "Ambiguous wiring: " + idListToString(idList1)
+ " " + directionToString(direction) + " "
+ idListToString(idList2) + " matches both "
+ tmp1EndPoint1.getComponent().getName() + "."
+ tmp1EndPoint1.getName() + " "
+ directionToString(direction) + " "
+ tmp1EndPoint2.getComponent().getName() + "."
+ tmp1EndPoint2.getName() + " and "
+ tmp2EndPoint1.getComponent().getName() + "."
+ tmp2EndPoint1.getName() + " "
+ directionToString(direction) + " "
+ tmp2EndPoint2.getComponent().getName() + "."
+ tmp2EndPoint2.getName();
// ctx.addMsg(new ParserMessage(null,err,new
// CodeLocation((TNode)idList1.get(0))));
ctx.addMsg(new ParserMessage(ParserMessage.ERROR, err,
new CodeLocation((TNode) idList1.get(0)), null));
// System.out.println(err);
} else if (tmp1EndPoint1 != null && tmp1EndPoint2 != null) {
endPoint1 = tmp1EndPoint1;
endPoint2 = tmp1EndPoint2;
} else if (tmp2EndPoint1 != null && tmp2EndPoint2 != null) {
endPoint1 = tmp2EndPoint1;
endPoint2 = tmp2EndPoint2;
}
}
// FIXME: check port compatibilities
// link connection to ports
if (endPoint1 != null && endPoint2 != null) {
endPoint1.addConnection(this);
endPoint2.addConnection(this);
} else {
if (endPoint1 == null) {
String err = "Cannot find endpoint: " + idListToString(idList1);
// ctx.addMsg(new ParserMessage(null,err,new
// CodeLocation((TNode)idList1.get(0))));
ctx.addMsg(new ParserMessage(ParserMessage.ERROR, err,
new CodeLocation((TNode) idList1.get(0)), null));
}
if (endPoint2 == null) {
String err = "Cannot find endpoint: " + idListToString(idList2);
// ctx.addMsg(new ParserMessage(null,err,new
// CodeLocation((TNode)idList2.get(0))));
ctx.addMsg(new ParserMessage(ParserMessage.ERROR, err,
new CodeLocation((TNode) idList2.get(0)), null));
}
}
}
String idListToString(List idList) {
StringBuffer sb = new StringBuffer();
for (Iterator i = idList.iterator(); i.hasNext();) {
TNode n = (TNode) i.next();
sb.append(n.getText());
if (i.hasNext())
sb.append(".");
}
return sb.toString();
}
String directionToString(int direction) {
switch (direction) {
case Direction.FROM1TO2:
return "->";
case Direction.FROM2TO1:
return "<-";
case Direction.EQUATE:
return "=";
default:
return "<null>";
}
}
/**
* @param o
*/
public void outline(Outline o) {
if (endPoint1 != null) {
o.append(endPoint1.getComponent().getName());
o.append(".");
o.append(endPoint1.getName());
} else {
o.append("<null>");
}
if (direction == Connection.Direction.FROM1TO2) {
o.append(" -> ");
} else if (direction == Connection.Direction.FROM2TO1) {
o.append(" <- ");
} else {
o.append(" = ");
}
if (endPoint2 != null) {
o.append(endPoint2.getComponent().getName());
o.append(".");
o.append(endPoint2.getName());
} else {
o.append("<null>");
}
}
/**
* @return Returns the configurationImplementation.
*/
public ConfigurationImplementation getConfigurationImplementation() {
return configurationImplementation;
}
/**
* @param configurationImplementation
* The configurationImplementation to set.
*/
public void setConfigurationImplementation(
ConfigurationImplementation configurationImplementation) {
this.configurationImplementation = configurationImplementation;
}
public ConfigurationImplementation getParent() {
return getConfigurationImplementation();
}
public Port getSrc() {
if (direction == Connection.Direction.FROM1TO2)
return endPoint1;
else
return endPoint2;
}
public Port getDst() {
if (direction == Connection.Direction.FROM1TO2)
return endPoint2;
else
return endPoint1;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?