BUGFIX: mix-up between name and type

This commit is contained in:
rusefillc 2021-01-09 19:40:52 -05:00
parent 241699d597
commit e5ad944b4a
6 changed files with 30 additions and 18 deletions

View File

@ -40,7 +40,7 @@ public class Networks {
}
public static boolean isLocalNetwork(String name) {
return name.startsWith("N-00");
return name != null && name.startsWith("N-00");
}
private void registerNet(String name) {

View File

@ -83,6 +83,7 @@ public class PcbMergeTool {
}
static void mergePcb(PcbNode destNode, PcbNode source, Networks networks) {
networks.registerAdditionalBoard(destNode);
Networks.BoardState state = networks.registerAdditionalBoard(source);
@ -183,10 +184,10 @@ public class PcbMergeTool {
private static void fixNetId(Networks networks, PcbNode node, Networks.BoardState state) {
NetNode net = node.find(TOKEN_NET);
String globalName;
if (state.netNameInLocalToNetNameInCombined.containsKey(net.nodeName)) {
globalName = state.netNameInLocalToNetNameInCombined.get(net.nodeName);
if (state.netNameInLocalToNetNameInCombined.containsKey(net.getName())) {
globalName = state.netNameInLocalToNetNameInCombined.get(net.getName());
} else {
globalName = networks.registerNetworkIfPcbSpecific(net.nodeName);
globalName = networks.registerNetworkIfPcbSpecific(net.getName());
}
@ -196,9 +197,11 @@ public class PcbMergeTool {
globalName = newName;
net.setName(newName);
}
net.setId(networks.getId(globalName));
if (net.getName() != null)
// todo: better handling of the whole 'with id no name' drama
if (net.getName() != null) {
net.setId(networks.getId(globalName));
net.setName(globalName);
}
}
public static void log(String s) {

View File

@ -15,6 +15,9 @@ public class NetNode extends PcbNode {
super(TOKEN_NET, i, children);
id = Integer.parseInt(getChild(0));
name = children.size() > 1 ? getChild(1) : null;
// todo: better handling of the whole 'with id no name' drama
// if (name == null && id != 1)
// throw new IllegalArgumentException("Only net '1' has no name: " + id);
if (name != null)
System.out.println("NetNode(" + name + " network: " + id + ")");

View File

@ -21,12 +21,12 @@ public class PcbNode {
public static final String TOKEN_GR_LINE = "gr_line";
public static final String TOKEN_ZONE = "zone";
public static final String TOKEN_VIA = "via";
public final String nodeName;
public final String nodeType;
public final int closingIndex;
public final List<Object> children;
public PcbNode(String nodeName, int closingIndex, List<Object> children) {
this.nodeName = nodeName;
public PcbNode(String nodeType, int closingIndex, List<Object> children) {
this.nodeType = nodeType;
this.closingIndex = closingIndex;
this.children = children;
}
@ -53,7 +53,7 @@ public class PcbNode {
@Override
public String toString() {
return "PcbNode{" +
nodeName +
nodeType +
", children=" + children.size() +
'}';
}
@ -165,7 +165,7 @@ public class PcbNode {
}
private void pack(StringBuilder sb, String prefix) {
sb.append(prefix).append("(").append(nodeName);
sb.append(prefix).append("(").append(nodeType);
for (Object child : children) {
if (child instanceof String) {
@ -216,7 +216,7 @@ public class PcbNode {
public <T extends PcbNode> T find(String key) {
List<PcbNode> r = iterate(key);
if (r.size() != 1)
throw new IllegalStateException("Exactly one " + key + " expected in " + nodeName);
throw new IllegalStateException("Exactly one '" + key + "' expected in " + nodeType);
return (T) r.get(0);
}
@ -237,7 +237,7 @@ public class PcbNode {
public <T extends PcbNode> List<T> iterate(String key) {
List<T> result = new ArrayList<>();
for (PcbNode p : nodes()) {
if (p.nodeName.equals(key))
if (p.nodeType.equals(key))
result.add((T) p);
}
return result;
@ -247,7 +247,7 @@ public class PcbNode {
public <T extends PcbNode> List<T> iterateRecursive(String key) {
List<T> result = new ArrayList<>();
for (PcbNode p : nodes()) {
if (p.nodeName.equals(key)) {
if (p.nodeType.equals(key)) {
result.add((T) p);
} else {
result.addAll(p.iterateRecursive(key));

View File

@ -57,7 +57,9 @@ public class PcbMergeTest {
" (net 0 \"\")\n" +
" (net 1 \"Net1\")\n" +
" (net 2 \"EXT_SPI_SCK\")\n" +
" (pad \"S2\" smd oval\n" +
" (module \"C0603\" (layer F.Cu) (tedit 4289BEAB) (tstamp 539EEDBF)\n" +
" (at 16.45 -105.35)\n" +
" (pad \"S2\" smd oval\n" +
" (at 2.2 2.2)\n" +
"\n" +
" (size 0.25 0.5)\n" +
@ -66,21 +68,25 @@ public class PcbMergeTest {
"\n" +
" (net 2 \"EXT_SPI_SCK\")\n" +
")\n" +
")\n" +
")";
PcbNode node2 = PcbNode.parse(pcb2);
assertEquals(3, node2.iterate(TOKEN_NET).size());
PcbMergeTool.mergePcb(node, node2, new Networks());
List<PcbNode> pads = node.iterate(TOKEN_PAD);
List<PcbNode> pads = node.iterateRecursive(TOKEN_PAD);
assertEquals(2, pads.size());
NetNode net1 = pads.get(0).find(TOKEN_NET);
NetNode net2 = pads.get(1).find(TOKEN_NET);
assertEquals("2", net1.getId());
assertEquals("3", net2.getId());
assertEquals("4", net2.getId());
assertEquals("\"CAN_VIO\"", net1.getName());
assertEquals(4, node.iterate(TOKEN_NET).size());
assertEquals(6, node.iterateRecursive(TOKEN_NET).size());
}
@Test

View File

@ -17,7 +17,7 @@ public class PcbNodeTest {
@Test
public void testParser() {
PcbNode n = PcbNode.parse("(version 3\r\n)");
assertEquals("version", n.nodeName);
assertEquals("version", n.nodeType);
assertEquals(1, n.getChildren().size());
assertEquals("(version 3)\r\n", n.pack());