From ec7244042d56efdf1d169d88a201ac3a20401b97 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sun, 17 Feb 2019 09:31:42 +0100 Subject: [PATCH] wiring analysis improvements --- .../src/org/diylc/netlist/Group.java | 7 ++ diylc/diylc-library/lib/diylc-core.jar | Bin 258064 -> 258170 bytes .../netlist/AbstractNetlistSummarizer.java | 79 ++++++++++++++++-- .../netlist/GuitarDiagramSummarizer.java | 32 +++---- diylc/diylc-swing/lib/diylc-core.jar | Bin 258064 -> 258170 bytes diylc/diylc-swing/library/main.jar | Bin 605771 -> 607070 bytes .../src/org/diylc/swing/ActionFactory.java | 10 +-- 7 files changed, 104 insertions(+), 24 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/netlist/Group.java b/diylc/diylc-core/src/org/diylc/netlist/Group.java index 5843691a..5cb3f844 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/Group.java +++ b/diylc/diylc-core/src/org/diylc/netlist/Group.java @@ -96,4 +96,11 @@ public class Group implements Comparable { public int compareTo(Group o) { return toString().compareToIgnoreCase(o.toString()); } + + @Override + public Group clone() { + Group g = new Group(); + g.nodes.addAll(nodes); + return g; + } } diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 7a98c1fc6cb66d9b1ad942bfb81a352c0576127b..cf84282b7302563fdfdb041268010505a7282cd5 100644 GIT binary patch delta 6745 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 diff --git a/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistSummarizer.java b/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistSummarizer.java index 42034bd7..6bf2dd15 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistSummarizer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/AbstractNetlistSummarizer.java @@ -22,9 +22,14 @@ package org.diylc.netlist; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; +import org.diylc.core.IDIYComponent; + public abstract class AbstractNetlistSummarizer { public AbstractNetlistSummarizer() { @@ -44,6 +49,19 @@ public abstract class AbstractNetlistSummarizer { return res; } + protected List find(Set typeNames, String nodeName, Netlist netlist) { + List res = new ArrayList(); + for (Group g : netlist.getGroups()) { + for (Node n : g.getNodes()) { + if (typeNames.contains(n.getComponent().getClass().getCanonicalName()) && + (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + res.add(n); + } + } + } + return res; + } + protected List find(Set typeNames, String nodeName, Netlist netlist, List inGroupWith) { List res = new ArrayList(); for (Group g : netlist.getGroups()) { @@ -70,15 +88,58 @@ public abstract class AbstractNetlistSummarizer { return res; } - protected Netlist eliminate(Netlist netlist, Set nodes) { + protected List find(Set typeNames, String nodeName, Netlist netlist, Collection> belongTo) { + List res = new ArrayList(); + for (Group g : netlist.getGroups()) { + + for (Node n : g.getNodes()) { + if ((belongTo == null || belongTo.contains(n.getComponent())) && typeNames.contains(n.getComponent().getClass().getCanonicalName()) && + (nodeName == null || n.getDisplayName().equalsIgnoreCase(nodeName))) { + res.add(n); + } + } + } + return res; + } + + protected boolean allMatch(Collection nodes, String name) { + for (Node n : nodes) + if (!n.getDisplayName().equalsIgnoreCase(name)) + return false; + + return true; + } + + protected boolean allComponentsMatch(Collection nodes, Set> components) { + Set> extracted = extractComponents(nodes); + return extracted.containsAll(components); + } + + protected Set> extractComponents(Collection nodes) { + Set> components = new HashSet>(); + for (Node n : nodes) + components.add(n.getComponent()); + return components; + } + + protected List extractNames(Collection> components) { + List names = new ArrayList(); + for (IDIYComponent c : components) + names.add(c.getName() + " " + c.getValueForDisplay()); + Collections.sort(names); + return names; + } + + protected Netlist simplify(Netlist netlist, Set nodesToMerge, Collection nodesToPurge) { Netlist res = new Netlist(); res.getSwitchSetup().addAll(netlist.getSwitchSetup()); - + Group merged = new Group(); + // merge for (Group g : netlist.getGroups()) { boolean needsMerging = false; - for (Node n : nodes) { + for (Node n : nodesToMerge) { if (g.getNodes().contains(n)) { needsMerging = true; break; @@ -86,17 +147,25 @@ public abstract class AbstractNetlistSummarizer { } if (needsMerging) { for (Node n : g.getNodes()) { - if (!nodes.contains(n)) + if (!nodesToMerge.contains(n)) merged.getNodes().add(n); } } else { - res.getGroups().add(g); + res.getGroups().add(g.clone()); } } if (!merged.getNodes().isEmpty()) res.getGroups().add(merged); + // purge + for (Group g : res.getGroups()) { + g.getNodes().removeAll(nodesToPurge); + } + + System.out.println("Before:\n" + netlist); + System.out.println("After:\n" + res); + return res; } diff --git a/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramSummarizer.java b/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramSummarizer.java index 95e22b23..15c23e18 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramSummarizer.java +++ b/diylc/diylc-library/src/org/diylc/netlist/GuitarDiagramSummarizer.java @@ -35,6 +35,7 @@ import org.diylc.components.guitar.P90Pickup; import org.diylc.components.guitar.PBassPickup; import org.diylc.components.guitar.SingleCoilPickup; import org.diylc.components.passive.PotentiometerPanel; +import org.diylc.core.IDIYComponent; public class GuitarDiagramSummarizer extends AbstractNetlistSummarizer implements INetlistSummarizer { @@ -74,32 +75,35 @@ public class GuitarDiagramSummarizer extends AbstractNetlistSummarizer implement private Summary summarize(Netlist netlist, Node preferredOutput) { List notes = new ArrayList(); - List jackTipNodes = find(JACK_TYPES, "Tip", netlist, null); - List jackSleeveNodes = find(JACK_TYPES, "Sleeve", netlist, null); + List jackTipNodes = find(JACK_TYPES, "Tip", netlist); + List jackSleeveNodes = find(JACK_TYPES, "Sleeve", netlist); - netlist = findAndEliminateVolumePot(netlist, jackTipNodes, jackSleeveNodes, notes); + netlist = findAndEliminateVolumeControls(netlist, jackTipNodes, jackSleeveNodes, notes); return new Summary(netlist, notes); } - private Netlist findAndEliminateVolumePot(Netlist netlist, List jackTipGroups, List jackSleeveGroups, List notes) { + private Netlist findAndEliminateVolumeControls(Netlist netlist, List jackTipGroups, List jackSleeveGroups, List notes) { List potTipNodes = find(POT_TYPES, null, netlist, jackTipGroups); List potSleeveNodes = find(POT_TYPES, null, netlist, jackSleeveGroups); - if (!potTipNodes.isEmpty() && !potSleeveNodes.isEmpty()) { - if (potTipNodes.size() == 1 && potTipNodes.get(0).getDisplayName().equals("2") && - potSleeveNodes.size() == 1 && potSleeveNodes.get(0).getDisplayName().equals("3")) { - notes.add("Volume pot detected: " + potTipNodes.get(0).getComponent().getName()); + if (!potTipNodes.isEmpty() && !potSleeveNodes.isEmpty()) { + Set> pots = extractComponents(potTipNodes); + List potInputNodes = find(POT_TYPES, "1", netlist, pots); + + if (allMatch(potTipNodes, "2") && allMatch(potSleeveNodes, "3") && allComponentsMatch(potInputNodes, pots)) { + List potNames = extractNames(pots); + notes.add("Detected volume control(s): " + potNames); - Set toEliminate = new HashSet(potTipNodes); - toEliminate.addAll(potSleeveNodes); - return eliminate(netlist, toEliminate); - } else if (potTipNodes.size() > 1 || potSleeveNodes.size() > 1) { - notes.add("Detected multiple volume pots, test inconclusive."); + Set toMerge = new HashSet(potTipNodes); + toMerge.addAll(potInputNodes); + return simplify(netlist, toMerge, potSleeveNodes); + } else { + notes.add("Detected incorrectly wired volume control(s)."); return netlist; } } - notes.add("No volume pot detected."); + notes.add("No volume controls detected."); return netlist; } } diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index 7a98c1fc6cb66d9b1ad942bfb81a352c0576127b..cf84282b7302563fdfdb041268010505a7282cd5 100644 GIT binary patch delta 6745 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index c4618835ade7364af05ecb6aec670d4484a2c0dc..103891b7ab7e42295dab0157cf09eb7793abc8dc 100644 GIT binary patch delta 10596 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 delta 9299 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 J%$Fs&{{b+4W=#M9 diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index 18307302..dc9268a6 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -1695,7 +1695,7 @@ public class ActionFactory { this.plugInPort = plugInPort; this.swingUI = swingUI; this.summarizer = summarizer; - putValue(AbstractAction.NAME, "Analyze " + summarizer.getName()); + putValue(AbstractAction.NAME, "Analyze " + summarizer.getName() + " (beta)"); putValue(AbstractAction.SMALL_ICON, Enum.valueOf(IconLoader.class, summarizer.getIconName()).getIcon()); } @@ -1703,26 +1703,26 @@ public class ActionFactory { public void actionPerformed(ActionEvent e) { List netlists = plugInPort.extractNetlists(); if (netlists == null || netlists.isEmpty()) { - swingUI.showMessage("The generated netlist is empty, nothing to show.", "Netlist", ISwingUI.INFORMATION_MESSAGE); + swingUI.showMessage("The generated netlist is empty, nothing to show.", "Analyze " + summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); return; } List res = summarizer.summarize(netlists, null); if (res == null) { - swingUI.showMessage("The generated summary is empty, nothing to show.", "Analyze", ISwingUI.INFORMATION_MESSAGE); + swingUI.showMessage("The generated summary is empty, nothing to show.", "Analyze " + summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); return; } StringBuilder sb = new StringBuilder(""); for (Summary summary : res) { - sb.append("

Switch configuration: ").append(summary.getNetlist().getSwitchSetup()).append("

Notes:

"); + sb.append("

Switch configuration: ").append(summary.getNetlist().getSwitchSetup()).append("

"); for (String v : summary.getNotes()) { sb.append("  ").append(v).append("
"); } sb.append("



"); } sb.append(""); - new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), "Netlist", new Dimension(600, 480)).setVisible(true); + new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), "Analyze " + summarizer.getName(), new Dimension(600, 480)).setVisible(true); } } }