001package jmri.jmrit.logixng.tools.swing; 002 003import java.util.ArrayList; 004import java.util.EventListener; 005import java.util.HashMap; 006import java.util.List; 007 008import javax.annotation.Nonnull; 009 010import jmri.jmrit.logixng.FemaleSocket; 011import jmri.InstanceManager; 012import jmri.jmrit.logixng.*; 013 014/** 015 * Editor of ConditionalNG 016 * 017 * @author Daniel Bergqvist 2018 018 */ 019public class ConditionalNGEditor extends TreeEditor { 020 021 protected final ConditionalNG _conditionalNG; 022 023 024 /** 025 * Maintain a list of listeners -- normally only one. 026 */ 027 private final List<ConditionalNGEventListener> listenerList = new ArrayList<>(); 028 029 /** 030 * This contains a list of commands to be processed by the listener 031 * recipient. 032 */ 033 final HashMap<String, String> logixNGData = new HashMap<>(); 034 035 /** 036 * Construct a ConditionalEditor. 037 * <p> 038 * This is used by JmriUserPreferencesManager since it tries to create an 039 * instance of this class. 040 */ 041 public ConditionalNGEditor() { 042 super(InstanceManager.getDefault(DigitalActionManager.class).createFemaleSocket(null, new FemaleSocketListener(){ 043 @Override 044 public void connected(FemaleSocket socket) { 045 throw new UnsupportedOperationException("Not supported"); 046 } 047 048 @Override 049 public void disconnected(FemaleSocket socket) { 050 throw new UnsupportedOperationException("Not supported"); 051 } 052 }, "A"), 053 EnableClipboard.EnableClipboard, 054 EnableRootRemoveCutCopy.EnableRootRemoveCutCopy, 055 EnableRootPopup.EnableRootPopup, 056 EnableExecuteEvaluate.EnableExecuteEvaluate, 057 EnableChangeUsernameForRoot.EnableChangeUsername 058 ); 059 060 _conditionalNG = null; 061 } 062 063 /** 064 * Construct a ConditionalEditor. 065 * 066 * @param conditionalNG the ConditionalNG to be edited 067 */ 068 public ConditionalNGEditor(@Nonnull ConditionalNG conditionalNG) { 069 super(conditionalNG.getFemaleSocket(), 070 EnableClipboard.EnableClipboard, 071 EnableRootRemoveCutCopy.EnableRootRemoveCutCopy, 072 EnableRootPopup.EnableRootPopup, 073 EnableExecuteEvaluate.EnableExecuteEvaluate, 074 EnableChangeUsernameForRoot.EnableChangeUsername 075 ); 076 077 _conditionalNG = conditionalNG; 078 079 if (_conditionalNG.getUserName() == null) { 080 ConditionalNGEditor.this.setTitle( 081 Bundle.getMessage("TitleEditConditionalNG", 082 _conditionalNG.getSystemName())); 083 } else { 084 ConditionalNGEditor.this.setTitle( 085 Bundle.getMessage("TitleEditConditionalNG2", 086 _conditionalNG.getSystemName(), 087 _conditionalNG.getUserName())); 088 } 089 } 090 091 /** {@inheritDoc} */ 092 @Override 093 public void dispose() { 094 logixNGData.clear(); 095 logixNGData.put("Finish", _conditionalNG.getSystemName()); // NOI18N 096 fireLogixNGEvent(); 097 098 super.dispose(); 099 } 100 101 public void addLogixNGEventListener(ConditionalNGEventListener listener) { 102 listenerList.add(listener); 103 } 104 105 /** 106 * Notify the listeners to check for new data. 107 */ 108 void fireLogixNGEvent() { 109 for (ConditionalNGEventListener l : listenerList) { 110 l.conditionalNGEventOccurred(); 111 } 112 } 113 114 115 public interface ConditionalNGEventListener extends EventListener { 116 117 public void conditionalNGEventOccurred(); 118 } 119 120 121// private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ConditionalNGEditor.class); 122 123}