From 7af919b30338ce7a1e0eb15873d5905f444456b1 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Sat, 9 Mar 2019 18:01:42 +0100 Subject: [PATCH] move section handling to base component interface do analysis in background thread --- .../diylc/components/AbstractComponent.java | 8 +- .../src/org/diylc/core/IDIYComponent.java | 10 +- .../src/org/diylc/netlist/Node.java | 3 +- diylc/diylc-library/lib/diylc-core.jar | Bin 273513 -> 273620 bytes .../src/org/diylc/netlist/ISpiceMapper.java | 4 +- diylc/diylc-swing/lib/diylc-core.jar | Bin 273513 -> 273620 bytes diylc/diylc-swing/library/main.jar | Bin 615549 -> 615578 bytes .../src/org/diylc/swing/ActionFactory.java | 132 +++++++++++------- 8 files changed, 98 insertions(+), 59 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java index 1270cc73..a763931d 100644 --- a/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java +++ b/diylc/diylc-core/src/org/diylc/components/AbstractComponent.java @@ -291,5 +291,11 @@ public abstract class AbstractComponent implements IDIYComponent { @Override public String getInternalLinkName(int index1, int index2) { return null; - } + } + + @Override + public String getSectionName(int pointIndex) { + 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 8f69d692..ee1bfb47 100644 --- a/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java +++ b/diylc/diylc-core/src/org/diylc/core/IDIYComponent.java @@ -24,7 +24,7 @@ package org.diylc.core; import java.awt.Graphics2D; import java.awt.Point; import java.io.Serializable; - + import org.diylc.core.annotations.ComponentDescriptor; import org.diylc.core.annotations.EditableProperty; @@ -128,7 +128,13 @@ public interface IDIYComponent extends Serializable { * @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); + String getInternalLinkName(int index1, int index2); + + /** + * @param pointIndex name of the internal section containing the specified point, or null if the component does not have internal sections. + * @return + */ + String getSectionName(int pointIndex); /** * Draws the component onto the {@link Graphics2D}. diff --git a/diylc/diylc-core/src/org/diylc/netlist/Node.java b/diylc/diylc-core/src/org/diylc/netlist/Node.java index 16905c9d..4fe476ee 100644 --- a/diylc/diylc-core/src/org/diylc/netlist/Node.java +++ b/diylc/diylc-core/src/org/diylc/netlist/Node.java @@ -48,7 +48,8 @@ public class Node implements Comparable { } public String getDisplayName() { - return component.getControlPointNodeName(pointIndex); + String section = component.getSectionName(pointIndex); + return (section == null ? "" : section + ".") + component.getControlPointNodeName(pointIndex); } @Override diff --git a/diylc/diylc-library/lib/diylc-core.jar b/diylc/diylc-library/lib/diylc-core.jar index 12c9bc8f66d962988b1ffd291b7438ee15c09ad0..c30596a5f8520b1c831159e762b2ce9af7428f48 100644 GIT binary patch delta 14775 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 W3~qPe29I%JIvc>-S2HMRrvCxVVXry> delta 14738 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 W3~qPe29I%JIvc>-S2HMRrvCxVVXry> delta 14738 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 E8!>I}Qvd(} delta 5662 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 diff --git a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java index e638a7d0..6df0f673 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/ActionFactory.java @@ -1657,28 +1657,44 @@ public class ActionFactory { super(); this.plugInPort = plugInPort; this.swingUI = swingUI; - putValue(AbstractAction.NAME, "Create DIYLC Netlist"); + putValue(AbstractAction.NAME, "Generate DIYLC Netlist"); putValue(AbstractAction.SMALL_ICON, IconLoader.Web.getIcon()); } @Override public void actionPerformed(ActionEvent e) { - List res = plugInPort.extractNetlists(); - if (res == null) { - swingUI.showMessage("The generated netlist is empty, nothing to show.", "DIYLC Netlist", ISwingUI.INFORMATION_MESSAGE); - return; - } - StringBuilder sb = new StringBuilder(""); - - for (Netlist netlist : res) { - sb.append("

Switch configuration: ").append(netlist.getSwitchSetup()).append("

Connected node groups:
"); - for (Group v : netlist.getSortedGroups()) { - sb.append("  ").append(v.getSortedNodes()).append("
"); + swingUI.executeBackgroundTask(new ITask>() { + + @Override + public List doInBackground() throws Exception { + return plugInPort.extractNetlists(); } - sb.append("



"); - } - sb.append(""); - new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), "DIYLC Netlist", new Dimension(600, 480)).setVisible(true); + + @Override + public void failed(Exception e) { + swingUI.showMessage("Failed to generate the netlist: " + e.getMessage(), "DIYLC Netlist", ISwingUI.INFORMATION_MESSAGE); + } + + @Override + public void complete(List res) { + if (res == null) { + swingUI.showMessage("The generated netlist is empty, nothing to show.", "DIYLC Netlist", ISwingUI.INFORMATION_MESSAGE); + return; + } + StringBuilder sb = new StringBuilder(""); + + for (Netlist netlist : res) { + sb.append("

Switch configuration: "). + append(netlist.getSwitchSetup()).append("

Connected node groups:
"); + for (Group v : netlist.getSortedGroups()) { + sb.append("  ").append(v.getSortedNodes()).append("
"); + } + sb.append("



"); + } + sb.append(""); + new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), "DIYLC Netlist", new Dimension(600, 480)).setVisible(true); + } + }, true); } } @@ -1701,45 +1717,53 @@ public class ActionFactory { @Override public void actionPerformed(ActionEvent e) { - List netlists = plugInPort.extractNetlists(); - if (netlists == null || netlists.isEmpty()) { - swingUI.showMessage("The generated netlist is empty, nothing to show.", summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); - return; - } - List res = null; - try { - res = summarizer.summarize(netlists, null); - } catch (Exception ex) { - swingUI.showMessage(ex.getMessage(), summarizer.getName(), ISwingUI.ERROR_MESSAGE); - return; - } - - if (res == null) { - swingUI.showMessage("The generated summary is empty, nothing to show.", summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); - return; - } - StringBuilder sb = new StringBuilder(""); - - for (Summary summary : res) { - sb.append("

"); - - if (res.size() > 1) - sb.append("Switch configuration: "). - append(summary.getNetlist().getSwitchSetup()). - append("

"); - - sb.append(summary.getSummary()); - - sb.append("


"); - - if (res.size() > 1) - sb.append("
"); - } - sb.append(""); - new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), summarizer.getName(), new Dimension(600, 480)).setVisible(true); + swingUI.executeBackgroundTask(new ITask>() { + + @Override + public List doInBackground() throws Exception { + List netlists = plugInPort.extractNetlists(); + if (netlists == null || netlists.isEmpty()) { + throw new Exception("The generated netlist is empty, nothing to show."); + } + + return summarizer.summarize(netlists, null); + } + + @Override + public void failed(Exception e) { + swingUI.showMessage(e.getMessage(), summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); + } + + @Override + public void complete(List res) { + if (res == null) { + swingUI.showMessage("The generated summary is empty, nothing to show.", summarizer.getName(), ISwingUI.INFORMATION_MESSAGE); + return; + } + StringBuilder sb = new StringBuilder(""); + + for (Summary summary : res) { + sb.append("

"); + + if (res.size() > 1) + sb.append("Switch configuration: "). + append(summary.getNetlist().getSwitchSetup()). + append("

"); + + sb.append(summary.getSummary()); + + sb.append("


"); + + if (res.size() > 1) + sb.append("
"); + } + sb.append(""); + new TextDialog(swingUI.getOwnerFrame().getRootPane(), sb.toString(), summarizer.getName(), new Dimension(600, 480)).setVisible(true); + } + }, true); } } }