diff --git a/java/src/jmri/jmrix/ecos/swing/EcosNamedPaneAction.java b/java/src/jmri/jmrix/ecos/swing/EcosNamedPaneAction.java index dd008b5cf1c..c81b2b40194 100644 --- a/java/src/jmri/jmrix/ecos/swing/EcosNamedPaneAction.java +++ b/java/src/jmri/jmrix/ecos/swing/EcosNamedPaneAction.java @@ -1,7 +1,12 @@ package jmri.jmrix.ecos.swing; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import javax.swing.Icon; +import jmri.jmrix.SystemConnectionMemo; import jmri.jmrix.ecos.EcosSystemConnectionMemo; +import jmri.jmrix.swing.SystemConnectionNamedPaneAction; import jmri.util.swing.JmriPanel; import jmri.util.swing.WindowInterface; import org.slf4j.Logger; @@ -12,7 +17,7 @@ * * @author Bob Jacobsen Copyright (C) 2010 */ -public class EcosNamedPaneAction extends jmri.util.swing.JmriNamedPaneAction { +public class EcosNamedPaneAction extends SystemConnectionNamedPaneAction { /** * Enhanced constructor for placing the pane in various GUIs. @@ -22,17 +27,15 @@ public class EcosNamedPaneAction extends jmri.util.swing.JmriNamedPaneAction { * @param memo system connection. */ public EcosNamedPaneAction(String s, WindowInterface wi, String paneClass, EcosSystemConnectionMemo memo) { - super(s, wi, paneClass); + super(s, wi, paneClass, memo); this.memo = memo; } public EcosNamedPaneAction(String s, Icon i, WindowInterface wi, String paneClass, EcosSystemConnectionMemo memo) { - super(s, i, wi, paneClass); + super(s, i, wi, paneClass, memo); this.memo = memo; } - EcosSystemConnectionMemo memo; - @Override public JmriPanel makePanel() { JmriPanel p = super.makePanel(); @@ -52,4 +55,9 @@ public JmriPanel makePanel() { private final static Logger log = LoggerFactory.getLogger(EcosNamedPaneAction.class); + @Override + public Set> getSystemConnectionMemoClasses() { + return new HashSet<>(Arrays.asList(EcosSystemConnectionMemo.class)); + } + } diff --git a/java/src/jmri/jmrix/nce/swing/NceNamedPaneAction.java b/java/src/jmri/jmrix/nce/swing/NceNamedPaneAction.java index 5c06e19111f..4bd7580d421 100644 --- a/java/src/jmri/jmrix/nce/swing/NceNamedPaneAction.java +++ b/java/src/jmri/jmrix/nce/swing/NceNamedPaneAction.java @@ -1,7 +1,12 @@ package jmri.jmrix.nce.swing; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import javax.swing.Icon; +import jmri.jmrix.SystemConnectionMemo; import jmri.jmrix.nce.NceSystemConnectionMemo; +import jmri.jmrix.swing.SystemConnectionNamedPaneAction; import jmri.util.swing.JmriPanel; import jmri.util.swing.WindowInterface; import org.slf4j.Logger; @@ -13,7 +18,7 @@ * @author Bob Jacobsen Copyright (C) 2010 Copied from LocoNet * @author kcameron */ -public class NceNamedPaneAction extends jmri.util.swing.JmriNamedPaneAction { +public class NceNamedPaneAction extends SystemConnectionNamedPaneAction { /** * Enhanced constructor for placing the pane in various GUIs. @@ -24,17 +29,13 @@ public class NceNamedPaneAction extends jmri.util.swing.JmriNamedPaneAction { * @param memo system connection memo */ public NceNamedPaneAction(String s, WindowInterface wi, String paneClass, NceSystemConnectionMemo memo) { - super(s, wi, paneClass); - this.memo = memo; + super(s, wi, paneClass, memo); } public NceNamedPaneAction(String s, Icon i, WindowInterface wi, String paneClass, NceSystemConnectionMemo memo) { - super(s, i, wi, paneClass); - this.memo = memo; + super(s, i, wi, paneClass, memo); } - NceSystemConnectionMemo memo; - @Override public JmriPanel makePanel() { JmriPanel p = super.makePanel(); @@ -52,6 +53,10 @@ public JmriPanel makePanel() { return p; } - private final static Logger log = LoggerFactory.getLogger(NceNamedPaneAction.class); + @Override + public Set> getSystemConnectionMemoClasses() { + return new HashSet<>(Arrays.asList(NceSystemConnectionMemo.class)); + } + private final static Logger log = LoggerFactory.getLogger(NceNamedPaneAction.class); } diff --git a/java/src/jmri/jmrix/swing/AbstractSystemConnectionAction.java b/java/src/jmri/jmrix/swing/AbstractSystemConnectionAction.java index dff1311e5f4..cb4cb44aa26 100644 --- a/java/src/jmri/jmrix/swing/AbstractSystemConnectionAction.java +++ b/java/src/jmri/jmrix/swing/AbstractSystemConnectionAction.java @@ -32,9 +32,6 @@ public M getSystemConnectionMemo() { /** * {@inheritDoc} - *

- * Note that this accepts any subclass of SystemConnectionMemo, not just - * subclasses of M, to avoid compilation problems elsewhere. * * @throws IllegalArgumentException if the memo is not assignable from any * class listed in diff --git a/java/src/jmri/jmrix/swing/SystemConnectionNamedPaneAction.java b/java/src/jmri/jmrix/swing/SystemConnectionNamedPaneAction.java new file mode 100644 index 00000000000..c6605668c1f --- /dev/null +++ b/java/src/jmri/jmrix/swing/SystemConnectionNamedPaneAction.java @@ -0,0 +1,52 @@ +package jmri.jmrix.swing; + +import javax.swing.Icon; +import jmri.jmrix.SystemConnectionMemo; +import jmri.util.swing.JmriNamedPaneAction; +import jmri.util.swing.WindowInterface; + +/** + * {@link JmriNamedPaneAction} that implements {@link SystemConnectionAction}. + * + * @author Randall Wood Copyright 2020 + * @param the supported subclass of {@link SystemConnectionMemo} + */ +public abstract class SystemConnectionNamedPaneAction extends JmriNamedPaneAction implements SystemConnectionAction { + + protected M memo; + + public SystemConnectionNamedPaneAction(String s, String paneClass, M memo) { + super(s, paneClass); + this.memo = memo; + } + + public SystemConnectionNamedPaneAction(String s, Icon i, WindowInterface wi, String paneClass, M memo) { + super(s, i, wi, paneClass); + this.memo = memo; + } + + public SystemConnectionNamedPaneAction(String s, WindowInterface wi, String paneClass, M memo) { + super(s, wi, paneClass); + this.memo = memo; + } + + /** + * {@inheritDoc} + */ + @Override + public M getSystemConnectionMemo() { + return memo; + } + + /** + * {@inheritDoc} + */ + @Override + public void setSystemConnectionMemo(M memo) { + if (getSystemConnectionMemoClasses().stream().anyMatch(memo.getClass()::isAssignableFrom)) { + this.memo = memo; + } else { + throw new IllegalArgumentException(memo.getClass() + " is not valid for " + this.getClass()); + } + } +}