From 75758e0250af2208ded82723ee08dbd1aa6326e5 Mon Sep 17 00:00:00 2001 From: bancika Date: Sun, 3 Jan 2021 00:03:44 +0100 Subject: [PATCH] Added 'File' -> 'Import Netlist' option that can import components from a Tango PCB file --- .../org/diylc/common/INetlistProcessor.java | 7 + .../diylc/netlist/AbstractNetlistParser.java | 163 +++++++++ .../src/org/diylc/netlist/INetlistParser.java | 66 ++++ .../diylc/netlist/NetlistParseException.java | 50 +++ .../diylc/netlist/ParsedNetlistComponent.java | 26 ++ .../org/diylc/netlist/ParsedNetlistEntry.java | 55 +++ .../src/org/diylc/presenter/Presenter.java | 29 ++ .../src/org/diylc/presenter/update.xml | 4 + .../src/org/diylc/netlist/ISpiceMapper.java | 2 +- .../org/diylc/netlist/TangoNetlistParser.java | 116 +++++++ .../org/diylc/netlist/TangoParserTests.java | 90 +++++ diylc/diylc-swing/lib/diylc-core.jar | Bin 341218 -> 348203 bytes diylc/diylc-swing/library/main.jar | Bin 753337 -> 755141 bytes .../src/org/diylc/swing/ActionFactory.java | 105 ++++++ .../org/diylc/swing/gui/DialogFactory.java | 7 + .../org/diylc/swing/images/IconLoader.java | 3 +- .../org/diylc/swing/images/import_netlist.png | Bin 0 -> 925 bytes .../swing/plugins/file/FileMenuPlugin.java | 3 +- .../plugins/file/NetlistImportDialog.java | 316 ++++++++++++++++++ 19 files changed, 1039 insertions(+), 3 deletions(-) create mode 100644 diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/INetlistParser.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/NetlistParseException.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistComponent.java create mode 100644 diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistEntry.java create mode 100644 diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java create mode 100644 diylc/diylc-library/test/org/diylc/netlist/TangoParserTests.java create mode 100644 diylc/diylc-swing/src/org/diylc/swing/images/import_netlist.png create mode 100644 diylc/diylc-swing/src/org/diylc/swing/plugins/file/NetlistImportDialog.java diff --git a/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java b/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java index 9709ddea..3f2a7c56 100644 --- a/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/INetlistProcessor.java @@ -23,6 +23,7 @@ package org.diylc.common; import java.util.List; +import org.diylc.netlist.INetlistParser; import org.diylc.netlist.Netlist; /** @@ -47,5 +48,11 @@ public interface INetlistProcessor { */ List getNetlistAnalyzers(); + /** + * Finds all available {@link INetlistParser} implementations. + * + * @return + */ + List getNetlistParserDefinitions(); } diff --git a/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java b/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java new file mode 100644 index 00000000..9b0875fd --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/AbstractNetlistParser.java @@ -0,0 +1,163 @@ +/* + * + * 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.awt.geom.Point2D; +import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.diylc.core.IDIYComponent; +import org.diylc.core.measures.Size; +import org.diylc.core.measures.SizeUnit; + +public abstract class AbstractNetlistParser implements INetlistParser { + + private static Size X_OFFSET = new Size(1.5d, SizeUnit.in); + private static Size Y_OFFSET = new Size(0.3d, SizeUnit.in); + private static int ROW_COUNT = 15; + + public List parseFile(String fileName, List outputWarnings) throws NetlistParseException { + String content; + try { + content = new String(Files.readAllBytes(Paths.get(fileName))); + } catch (IOException e) { + throw new NetlistParseException("Error reading file", e); + } + + return parse(content, outputWarnings); + } + + public List parse(String content, List outputWarnings) throws NetlistParseException { + List result = new ArrayList(); + + Pattern pattern = Pattern.compile(getItemRegex(), Pattern.MULTILINE | Pattern.DOTALL); + Matcher matcher = pattern.matcher(content); + while (matcher.find()) { + String type; + try { + type = matcher.group("Type").trim(); + } catch (Exception e) { + outputWarnings.add("'Type' group not found."); + continue; + } + + if (type == null) { + outputWarnings.add("'Type' group not found."); + continue; + } + + Map valueMap = new HashMap(); + List> typeCandidates = getComponentTypeCandidates(type, valueMap); + if (typeCandidates == null) { + outputWarnings.add("Type mappings not found for " + type + "."); + continue; + } + + for (String propertyName : getPropertyNames()) { + String valueStr = matcher.group(propertyName).trim(); + try { + Object value = parseValue(type, propertyName, valueStr); + valueMap.put(propertyName, value); + } catch (Exception e) { + outputWarnings + .add("Error while parsing value for " + type + "." + propertyName + " = " + valueStr); + } + } + + result.add(new ParsedNetlistEntry(typeCandidates, type, valueMap)); + } + + Collections.sort(result, new Comparator() { + + @Override + public int compare(ParsedNetlistEntry o1, ParsedNetlistEntry o2) { + int comp = o1.getRawType().compareToIgnoreCase(o2.getRawType()); + if (comp == 0 && o1.getValues().containsKey("Name") && o2.getValues().containsKey("Name")) + comp = o1.getValues().get("Name").toString().compareToIgnoreCase(o2.getValues().get("Name").toString()); + return comp; + } + }); + + return result; + } + + public List> generateComponents(List components, + List outputWarnings) { + double dx = 0; + double dy = 0; + List> result = new ArrayList>(); + for (int i = 0; i < components.size(); i++) { + ParsedNetlistComponent parsedComponent = components.get(i); + if (parsedComponent.getType() == null) { + outputWarnings.add("Type not selected for " + parsedComponent.getValues().get("Name")); + continue; + } + Class clazz = parsedComponent.getType(); + IDIYComponent component; + try { + component = (IDIYComponent) clazz.newInstance(); + } catch (Exception e) { + outputWarnings.add(e.getMessage()); + continue; + } + for (int j = 0; j < component.getControlPointCount(); j++) { + Point2D p = component.getControlPoint(j); + Point2D controlPoint = new Point2D.Double(p.getX() + dx, p.getY() + dy); + component.setControlPoint(controlPoint, j); + } + + if (i > 0 && i % ROW_COUNT == 0) { + dx += X_OFFSET.convertToPixels(); + dy = 0; + } else { + dy += Y_OFFSET.convertToPixels(); + } + + Method[] methods = clazz.getMethods(); + for (Map.Entry value : parsedComponent.getValues().entrySet()) { + try { + Optional first = Arrays.stream(methods).filter(x -> x.getName().equals("set" + value.getKey())).findFirst(); + if (first.isPresent()) { + Method setter = first.get(); + setter.invoke(component, value.getValue()); + } else { + outputWarnings.add("No setter found for " + value.getKey()); + } + } catch (Exception e) { + outputWarnings.add("Error setting " + value.getKey() + ": " + e.getMessage()); + } + } + result.add(component); + + } + return result; + } +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/INetlistParser.java b/diylc/diylc-core/src/org/diylc/netlist/INetlistParser.java new file mode 100644 index 00000000..df655bdc --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/INetlistParser.java @@ -0,0 +1,66 @@ +/* + * + * 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 java.util.Map; + +import org.diylc.core.IDIYComponent; + +/* + * + * 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 + * . + * + */ +public interface INetlistParser { + + String getName(); + + String getFileExt(); + + String getItemRegex(); + + List> getComponentTypeCandidates(String type, Map additionalOutputs); + + List getPropertyNames(); + + Object parseValue(String type, String propertyName, String valueStr); + + List parseFile(String fileName, List outputWarnings) + throws NetlistParseException; + + List parse(String content, List outputWarnings) + throws NetlistParseException; + + List> generateComponents(List components, + List outputWarnings); +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/NetlistParseException.java b/diylc/diylc-core/src/org/diylc/netlist/NetlistParseException.java new file mode 100644 index 00000000..386442c0 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/NetlistParseException.java @@ -0,0 +1,50 @@ +/* + * + * 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 class NetlistParseException extends Exception { + + private static final long serialVersionUID = 1L; + + public NetlistParseException() { + super(); + // TODO Auto-generated constructor stub + } + + public NetlistParseException(String message, Throwable cause, boolean enableSuppression, + boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + // TODO Auto-generated constructor stub + } + + public NetlistParseException(String message, Throwable cause) { + super(message, cause); + // TODO Auto-generated constructor stub + } + + public NetlistParseException(String message) { + super(message); + // TODO Auto-generated constructor stub + } + + public NetlistParseException(Throwable cause) { + super(cause); + // TODO Auto-generated constructor stub + } +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistComponent.java b/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistComponent.java new file mode 100644 index 00000000..95f5be1b --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistComponent.java @@ -0,0 +1,26 @@ +package org.diylc.netlist; + +import java.util.Map; + +public class ParsedNetlistComponent { + + public Class type; + public Map values; + + public ParsedNetlistComponent() { + } + + public ParsedNetlistComponent(Class type, Map values) { + super(); + this.type = type; + this.values = values; + } + + public Class getType() { + return type; + } + + public Map getValues() { + return values; + } +} diff --git a/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistEntry.java b/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistEntry.java new file mode 100644 index 00000000..61f0ee30 --- /dev/null +++ b/diylc/diylc-core/src/org/diylc/netlist/ParsedNetlistEntry.java @@ -0,0 +1,55 @@ +/* + + 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 java.util.Map; + +public class ParsedNetlistEntry { + + private List> typeCandidates; + private Map values; + private String rawType; + + public ParsedNetlistEntry() { + } + + public ParsedNetlistEntry(List> typeCandidates, String rawType, + Map values) { + super(); + this.typeCandidates = typeCandidates; + this.rawType = rawType; + this.values = values; + } + + public List> getTypeCandidates() { + return typeCandidates; + } + + public String getRawType() { + return rawType; + } + + public Map getValues() { + return values; + } +} diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index a609e324..e998b1f8 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -83,6 +83,7 @@ import org.diylc.core.measures.Size; import org.diylc.core.measures.SizeUnit; import org.diylc.lang.LangUtil; import org.diylc.netlist.Group; +import org.diylc.netlist.INetlistParser; import org.diylc.netlist.Netlist; import org.diylc.netlist.NetlistAnalyzer; import org.diylc.netlist.Node; @@ -3403,6 +3404,34 @@ public class Presenter implements IPlugInPort { } } + @Override + public List getNetlistParserDefinitions() { + Set> classes; + try { + classes = Utils.getClasses("org.diylc.netlist"); + List result = new ArrayList(); + + for (Class clazz : classes) { + if (!Modifier.isAbstract(clazz.getModifiers()) && INetlistParser.class.isAssignableFrom(clazz)) { + result.add((INetlistParser) clazz.newInstance()); + } + } + + Collections.sort(result, new Comparator() { + + @Override + public int compare(INetlistParser o1, INetlistParser o2) { + return o1.getName().compareToIgnoreCase(o2.getName()); + } + }); + + return result; + } catch (Exception e) { + LOG.error("Could not load INetlistParserDefinition implementations", e); + return null; + } + } + // Test stuff @Override diff --git a/diylc/diylc-core/src/org/diylc/presenter/update.xml b/diylc/diylc-core/src/org/diylc/presenter/update.xml index e9a3afdc..6b65032b 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/update.xml +++ b/diylc/diylc-core/src/org/diylc/presenter/update.xml @@ -3418,6 +3418,10 @@ 2020-12-28 00:00:00.000 CET + + NEW_FEATURE + Added 'File' -> 'Import Netlist' option that can import components from a Tango PCB file + NEW_FEATURE Português translation added (thanks Pedro Rizzi!) diff --git a/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java index 7a3063dc..c2613db1 100644 --- a/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java +++ b/diylc/diylc-library/src/org/diylc/netlist/ISpiceMapper.java @@ -28,7 +28,7 @@ package org.diylc.netlist; */ public interface ISpiceMapper { - int mapToSpiceNode(int pontIndex); + int mapToSpiceNode(int pointIndex); String getComment(); diff --git a/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java b/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java new file mode 100644 index 00000000..ed274b0e --- /dev/null +++ b/diylc/diylc-library/src/org/diylc/netlist/TangoNetlistParser.java @@ -0,0 +1,116 @@ +package org.diylc.netlist; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.diylc.components.passive.AxialElectrolyticCapacitor; +import org.diylc.components.passive.AxialFilmCapacitor; +import org.diylc.components.passive.CapacitorSymbol; +import org.diylc.components.passive.MultiSectionCapacitor; +import org.diylc.components.passive.RadialCeramicDiskCapacitor; +import org.diylc.components.passive.RadialElectrolytic; +import org.diylc.components.passive.RadialFilmCapacitor; +import org.diylc.components.passive.Resistor; +import org.diylc.components.passive.ResistorSymbol; +import org.diylc.components.semiconductors.DIL_IC; +import org.diylc.components.semiconductors.DiodeGlass; +import org.diylc.components.semiconductors.DiodePlastic; +import org.diylc.components.semiconductors.DiodeSymbol; +import org.diylc.components.semiconductors.LED; +import org.diylc.components.semiconductors.LEDSymbol; +import org.diylc.components.semiconductors.PhotoDiodeSymbol; +import org.diylc.components.semiconductors.SchottkyDiodeSymbol; +import org.diylc.components.semiconductors.ZenerDiodeSymbol; +import org.diylc.core.measures.Capacitance; +import org.diylc.core.measures.Resistance; + +public class TangoNetlistParser extends AbstractNetlistParser { + + @Override + public String getName() { + return "Tango"; + } + + @Override + public String getFileExt() { + return "pcb"; + } + + @Override + public String getItemRegex() { + return "\\[\\s*(?.+?)\\n(?.+?)\\n(?.+?)\\s*\\]"; + } + + @Override + public List> getComponentTypeCandidates(String type, + Map additionalOutputs) { + List> types = new ArrayList>(); + + if ("RESISTOR".equalsIgnoreCase(type)) { + types.add(Resistor.class); + types.add(ResistorSymbol.class); + } + + if (type.toUpperCase().startsWith("CAP_CERAMIC")) { + types.add(RadialCeramicDiskCapacitor.class); + types.add(CapacitorSymbol.class); + } + + if (type.toUpperCase().startsWith("CAP_FILM")) { + types.add(AxialFilmCapacitor.class); + types.add(RadialFilmCapacitor.class); + types.add(CapacitorSymbol.class); + } + + if (type.toUpperCase().startsWith("CAP_ELECTRO")) { + additionalOutputs.put("Polarized", true); + types.add(AxialElectrolyticCapacitor.class); + types.add(RadialElectrolytic.class); + types.add(MultiSectionCapacitor.class); + types.add(CapacitorSymbol.class); + } + + if (type.toUpperCase().startsWith("DIP")) { + try { + int pinCount = Integer.parseInt(type.substring(3)); + additionalOutputs.put("PinCount", DIL_IC.PinCount.valueOf("_" + pinCount)); + } catch (Exception e) { + } + + types.add(DIL_IC.class); + } + + if (type.equalsIgnoreCase("DIODE")) { + types.add(DiodeGlass.class); + types.add(DiodePlastic.class); + types.add(SchottkyDiodeSymbol.class); + types.add(PhotoDiodeSymbol.class); + types.add(DiodeSymbol.class); + types.add(ZenerDiodeSymbol.class); + } + + if (type.equalsIgnoreCase("LED")) { + types.add(LED.class); + types.add(LEDSymbol.class); + } + + return types; + } + + @Override + public List getPropertyNames() { + return Arrays.asList("Name", "Value"); + } + + @Override + public Object parseValue(String type, String propertyName, String valueStr) { + if ("RESISTOR".equalsIgnoreCase(type) && "Value".equals(propertyName)) + return Resistance.parseResistance(valueStr); + if ((type.toUpperCase().startsWith("CAP_CERAMIC") || type.toUpperCase().startsWith("CAP_FILM") + || type.toUpperCase().startsWith("CAP_ELECTRO")) && "Value".equals(propertyName)) + return Capacitance.parseCapacitance(valueStr + "F"); + return valueStr; + } +} diff --git a/diylc/diylc-library/test/org/diylc/netlist/TangoParserTests.java b/diylc/diylc-library/test/org/diylc/netlist/TangoParserTests.java new file mode 100644 index 00000000..26da2350 --- /dev/null +++ b/diylc/diylc-library/test/org/diylc/netlist/TangoParserTests.java @@ -0,0 +1,90 @@ +package org.diylc.netlist; + +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +public class TangoParserTests { + + @Test + public void testParse1() { + String content = "[\r\n" + + "R9\r\n" + + "RESISTOR\r\n" + + "100k\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "D4\r\n" + + "LED\r\n" + + "LED\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "C3\r\n" + + "CAP_FILM\r\n" + + "82n\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "C2\r\n" + + "CAP_ELECTRO_200\r\n" + + "1u\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "C1\r\n" + + "CAP_CERAMIC1\r\n" + + "820p\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "U2\r\n" + + "DIP14\r\n" + + "TL074\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "D1\r\n" + + "DIODE\r\n" + + "Zener 12V\r\n" + + "\r\n" + + "]\r\n" + + "[\r\n" + + "B1\r\n" + + "PADS2\r\n" + + "9V\r\n" + + "\r\n" + + "]\r\n" + + "(\r\n" + + "unnamed_net15\r\n" + + "U4-11\r\n" + + ")\r\n" + + "(\r\n" + + "unnamed_net14\r\n" + + "U3-3\r\n" + + "U1-3\r\n" + + "R7-1\r\n" + + "R8-2\r\n" + + "U2-3\r\n" + + ")\r\n" + + "(\r\n" + + "unnamed_net13\r\n" + + "R1-2\r\n" + + "B1-1\r\n" + + ")"; + + List outputWarnings = new ArrayList(); + try { + TangoNetlistParser parser = new TangoNetlistParser(); + List parsed = parser.parse(content, outputWarnings); + Assert.assertNotNull(parsed); + } catch (NetlistParseException e) { + fail("Unexpected error:" + e.getMessage()); + } + } +} diff --git a/diylc/diylc-swing/lib/diylc-core.jar b/diylc/diylc-swing/lib/diylc-core.jar index b835fb1155a403ded0fa9d1d3765c3e2027d1259..3344bea20cd6ffd8b14de57da60b753856489685 100644 GIT binary patch delta 47925 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 Drn35o delta 40594 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 37eebdef4909b5923af3dc73714ea362e15fa916..25252d94d9aed00f0f140fb018e3e00f429c373c 100644 GIT binary patch delta 31336 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 OMU#-6z=2~mN&W{b;zC{k delta 29374 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 ie2We$R;7=~ja|+Je parserDefinitions; + private List extensions; + private FileFilter filter; + + public ImportNetlistAction(IPlugInPort plugInPort, ISwingUI swingUI) { + super(); + this.plugInPort = plugInPort; + this.swingUI = swingUI; + putValue(AbstractAction.NAME, "Import Netlist"); + putValue(AbstractAction.SMALL_ICON, IconLoader.ImportNetlist.getIcon()); + + this.parserDefinitions = plugInPort.getNetlistParserDefinitions(); + this.extensions = parserDefinitions.stream().map(x -> x.getFileExt()).collect(Collectors.toList()); + + this.filter = new FileFilter() { + + @Override + public boolean accept(File f) { + if (f.isDirectory()) { + return true; + } + String fileExt = f.getName(); + fileExt = fileExt.substring(fileExt.lastIndexOf('.') + 1).toLowerCase(); + for (String ext : extensions) { + if (ext.equals(fileExt)) { + return true; + } + } + return false; + } + + @Override + public String getDescription() { + return LangUtil.translate("Netlist files"); + } + }; + } + + @Override + public void actionPerformed(ActionEvent e) { + LOG.info("ImportNetlistAction triggered"); + + final File file = DialogFactory.getInstance().showOpenDialog(this.filter, + null, this.extensions.get(0), null); + // TODO: identity by extension + final INetlistParser parser = parserDefinitions.get(0); + + if (file != null) { + swingUI.executeBackgroundTask(new ITask>() { + + @Override + public List doInBackground() throws Exception { + LOG.debug("Importing netlist from " + file.getAbsolutePath()); + List outputWarnings = new ArrayList(); + List entries = parser.parseFile(file.getAbsolutePath(), outputWarnings); + return entries; + } + + @Override + public void complete(List entries) { + try { + NetlistImportDialog dialog = DialogFactory.getInstance().createNetlistImportDialog(plugInPort,entries); + dialog.setVisible(true); + if (ButtonDialog.OK.equals(dialog.getSelectedButtonCaption())) { + List outputWarnings = new ArrayList(); + Map> results = dialog.getResults(); + List parsedComponents = entries.stream().map(entry -> + new ParsedNetlistComponent(results.get(entry.getRawType()), entry.getValues())).collect(Collectors.toList()); + List> components = parser.generateComponents(parsedComponents, outputWarnings); + plugInPort.pasteComponents(components, false, false); + } + } catch (Exception e) { + swingUI.showMessage("Could not import netlist file: " + e.getMessage(), "Error", + ISwingUI.ERROR_MESSAGE); + e.printStackTrace(); + } + } + + @Override + public void failed(Exception e) { + swingUI.showMessage("Could not import netlist file: " + e.getMessage(), "Error", + ISwingUI.ERROR_MESSAGE); + } + }, true); + } + } + } public static class SaveAction extends AbstractAction { diff --git a/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java b/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java index 459bad70..afd7c738 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java +++ b/diylc/diylc-swing/src/org/diylc/swing/gui/DialogFactory.java @@ -29,6 +29,7 @@ import javax.swing.filechooser.FileFilter; import org.diylc.appframework.miscutils.ConfigurationManager; import org.diylc.common.IPlugInPort; import org.diylc.common.PropertyWrapper; +import org.diylc.netlist.ParsedNetlistEntry; import org.diylc.plugins.cloud.model.UserEntity; import org.diylc.swing.gui.components.OverwritePromptFileChooser; import org.diylc.swing.gui.editor.PropertyEditorDialog; @@ -38,6 +39,7 @@ import org.diylc.swing.plugins.cloud.view.UploadDialog; import org.diylc.swing.plugins.cloud.view.UserEditDialog; import org.diylc.swing.plugins.edit.FindDialog; import org.diylc.swing.plugins.file.BomDialog; +import org.diylc.swing.plugins.file.NetlistImportDialog; import org.diylc.swingframework.AboutDialog; import org.diylc.swingframework.IFileChooserAccessory; import org.diylc.swingframework.ProgressDialog; @@ -229,4 +231,9 @@ public class DialogFactory { ProgressDialog dialog = new ProgressDialog(mainFrame, title, buttonCaptions, description, useProgress); return dialog; } + + public NetlistImportDialog createNetlistImportDialog(IPlugInPort plugInPort, List entries) { + NetlistImportDialog dialog = new NetlistImportDialog(mainFrame, plugInPort, entries); + return dialog; + } } diff --git a/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java b/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java index 238a2154..17dd9b39 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java +++ b/diylc/diylc-swing/src/org/diylc/swing/images/IconLoader.java @@ -67,7 +67,8 @@ public enum IconLoader { JarBeanInto("jar_bean_into.png"), GraphEdgeDirected("graph_edge_directed.png"), LaserPointer("laserpointer.png"), TapeMeasure("tape_measure1.png"), Elements("elements1.png"), GraphNodes("graph_nodes.png"), User("user1.png"), FlexibleLeads("flexible_leads.png"), Pads("pads.png"), Lock("lock.png"), Unlock("lock_open.png"), Earth("earth.png"), Loadline("loadline.png"), LoadlineAdd("loadline_add.png"), SnapToGrid("snap_to_grid.png"), - SnapToComponents("snap_to_components.png"), SnapToNone("snap_to_none.png"), TraceProximity("trace_proximity.png"), ComponentLarge("component_large.png"); + SnapToComponents("snap_to_components.png"), SnapToNone("snap_to_none.png"), TraceProximity("trace_proximity.png"), + ComponentLarge("component_large.png"), ImportNetlist("import_netlist.png"); protected String name; diff --git a/diylc/diylc-swing/src/org/diylc/swing/images/import_netlist.png b/diylc/diylc-swing/src/org/diylc/swing/images/import_netlist.png new file mode 100644 index 0000000000000000000000000000000000000000..c41a35c909585fc9d9ce715f320f1600e1845dbd GIT binary patch literal 925 zcmV;O17iG%P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5C8xR5CN?ty>$Qp12RcOK~y+TU6XrA z(@_-1?{5#a&8bsc>WcYj4;@IUXcom3h7}dQB89@x(H{!+k0AM%x(bpqL1+;utvMxP zL<<$Nhpr4nH=U`Q&uyBDAzQxEpSs_#bBCFE;KP0V&iCAN?>Rs8*Xrx*Ra&jqBoGK9 zVCfGKn9|bHh^D5dk&==UBdm`Ae!!lwc1PrJIP6JDNoOIDjmP7Sjf{*q*=%+y%#X@s zGInQY=Q6mR1G<5qSc8qRJ7Qyuj*ijzn_+QraYG`JBx^L9R|ySsZrrBdCBii+YTBqSUj8X6i0 znb&s(wOTC?2?>!+PfybsnVALE)iw8XbMx|+msgIhuCC39B~s?&y1ESiLp)Y~etwZ$ zE-we!2_VpyL2+?$>@dzl;#M_5r&(Ht#`UcYcYE6wS0c|UwIbru$0Qx1N&Sru6q zm8K9qpXSpmXc)Z#aX;`Imm?HNg=>_dvN`70B5}w6AJ3Ql`bA zUh5=1Yjc~?LsSHtQ}_#RCR}4-Wo6~-u&^*IgTcsqsW-HYUN_&UDY^`w{uxD4=-In2 zdS-ITOy5H{aTRs|T-R}n#d0?;F7E2~_BJz85LAGu9cpuP6YXaM@KO|w)*&T?()T)Q z*LWQr9X|{P!@N$X8`@Hn*(`#I9cd=PpfXO&IF@0Tcd=)s2WgQ5_D%lIG6#xQZ#T1z$Z)txc7a3CsBo7&{gO? z%;$kFz. + * + */ +package org.diylc.swing.plugins.file; + +import java.awt.Component; +import java.awt.Dimension; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +import javax.swing.DefaultCellEditor; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.ListCellRenderer; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumnModel; + +import org.diylc.appframework.miscutils.ConfigurationManager; +import org.diylc.common.ComponentType; +import org.diylc.common.IPlugInPort; +import org.diylc.lang.LangUtil; +import org.diylc.netlist.ParsedNetlistEntry; +import org.diylc.swingframework.ButtonDialog; + +public class NetlistImportDialog extends ButtonDialog { + + private static final long serialVersionUID = 1L; + + public static String NETLIST_DEFAULT_TYPES = "netlistDefaultTypes"; + + private List> selectedTypes; + private List setDefault; + private Map, String> componentTypeDisplay; + private List> allTypes; + private Map netlistDefaultTypes; + private List rawTypes; + private Map>> availableTypes; + + private JTable table; + + @SuppressWarnings("unchecked") + public NetlistImportDialog(JFrame owner, IPlugInPort plugInPort, + List entries) { + super(owner, LangUtil.translate("Import Netlist"), + new String[] {ButtonDialog.OK, ButtonDialog.CANCEL}); + this.rawTypes = entries.stream().map(x -> x.getRawType()).distinct().sorted().collect(Collectors.toList()); + this.availableTypes = new HashMap>>(); + for (ParsedNetlistEntry entry : entries) { + this.availableTypes.put(entry.getRawType(), entry.getTypeCandidates()); + } + + this.netlistDefaultTypes = (Map) ConfigurationManager.getInstance() + .readObject(NETLIST_DEFAULT_TYPES, null); + this.setDefault = rawTypes.stream().map( + type -> netlistDefaultTypes != null && netlistDefaultTypes.containsKey(type)) + .collect(Collectors.toList()); + + Map> componentTypes = plugInPort.getComponentTypes(); + List allComponentTypes = new ArrayList(); + this.componentTypeDisplay = new HashMap, String>(); + for (Map.Entry> e : componentTypes.entrySet()) { + for (ComponentType type : e.getValue()) { + this.componentTypeDisplay.put(type.getInstanceClass(), e.getKey() + " - " + type.getName()); + allComponentTypes.add(type); + } + } + this.allTypes = allComponentTypes.stream() + .sorted((t1, t2) -> (t1.getCategory() + " = " + t1.getName()) + .compareToIgnoreCase((t2.getCategory() + " = " + t2.getName()))) + .map(x -> x.getInstanceClass()).collect(Collectors.toList()); + + this.selectedTypes = + rawTypes.stream().map(type -> getDefaultType(type)).collect(Collectors.toList()); + + setPreferredSize(new Dimension(600, 400)); + layoutGui(); + } + + private Class getDefaultType(String rawType) { + if (this.netlistDefaultTypes != null + && this.netlistDefaultTypes.containsKey(rawType)) { + + Optional> first = this.allTypes.stream() + .filter( + e -> e.getCanonicalName().equals(this.netlistDefaultTypes.get(rawType))) + .findFirst(); + if (first.isPresent()) + return first.get(); + } + + List> list = this.availableTypes.get(rawType); + return list == null || list.isEmpty() ? null : list.get(0); + } + + public Map> getResults() { + Map> result = new HashMap>(); + for (int i = 0; i < rawTypes.size(); i++) + result.put(rawTypes.get(i), selectedTypes.get(i)); + return result; + } + + @Override + protected JComponent getMainComponent() { + JScrollPane scrollPane = new JScrollPane(getTable()); + scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); + scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + return scrollPane; + } + + @SuppressWarnings("unchecked") + @Override + public void setVisible(boolean b) { + super.setVisible(b); + + // hiding, store changes in config + if (!b && OK.equals(getSelectedButtonCaption())) { + netlistDefaultTypes = (Map) ConfigurationManager.getInstance() + .readObject(NETLIST_DEFAULT_TYPES, null); + if (netlistDefaultTypes == null) + netlistDefaultTypes = new HashMap(); + for (int i = 0; i < rawTypes.size(); i++) + if (setDefault.get(i)) + netlistDefaultTypes.put(rawTypes.get(i), + selectedTypes.get(i).getCanonicalName()); + else + netlistDefaultTypes.remove(rawTypes.get(i)); + + ConfigurationManager.getInstance().writeValue(NETLIST_DEFAULT_TYPES, netlistDefaultTypes); + } + } + + public JTable getTable() { + if (table == null) { + table = new JTable(new NetlistTableModel()); + table.setFillsViewportHeight(true); + JComboBox> comboBox = new JComboBox>(); + comboBox.setRenderer(new TypeListCellRenderer()); + table.setDefaultRenderer(Class.class, new TypeTableCellRenderer()); + table.setDefaultEditor(Class.class, new TypeCellEditor(comboBox)); + resizeColumnWidth(table); + } + return table; + } + + public void resizeColumnWidth(JTable table) { + final TableColumnModel columnModel = table.getColumnModel(); + for (int column = 0; column < table.getColumnCount(); column++) { + int width = 48; // Min width + for (int row = 0; row < table.getRowCount(); row++) { + TableCellRenderer renderer = table.getCellRenderer(row, column); + Component comp = table.prepareRenderer(renderer, row, column); + width = Math.max(comp.getPreferredSize().width + 1, width); + } + if (width > 300) + width = 300; + columnModel.getColumn(column).setPreferredWidth(width); + } + } + + class NetlistTableModel extends AbstractTableModel { + + private static final long serialVersionUID = 1L; + + @Override + public int getRowCount() { + return rawTypes.size(); + } + + @Override + public int getColumnCount() { + return 3; + } + + @Override + public String getColumnName(int column) { + switch (column) { + case 0: + return "Imported Type"; + case 1: + return "DIYLC Component Type"; + case 2: + return "Default"; + } + return null; + } + + @Override + public Class getColumnClass(int columnIndex) { + switch (columnIndex) { + case 0: + return String.class; + case 1: + return Class.class; + case 2: + return Boolean.class; + } + return null; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return columnIndex >= 1; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + switch (columnIndex) { + case 0: + return rawTypes.get(rowIndex); + case 1: + return selectedTypes.get(rowIndex); + case 2: + return setDefault.get(rowIndex); + } + return null; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + switch (columnIndex) { + case 1: + selectedTypes.set(rowIndex, (Class) aValue); + break; + case 2: + setDefault.set(rowIndex, (Boolean) aValue); + break; + } + } + } + + class TypeListCellRenderer extends JLabel implements ListCellRenderer> { + + private static final long serialVersionUID = 1L; + + @Override + public Component getListCellRendererComponent(JList> list, Class value, + int index, boolean isSelected, boolean cellHasFocus) { + if (value == null) + setText("Undefined - skip this component"); + else + setText(componentTypeDisplay.get(value)); + return this; + } + } + + class TypeTableCellRenderer extends DefaultTableCellRenderer { + + private static final long serialVersionUID = 1L; + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, + hasFocus, row, column); + if (value == null) + label.setText("Undefined - skip this component"); + else + label.setText(componentTypeDisplay.get(value)); + return label; + } + } + + class TypeCellEditor extends DefaultCellEditor { + + private static final long serialVersionUID = 1L; + + public TypeCellEditor(JComboBox> comboBox) { + super(comboBox); + } + + @SuppressWarnings("unchecked") + @Override + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, + int row, int column) { + JComboBox> comboBox = (JComboBox>) super.getTableCellEditorComponent(table, + value, isSelected, row, column); + comboBox.removeAllItems(); + List> showTypes = availableTypes.get(rawTypes.get(row)); + if (showTypes == null || showTypes.isEmpty()) + showTypes = allTypes; + + comboBox.addItem(null); + for (Class c : showTypes) { + comboBox.addItem(c); + } + comboBox.setSelectedItem(selectedTypes.get(row)); + return comboBox; + } + } +}