From 2c3dbe1b22a227b69efe485120fb337aefa3ddc2 Mon Sep 17 00:00:00 2001 From: denny Date: Tue, 1 Mar 2016 19:54:59 -0500 Subject: [PATCH] Work in progress - more updates to the Alias Identifier editor --- src/alias/AliasFactory.java | 198 ++++++++++++---------- src/alias/AliasIdentifierEditor.java | 129 +++++++++++--- src/alias/id/priority/PriorityEditor.java | 11 ++ src/alias/id/status/StatusID.java | 2 +- src/alias/id/status/StatusIDEditor.java | 2 +- 5 files changed, 225 insertions(+), 117 deletions(-) diff --git a/src/alias/AliasFactory.java b/src/alias/AliasFactory.java index 1acf5546..cc16ccbc 100644 --- a/src/alias/AliasFactory.java +++ b/src/alias/AliasFactory.java @@ -31,6 +31,102 @@ import alias.id.uniqueID.UniqueIDEditor; public class AliasFactory { + public static AliasID copyOf( AliasID id ) + { + switch( id.getType() ) + { + case ESN: + Esn originalESN = (Esn)id; + Esn copyESN = new Esn(); + copyESN.setEsn( originalESN.getEsn() ); + return copyESN; + case Fleetsync: + FleetsyncID originalFleetsyncID = (FleetsyncID)id; + FleetsyncID copyFleetsyncID = new FleetsyncID(); + copyFleetsyncID.setIdent( originalFleetsyncID.getIdent() ); + return copyFleetsyncID; + case LTRNetUID: + UniqueID originalUniqueID = (UniqueID)id; + UniqueID copyUniqueID = new UniqueID(); + copyUniqueID.setUid( originalUniqueID.getUid() ); + return copyUniqueID; + case LoJack: + LoJackFunctionAndID originalLoJackFunctionAndID = (LoJackFunctionAndID)id; + LoJackFunctionAndID copyLoJackFunctionAndID = new LoJackFunctionAndID(); + copyLoJackFunctionAndID.setFunction( originalLoJackFunctionAndID.getFunction() ); + copyLoJackFunctionAndID.setID( originalLoJackFunctionAndID.getID() ); + return copyLoJackFunctionAndID; + case MDC1200: + MDC1200ID originalMDC1200ID = (MDC1200ID)id; + MDC1200ID copyMDC1200ID = new MDC1200ID(); + copyMDC1200ID.setIdent( originalMDC1200ID.getIdent() ); + return copyMDC1200ID; + case MIN: + Min originalMin = (Min)id; + Min copyMin = new Min(); + copyMin.setMin( originalMin.getMin() ); + return copyMin; + case MPT1327: + MPT1327ID originalMPT1327ID = (MPT1327ID)id; + MPT1327ID copyMPT1327ID = new MPT1327ID(); + copyMPT1327ID.setIdent( originalMPT1327ID.getIdent() ); + return copyMPT1327ID; + case NonRecordable: + return new NonRecordable(); + case Priority: + Priority originalPriority = (Priority)id; + Priority copyPriority = new Priority(); + copyPriority.setPriority( originalPriority.getPriority() ); + return copyPriority; + case Site: + SiteID originalSiteID = (SiteID)id; + SiteID copySiteID = new SiteID(); + copySiteID.setSite( originalSiteID.getSite() ); + return copySiteID; + case Talkgroup: + TalkgroupID originalTalkgroupID = (TalkgroupID)id; + TalkgroupID copyTalkgroupID = new TalkgroupID(); + copyTalkgroupID.setTalkgroup( originalTalkgroupID.getTalkgroup() ); + return copyTalkgroupID; + case Status: + StatusID originalStatusID = (StatusID)id; + StatusID copyStatusID = new StatusID(); + copyStatusID.setStatus( originalStatusID.getStatus() ); + return copyStatusID; + default: + } + + return null; + } + + public static AliasAction copyOf( AliasAction action ) + { + if( action instanceof BeepAction ) + { + return new BeepAction(); + } + else if( action instanceof ClipAction ) + { + ClipAction originalClip = (ClipAction)action; + ClipAction copyClip = new ClipAction(); + copyClip.setInterval( originalClip.getInterval() ); + copyClip.setPath( originalClip.getPath() ); + copyClip.setPeriod( originalClip.getPeriod() ); + return copyClip; + } + else if( action instanceof ScriptAction ) + { + ScriptAction originalScript = (ScriptAction)action; + ScriptAction copyScript = new ScriptAction(); + copyScript.setInterval( originalScript.getInterval() ); + copyScript.setPeriod( originalScript.getPeriod() ); + copyScript.setScript( originalScript.getScript() ); + return copyScript; + } + + return null; + } + public static Alias copyOf( Alias original ) { Alias copy = new Alias( original.getName() ); @@ -41,107 +137,21 @@ public class AliasFactory for( AliasID id: original.getId() ) { - switch( id.getType() ) + AliasID copyID = copyOf( id ); + + if( copyID != null ) { - case ESN: - Esn originalESN = (Esn)id; - Esn copyESN = new Esn(); - copyESN.setEsn( originalESN.getEsn() ); - copy.addAliasID( copyESN ); - break; - case Fleetsync: - FleetsyncID originalFleetsyncID = (FleetsyncID)id; - FleetsyncID copyFleetsyncID = new FleetsyncID(); - copyFleetsyncID.setIdent( originalFleetsyncID.getIdent() ); - copy.addAliasID( copyFleetsyncID ); - break; - case LTRNetUID: - UniqueID originalUniqueID = (UniqueID)id; - UniqueID copyUniqueID = new UniqueID(); - copyUniqueID.setUid( originalUniqueID.getUid() ); - copy.addAliasID( copyUniqueID ); - break; - case LoJack: - LoJackFunctionAndID originalLoJackFunctionAndID = (LoJackFunctionAndID)id; - LoJackFunctionAndID copyLoJackFunctionAndID = new LoJackFunctionAndID(); - copyLoJackFunctionAndID.setFunction( originalLoJackFunctionAndID.getFunction() ); - copyLoJackFunctionAndID.setID( originalLoJackFunctionAndID.getID() ); - copy.addAliasID( copyLoJackFunctionAndID ); - break; - case MDC1200: - MDC1200ID originalMDC1200ID = (MDC1200ID)id; - MDC1200ID copyMDC1200ID = new MDC1200ID(); - copyMDC1200ID.setIdent( originalMDC1200ID.getIdent() ); - copy.addAliasID( copyMDC1200ID ); - break; - case MIN: - Min originalMin = (Min)id; - Min copyMin = new Min(); - copyMin.setMin( originalMin.getMin() ); - copy.addAliasID( copyMin ); - break; - case MPT1327: - MPT1327ID originalMPT1327ID = (MPT1327ID)id; - MPT1327ID copyMPT1327ID = new MPT1327ID(); - copyMPT1327ID.setIdent( originalMPT1327ID.getIdent() ); - copy.addAliasID( copyMPT1327ID ); - break; - case NonRecordable: - copy.addAliasID( new NonRecordable() ); - break; - case Priority: - Priority originalPriority = (Priority)id; - Priority copyPriority = new Priority(); - copyPriority.setPriority( originalPriority.getPriority() ); - copy.addAliasID( copyPriority ); - break; - case Site: - SiteID originalSiteID = (SiteID)id; - SiteID copySiteID = new SiteID(); - copySiteID.setSite( originalSiteID.getSite() ); - copy.addAliasID( copySiteID ); - break; - case Talkgroup: - TalkgroupID originalTalkgroupID = (TalkgroupID)id; - TalkgroupID copyTalkgroupID = new TalkgroupID(); - copyTalkgroupID.setTalkgroup( originalTalkgroupID.getTalkgroup() ); - copy.addAliasID( copyTalkgroupID ); - break; - case Status: - default: - throw new IllegalArgumentException( "Unrecognized alias " - + "ID type: " + id.getType() ); + copy.addAliasID( copyID ); } } for( AliasAction action: original.getAction() ) { - if( action instanceof BeepAction ) + AliasAction copyAction = copyOf( action ); + + if( copyAction != null ) { - copy.addAliasAction( new BeepAction() ); - } - else if( action instanceof ClipAction ) - { - ClipAction originalClip = (ClipAction)action; - ClipAction copyClip = new ClipAction(); - copyClip.setInterval( originalClip.getInterval() ); - copyClip.setPath( originalClip.getPath() ); - copyClip.setPeriod( originalClip.getPeriod() ); - copy.addAliasAction( copyClip ); - } - else if( action instanceof ScriptAction ) - { - ScriptAction originalScript = (ScriptAction)action; - ScriptAction copyScript = new ScriptAction(); - copyScript.setInterval( originalScript.getInterval() ); - copyScript.setPeriod( originalScript.getPeriod() ); - copyScript.setScript( originalScript.getScript() ); - copy.addAliasAction( copyScript ); - } - else - { - throw new IllegalArgumentException( "Unrecognized alias " - + "action: " + action.getClass() ); + copy.addAliasAction( copyAction ); } } diff --git a/src/alias/AliasIdentifierEditor.java b/src/alias/AliasIdentifierEditor.java index ca609412..3a8fca14 100644 --- a/src/alias/AliasIdentifierEditor.java +++ b/src/alias/AliasIdentifierEditor.java @@ -27,7 +27,6 @@ import net.miginfocom.swing.MigLayout; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sample.Listener; import alias.AliasEvent.Event; public class AliasIdentifierEditor extends AliasConfigurationEditor @@ -38,6 +37,10 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor private static ListModel EMPTY_MODEL = new DefaultListModel<>(); private JList mAliasIDList = new JList<>( EMPTY_MODEL ); + private JButton mNewIDButton; + private JButton mCloneIDButton; + private JButton mDeleteIDButton; + private EditorContainer mEditorContainer = new EditorContainer(); private Alias mAlias; @@ -73,6 +76,14 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor AliasID selected = (AliasID)selectedItem; mEditorContainer.setAliasID( selected ); + + mCloneIDButton.setEnabled( true ); + mDeleteIDButton.setEnabled( true ); + } + else + { + mCloneIDButton.setEnabled( false ); + mDeleteIDButton.setEnabled( false ); } } } @@ -83,9 +94,9 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor add( mEditorContainer, "span,grow" ); - final JButton newButton = new JButton( "New ..." ); + mNewIDButton = new JButton( "New ..." ); - newButton.addMouseListener( new MouseAdapter() + mNewIDButton.addMouseListener( new MouseAdapter() { @Override public void mouseClicked( MouseEvent e ) @@ -111,9 +122,57 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor } } ); - add( newButton ); - add( new JButton( "Copy" ) ); - add( new JButton( "Delete" ), "wrap" ); + add( mNewIDButton ); + + mCloneIDButton = new JButton( "Clone" ); + mCloneIDButton.setEnabled( false ); + mCloneIDButton.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( ActionEvent e ) + { + AliasID selected = mAliasIDList.getSelectedValue(); + + if( selected != null ) + { + AliasID clone = AliasFactory.copyOf( selected ); + + if( clone != null ) + { + addAliasIDToList( clone ); + } + } + } + } ); + add( mCloneIDButton ); + + mDeleteIDButton = new JButton( "Delete" ); + mDeleteIDButton.setEnabled( false ); + mDeleteIDButton.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( ActionEvent e ) + { + final AliasID selected = mAliasIDList.getSelectedValue(); + + if( selected != null ) + { + int choice = JOptionPane.showConfirmDialog( mDeleteIDButton, + "Do you want to delete [" + selected.toString() + "]", + "Are you sure?", JOptionPane.YES_NO_OPTION ); + + if( choice == JOptionPane.YES_OPTION ) + { + mAlias.removeAliasID( selected ); + + mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) ); + + setAlias( mAlias ); + } + } + } + } ); + add( mDeleteIDButton, "wrap" ); } @Override @@ -154,6 +213,11 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor @Override public void save() { + if( mEditorContainer.isModified() ) + { + mEditorContainer.save(); + } + mAliasModel.broadcast( new AliasEvent( mAlias, Event.CHANGE ) ); } @@ -170,6 +234,24 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor add( mEditor ); } + public boolean isModified() + { + if( mEditor != null ) + { + return mEditor.isModified(); + } + + return false; + } + + public void save() + { + if( mEditor != null ) + { + mEditor.save(); + } + } + public void setAliasID( AliasID aliasID ) { if( mEditor != null ) @@ -199,6 +281,25 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor } } + private void addAliasIDToList( final AliasID id ) + { + if( id != null && mAlias != null ) + { + mAlias.addAliasID( id ); + + EventQueue.invokeLater( new Runnable() + { + @Override + public void run() + { + setAlias( mAlias ); + + mAliasIDList.setSelectedValue( id, true ); + } + } ); + } + } + public class AddAliasIdentifierItem extends JMenuItem { private static final long serialVersionUID = 1L; @@ -218,21 +319,7 @@ public class AliasIdentifierEditor extends AliasConfigurationEditor { final AliasID id = AliasFactory.getAliasID( mAliasIDType ); - if( id != null && mAlias != null ) - { - mAlias.addAliasID( id ); - - EventQueue.invokeLater( new Runnable() - { - @Override - public void run() - { - setAlias( mAlias ); - - mAliasIDList.setSelectedValue( id, true ); - } - } ); - } + addAliasIDToList( id ); } } ); } diff --git a/src/alias/id/priority/PriorityEditor.java b/src/alias/id/priority/PriorityEditor.java index 608b827e..1190d2ec 100644 --- a/src/alias/id/priority/PriorityEditor.java +++ b/src/alias/id/priority/PriorityEditor.java @@ -19,6 +19,8 @@ package alias.id.priority; import java.awt.Color; import java.awt.Cursor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -65,6 +67,14 @@ public class PriorityEditor extends ComponentEditor setLayout( new MigLayout( "fill,wrap 2", "[right][left]", "[][]" ) ); mDoNotMonitorCheckBox.setToolTipText( HELP_TEXT ); + mDoNotMonitorCheckBox.addActionListener( new ActionListener() + { + @Override + public void actionPerformed( ActionEvent e ) + { + setModified( true ); + } + } ); add( mDoNotMonitorCheckBox, "span,align center" ); mPrioritySlider = new JSlider( JSlider.HORIZONTAL, @@ -83,6 +93,7 @@ public class PriorityEditor extends ComponentEditor public void stateChanged( ChangeEvent e ) { mPrioritySliderLabel.setText( "Priority: " + mPrioritySlider.getValue() ); + setModified( true ); } } ); mPrioritySlider.setToolTipText( HELP_TEXT ); diff --git a/src/alias/id/status/StatusID.java b/src/alias/id/status/StatusID.java index 40ae82b8..5ce9c2ab 100644 --- a/src/alias/id/status/StatusID.java +++ b/src/alias/id/status/StatusID.java @@ -43,7 +43,7 @@ public class StatusID extends AliasID public String toString() { - return "Status: " + mStatus; + return "Status: " + String.format( "%03d", mStatus ); } @Override diff --git a/src/alias/id/status/StatusIDEditor.java b/src/alias/id/status/StatusIDEditor.java index db0d6daf..6b29e174 100644 --- a/src/alias/id/status/StatusIDEditor.java +++ b/src/alias/id/status/StatusIDEditor.java @@ -113,7 +113,7 @@ public class StatusIDEditor extends ComponentEditor if( statusID != null ) { - mTextField.setText( String.valueOf( statusID.getStatus() ) ); + mTextField.setText( String.format( "%03d", statusID.getStatus() ) ); } setModified( false );