From c0dac1a1db6412f4d5a649139fb39137a83774dd Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sat, 23 Feb 2019 17:40:15 +0100 Subject: [PATCH] generate connectivity tree --- ...tSummarizer.java => INetlistAnalyzer.java} | 14 +- .../org/diylc/common/INetlistProcessor.java | 6 +- .../diylc/components/AbstractComponent.java | 5 + .../src/org/diylc/core/IDIYComponent.java | 9 +- .../src/org/diylc/netlist/ITree.java | 31 ++ .../src/org/diylc/netlist/Summary.java | 8 +- .../src/org/diylc/netlist/Tree.java | 137 +++++++ .../org/diylc/netlist/TreeConnectionType.java | 44 +++ .../src/org/diylc/netlist/TreeException.java | 26 ++ .../src/org/diylc/netlist/TreeLeaf.java | 101 +++++ .../src/org/diylc/presenter/Presenter.java | 16 +- diylc/diylc-library/lib/diylc-core.jar | Bin 258170 -> 262375 bytes .../components/AbstractLeadedComponent.java | 7 + .../components/guitar/HumbuckerPickup.java | 15 + .../components/guitar/SingleCoilPickup.java | 24 ++ .../passive/PotentiometerPanel.java | 11 + .../netlist/AbstractNetlistAnalyzer.java | 362 ++++++++++++++++++ .../netlist/AbstractNetlistSummarizer.java | 186 --------- .../diylc/netlist/GuitarDiagramAnalyzer.java | 170 ++++++++ .../netlist/GuitarDiagramSummarizer.java | 109 ------ diylc/diylc-swing/lib/diylc-core.jar | Bin 258170 -> 262375 bytes diylc/diylc-swing/library/main.jar | Bin 607070 -> 610672 bytes .../src/org/diylc/swing/ActionFactory.java | 10 +- .../swing/plugins/file/FileMenuPlugin.java | 6 +- 24 files changed, 981 insertions(+), 316 deletions(-) rename diylc/diylc-core/src/org/diylc/common/{INetlistSummarizer.java => INetlistAnalyzer.java} (79%) create mode 100644 diylc/diylc-core/src/org/diylc/netlist/ITree.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/Tree.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/TreeConnectionType.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/TreeException.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java create mode 100644 diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistAnalyzer.java delete mode 100644 diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistSummarizer.java create mode 100644 diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramAnalyzer.java delete mode 100644 diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramSummarizer.java diff --git a/diylc/diylc-core/src/org/diylc/common/INetlistSummarizer.java b/diylc/diylc-core/src/org/diylc/common/INetlistAnalyzer.java similarity index 79% rename from diylc/diylc-core/src/org/diylc/common/INetlistSummarizer.java rename to diylc/diylc-core/src/org/diylc/common/INetlistAnalyzer.java index bba1da98..747506e5 100644 --- a/diylc/diylc-core/src/org/diylc/common/INetlistSummarizer.java +++ b/diylc/diylc-core/src/org/diylc/common/INetlistAnalyzer.java @@ -26,8 +26,10 @@ import java.util.List; import org.diylc.netlist.Netlist; import org.diylc.netlist.Node; import org.diylc.netlist.Summary; +import org.diylc.netlist.Tree; +import org.diylc.netlist.TreeException; -public interface INetlistSummarizer { +public interface INetlistAnalyzer { /** * @return summarizer name @@ -37,7 +39,7 @@ public interface INetlistSummarizer { /** * @return name of the icon to use */ - String getIconName(); + String getIconName(); /** * Summarizes all {@link Netlist}s provided. @@ -47,4 +49,12 @@ public interface INetlistSummarizer { * @return */ List summarize(List netlists, Node preferredOutput); + + /** + * + * @param netlist + * @return + * @throws TreeException + */ + Tree constructTree(Netlist netlist) throws TreeException; } diff --git a/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java b/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java index 2c6fc736..1707482e 100644 --- a/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java @@ -40,9 +40,11 @@ public interface INetlistProcessor { List extractNetlists(); /** - * Finds all available {@link INetlistSummarizer} implementations. + * Finds all available {@link INetlistAnalyzer} implementations. * * @return */ - List getNetlistSummarizers(); + List getNetlistAnalyzers(); + + } diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java index ddb5076e..69346c34 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -284,5 +284,10 @@ public abstract class AbstractComponent implements IDIYComponent { @Override public String getControlPointNodeName(int index) { return Integer.toString(index + 1); + } + + @Override + public String getInternalLinkName(int index1, int index2) { + return null; } } diff --git a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java index 436b870e..8f69d692 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -121,7 +121,14 @@ public interface IDIYComponent extends Serializable { * @param index * @return name of the control point node, if the control point represents a graph node, null otherwise. */ - String getControlPointNodeName(int index); + String getControlPointNodeName(int index); + + /** + * @param index1 + * @param index2 + * @return name of the internal linked formed by the two control points, null if they do not form an internal link + */ + String getInternalLinkName(int index1, int index2); /** * Draws the component onto the {@link Graphics2D}. diff --git a/diylc/diylc-core/src/org/diylc/netlist/ITree.java b/diylc/diylc-core/src/org/diylc/netlist/ITree.java new file mode 100644 index 00000000..52c79b4c --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/ITree.java @@ -0,0 +1,31 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.netlist; + +import java.util.List; + +public interface ITree { + + List getChildren(); + + TreeConnectionType getConnectionType(); +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/Summary.java b/diylc/diylc-core/src/org/diylc/netlist/Summary.java index 6bff5fe5..0ed1114f 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/Summary.java +++ b/diylc/diylc-core/src/org/diylc/netlist/Summary.java @@ -27,11 +27,13 @@ public class Summary { private Netlist netlist; private List notes; + private Tree tree; - public Summary(Netlist netlist, List notes) { + public Summary(Netlist netlist, List notes, Tree tree) { super(); this.netlist = netlist; this.notes = notes; + this.tree = tree; } public Netlist getNetlist() { @@ -41,6 +43,10 @@ public class Summary { public List getNotes() { return notes; } + + public Tree getTree() { + return tree; + } @Override public int hashCode() { diff --git a/diylc/diylc-core/src/org/diylc/netlist/Tree.java b/diylc/diylc-core/src/org/diylc/netlist/Tree.java new file mode 100644 index 00000000..dbaf7246 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/Tree.java @@ -0,0 +1,137 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.netlist; + +import java.util.ArrayList; +import java.util.List; + +public class Tree { + + private List children; + private TreeConnectionType connectionType; + private TreeLeaf leaf; + + public Tree(TreeLeaf leaf) { + this.leaf = leaf; + } + + public Tree(List children, TreeConnectionType connectionType) { + this.children = children; + this.connectionType = connectionType; + } + + public List getChildren() { + return children; + } + + public void trimChildren(int count) { + children = children.subList(count, children.size()); + } + + public TreeConnectionType getConnectionType() { + return connectionType; + } + + public TreeLeaf getLeaf() { + return leaf; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((children == null) ? 0 : children.hashCode()); + result = prime * result + ((connectionType == null) ? 0 : connectionType.hashCode()); + result = prime * result + ((leaf == null) ? 0 : leaf.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Tree other = (Tree) obj; + if (children == null) { + if (other.children != null) + return false; + } else if (!children.equals(other.children)) + return false; + if (connectionType != other.connectionType) + return false; + if (leaf == null) { + if (other.leaf != null) + return false; + } else if (!leaf.equals(other.leaf)) + return false; + return true; + } + + @Override + public String toString() { + if (leaf != null) + return leaf.toString(); + + StringBuilder sb = new StringBuilder("("); + boolean first = true; + for(Tree child : children) { + if (!first) + sb.append(" " ).append(connectionType).append(" "); + first = false; + sb.append(child); + } + sb.append(")"); + return sb.toString(); + } + + public String toHTML(int depth) { + if (leaf != null) + return leaf.toHTML(); + + StringBuilder sb = new StringBuilder(); + if (depth > 0 && children.size() > 1) + sb.append("("); + boolean first = true; + for(Tree child : children) { + if (!first) { + sb.append(" ").append(connectionType.toHTML()).append(" "); + if (depth == 0) + sb.append("
"); + } + first = false; + sb.append(child.toHTML(depth + children.size() > 1 ? 1 : 0)); + } + if (depth > 0 && children.size() > 1) + sb.append(")"); + return sb.toString(); + } + + @Override + protected Object clone() throws CloneNotSupportedException { + if (leaf != null) + return new Tree(leaf); + return new Tree(new ArrayList(children), connectionType); + } +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/TreeConnectionType.java b/diylc/diylc-core/src/org/diylc/netlist/TreeConnectionType.java new file mode 100644 index 00000000..eac198f2 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/TreeConnectionType.java @@ -0,0 +1,44 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.netlist; + +public enum TreeConnectionType { + + Series("+", "red"), Parallel("||", "blue"); + + private String label; + private String color; + + private TreeConnectionType(String label, String color) { + this.label = label; + this.color = color; + } + + @Override + public String toString() { + return label; + } + + public String toHTML() { + return "" + label + ""; + } +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/TreeException.java b/diylc/diylc-core/src/org/diylc/netlist/TreeException.java new file mode 100644 index 00000000..e1a672ae --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/TreeException.java @@ -0,0 +1,26 @@ +package org.diylc.netlist; + +public class TreeException extends Exception { + + private static final long serialVersionUID = 1L; + + public TreeException() { + // TODO Auto-generated constructor stub + } + + public TreeException(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public TreeException(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } + + public TreeException(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java b/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java new file mode 100644 index 00000000..f6135947 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/TreeLeaf.java @@ -0,0 +1,101 @@ +/* + + DIY Layout Creator (DIYLC). + Copyright (c) 2009-2018 held jointly by the individual authors. + + This file is part of DIYLC. + + DIYLC is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + DIYLC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DIYLC. If not, see . + +*/ +package org.diylc.netlist; + +import java.util.List; + +import org.diylc.core.IDIYComponent; + +public class TreeLeaf implements ITree { + + private IDIYComponent component; + private int pointIndex1; + private int pointIndex2; + + public TreeLeaf(IDIYComponent component, int pointIndex1, int pointIndex2) { + this.component = component; + this.pointIndex1 = pointIndex1; + this.pointIndex2 = pointIndex2; + } + + public IDIYComponent getComponent() { + return component; + } + + public int getPointIndex1() { + return pointIndex1; + } + + public int getPointIndex2() { + return pointIndex2; + } + + @Override + public List getChildren() { + return null; + } + + @Override + public TreeConnectionType getConnectionType() { + return null; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((component == null) ? 0 : component.hashCode()); + result = prime * result + pointIndex1; + result = prime * result + pointIndex2; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TreeLeaf other = (TreeLeaf) obj; + if (component == null) { + if (other.component != null) + return false; + } else if (!component.equals(other.component)) + return false; + if (pointIndex1 != other.pointIndex1) + return false; + if (pointIndex2 != other.pointIndex2) + return false; + return true; + } + + @Override + public String toString() { + return component.getName() + "." + component.getInternalLinkName(pointIndex1, pointIndex2); + } + + public String toHTML() { + return toString().replace("<", "<").replace(">", ">"); + } +} diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 8f4d82ce..e5150a4c 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -62,7 +62,7 @@ import org.diylc.common.EventType; import org.diylc.common.IComponentFiler; import org.diylc.common.IComponentTransformer; import org.diylc.common.IKeyProcessor; -import org.diylc.common.INetlistSummarizer; +import org.diylc.common.INetlistAnalyzer; import org.diylc.common.IPlugIn; import org.diylc.common.IPlugInPort; import org.diylc.common.PropertyWrapper; @@ -2753,7 +2753,7 @@ public class Presenter implements IPlugInPort { posList.add(new Position(switches.get(j), positions[j])); } List connections = getConnections(switchPositions); - Netlist graph = constructGraph(nodes, connections, continuity); + Netlist graph = constructNetlist(nodes, connections, continuity); // merge graphs that are effectivelly the same if (result.containsKey(graph)) { @@ -2785,7 +2785,7 @@ public class Presenter implements IPlugInPort { return netlists; } - private Netlist constructGraph(List nodes, List connections, List continuityAreas) { + private Netlist constructNetlist(List nodes, List connections, List continuityAreas) { Netlist netlist = new Netlist(); // debugging code @@ -2827,7 +2827,7 @@ public class Presenter implements IPlugInPort { } } - netlist.done(); + Collections.sort(netlist.getSwitchSetup()); return netlist; } @@ -2889,15 +2889,15 @@ public class Presenter implements IPlugInPort { } @Override - public List getNetlistSummarizers() { + public List getNetlistAnalyzers() { Set> classes; try { classes = Utils.getClasses("org.diylc.netlist"); - List result = new ArrayList(); + List result = new ArrayList(); for (Class clazz : classes) { - if (!Modifier.isAbstract(clazz.getModifiers()) && INetlistSummarizer.class.isAssignableFrom(clazz)) { - result.add((INetlistSummarizer) clazz.newInstance()); + if (!Modifier.isAbstract(clazz.getModifiers()) && INetlistAnalyzer.class.isAssignableFrom(clazz)) { + result.add((INetlistAnalyzer) clazz.newInstance()); } } return result; diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index cf84282b7302563fdfdb041268010505a7282cd5..c61dc1915e95e94ba91d6cccf3a4b5665c10d069 100644 GIT binary patch delta 41887 zcmZ6yWmp_Rv#`xB5D4z>?(XjH4gnI}9TFhGLh#@c+}+*X2_D?tAvgqwmxq1McdqmO z;Ocv7tE;+us(ZR?hKCL0eLoaL6?sS~I0y(>2#A4j?HEKF$o{v2=lMTH91no_z0?Cx zzL)Jl{J3-g&O0{&7$Dzj#O(uE-mme1eDBxVK)Uzq03g@X@LrNZGQO8; z|1E#~xBQRoF-WlO14!O?9SSJHcN?Zq%O8Unn-07@Yk9MQ<3-X#fGfnW&{P9@mNAG|0a>YH7q$t_#skB|@${m>8)Byria z7>PthkjS-hgy@j(Rf|c8!8Jz6YQW%2DGfF@OeF{gIGP{;(tnJ(toj_pLO?)_K*aef zVVr?b0`GImUzcW>uzV^}zrjAfDd- zsNb4}2~sk1wY73_6}30A_3$)vW-_rga&d`>?w0EnK?!;-udXhig4h zEl2K1)PE?~PNz$gI1=9G=0V0{)T^&u!5(o`0Al#nh(GR-Grk_pXliXEH#NNPY&9R4 zFs{g`cCm0BX z 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 delta 38118 zcmY(p1yCGK+pxM34;P9~TUv<7z zQGIRqtvz?oO!s6z0OMf`9aTjh8U_gp3IPf#OI|e&l@2=dwc-2sUz5NGAbV?d0o2g1 zqY3Rm;)E;!!5cRLnBLlb0NYzj1Qd8{wSWw7Z4i*>t!)Q#zO`3Ch&&}U^V@GVXlBe; zA4*XFzkgUMswF_&|6fS|1@Y=M#h?U;maqzq^rm?L&HvU?!3e*#rZB8;Z88kwf9=mc zm>A$2Xu`L{zK!6a{(5VlP#@n09?*sXZ!myS0s%*?_b_ig$#}t#9#Vp8h?Oa#7$DlK zU8U(A+b@XFP*DA_3DsiwDK8Ds=sy$QVMD*^m64M{#78NAK)|0`8e(aLMi>G}bl^8g zNT8p6Q?g=+gpAxV5 z$dc#4Di>TwTHL?ls(G}b?1_mD0bIB@mMlX4Ay~8D$#MR*{!R0A27Pvb`hDPiE_{su zw`0on%ly3p1F||sWbscnV`(Y*_v%C|7NT3y9205u_2juxT^t$$#qgd={Nsj{4|s5l ztE7WFoES+u19fc(%627qAjQvSX(NAHrYo`%a=NoLKjQ??!1S(U{}3u(^`&h3gMqn-+uiq#Q#@e2>(@>67_GW!?D-IoB#=Vc=#Y$B{LUWD`yvVS35gn zCo3;ACl(W1V`t~6SYad}J5CU7Rm(Fj-bR;HxqlJkZBKrGHhC4rM;=7epMj*~J