wip #34 - updated tuner configurations to include unique id and assigned

flag, so that we can get rid of tuner configuration assignment objects.
This commit is contained in:
denny
2016-03-17 22:01:31 -04:00
parent f518c15a06
commit 45f0e09d5a
13 changed files with 139 additions and 218 deletions

View File

@@ -759,9 +759,6 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
mTunerConfigurationModel.addTunerConfigurations( mTunerConfigurationModel.addTunerConfigurations(
mSettings.getTunerConfigurations() ); mSettings.getTunerConfigurations() );
mTunerConfigurationModel.addTunerConfigurationAssignments(
mSettings.getSelectedTunerConfiguration() );
} }
} }
@@ -771,9 +768,6 @@ public class SettingsManager implements Listener<TunerConfigurationEvent>
{ {
mSettings.setTunerConfigurations( mSettings.setTunerConfigurations(
mTunerConfigurationModel.getTunerConfigurations() ); mTunerConfigurationModel.getTunerConfigurations() );
mSettings.setSelectedTunerConfiguration(
mTunerConfigurationModel.getTunerConfigurationAssignments() );
} }
} }

View File

@@ -10,7 +10,6 @@ import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JScrollPane; import javax.swing.JScrollPane;
import javax.swing.JTable; import javax.swing.JTable;
@@ -26,7 +25,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import source.tuner.configuration.TunerConfiguration; import source.tuner.configuration.TunerConfiguration;
import source.tuner.configuration.TunerConfigurationEditor;
import source.tuner.configuration.TunerConfigurationFactory; import source.tuner.configuration.TunerConfigurationFactory;
import source.tuner.configuration.TunerConfigurationModel; import source.tuner.configuration.TunerConfigurationModel;
@@ -94,7 +92,8 @@ public class TunerEditor extends Editor<Tuner>
} ); } );
JScrollPane tableScroller = new JScrollPane( mTunerConfigurationTable ); JScrollPane tableScroller = new JScrollPane( mTunerConfigurationTable );
tableScroller.setHorizontalScrollBarPolicy( ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER ); tableScroller.setHorizontalScrollBarPolicy(
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER );
listPanel.add( new JLabel( "Tuner Configurations" ), "span" ); listPanel.add( new JLabel( "Tuner Configurations" ), "span" );
listPanel.add( tableScroller, "span" ); listPanel.add( tableScroller, "span" );
@@ -106,38 +105,14 @@ public class TunerEditor extends Editor<Tuner>
{ {
Tuner tuner = getItem(); Tuner tuner = getItem();
int counter = 0; String name = mTunerConfigurationModel
.getDistinctName( tuner.getTunerType(), tuner.getUniqueID() );
String name = tuner.getUniqueID() + "-New"; TunerConfiguration config = TunerConfigurationFactory
.getTunerConfiguration( tuner.getTunerType(),
while( counter < 10 && mTunerConfigurationModel tuner.getUniqueID(), name );
.hasTunerConfiguration( tuner.getTunerType(), name ) )
{
counter++;
StringBuilder sb = new StringBuilder(); mTunerConfigurationModel.addTunerConfiguration( config );
sb.append( tuner.getUniqueID() );
sb.append( "-New(" );
sb.append( String.valueOf( counter ) );
sb.append( ")" );
name = sb.toString();
}
if( counter < 10 )
{
TunerConfiguration config = TunerConfigurationFactory
.getTunerConfiguration( tuner.getTunerType(), name );
mTunerConfigurationModel.addTunerConfiguration( config );
}
else
{
JOptionPane.showMessageDialog( TunerEditor.this,
"Can't create configuration - maximum limit reached",
"Error",
JOptionPane.OK_OPTION );
}
} }
} ); } );
listPanel.add( mNewConfigurationButton ); listPanel.add( mNewConfigurationButton );
@@ -186,7 +161,8 @@ public class TunerEditor extends Editor<Tuner>
mTunerConfigurationTable.setEnabled( true ); mTunerConfigurationTable.setEnabled( true );
mNewConfigurationButton.setEnabled( true ); mNewConfigurationButton.setEnabled( true );
mRowSorter.setRowFilter( new ConfigurationRowFilter( tuner.getTunerType() ) ); mRowSorter.setRowFilter( new ConfigurationRowFilter(
tuner.getTunerType(), tuner.getUniqueID() ) );
TunerConfiguration assigned = mTunerConfigurationModel TunerConfiguration assigned = mTunerConfigurationModel
.getTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() ); .getTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() );
@@ -228,7 +204,7 @@ public class TunerEditor extends Editor<Tuner>
mEditor = new EmptyEditor<TunerConfiguration>(); mEditor = new EmptyEditor<TunerConfiguration>();
} }
//Swap out the editor //Swap out the editor
int split = mEditorSplitPane.getDividerLocation( 0 ); int split = mEditorSplitPane.getDividerLocation( 0 );
mEditorSplitPane.remove( mEditorScroller ); mEditorSplitPane.remove( mEditorScroller );
mEditorScroller = new JScrollPane( mEditor ); mEditorScroller = new JScrollPane( mEditor );
@@ -259,10 +235,12 @@ public class TunerEditor extends Editor<Tuner>
public class ConfigurationRowFilter extends RowFilter<TunerConfigurationModel,Integer> public class ConfigurationRowFilter extends RowFilter<TunerConfigurationModel,Integer>
{ {
private TunerType mTunerType; private TunerType mTunerType;
private String mUniqueID;
public ConfigurationRowFilter( TunerType type ) public ConfigurationRowFilter( TunerType type, String uniqueID )
{ {
mTunerType = type; mTunerType = type;
mUniqueID = uniqueID;
} }
@Override @Override
@@ -272,7 +250,10 @@ public class TunerEditor extends Editor<Tuner>
TunerConfiguration config = entry.getModel() TunerConfiguration config = entry.getModel()
.getTunerConfiguration( entry.getIdentifier() ); .getTunerConfiguration( entry.getIdentifier() );
return config != null && config.getTunerType() == mTunerType; return config != null &&
config.getTunerType() == mTunerType &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( mUniqueID );
} }
} }

View File

@@ -39,12 +39,11 @@ public class AirspyTunerConfiguration extends TunerConfiguration
*/ */
public AirspyTunerConfiguration() public AirspyTunerConfiguration()
{ {
this( "Default" );
} }
public AirspyTunerConfiguration( String name ) public AirspyTunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -29,13 +29,23 @@ import source.tuner.TunerType;
public abstract class TunerConfiguration public abstract class TunerConfiguration
{ {
protected String mName; protected String mName;
protected String mUniqueID;
protected boolean mAssigned;
/** /**
* Default constructor to support JAXB * Default constructor to support JAXB
*/ */
public TunerConfiguration() public TunerConfiguration()
{ {
this( "Unknown" ); }
/**
* Normal constructor
*/
public TunerConfiguration( String uniqueID, String name )
{
mUniqueID = uniqueID;
mName = name;
} }
public String toString() public String toString()
@@ -43,14 +53,6 @@ public abstract class TunerConfiguration
return mName; return mName;
} }
/**
* Normal constructor
*/
public TunerConfiguration( String name )
{
mName = name;
}
@XmlAttribute( name = "name" ) @XmlAttribute( name = "name" )
public String getName() public String getName()
{ {
@@ -61,6 +63,28 @@ public abstract class TunerConfiguration
{ {
mName = name; mName = name;
} }
@XmlAttribute( name = "unique_id" )
public String getUniqueID()
{
return mUniqueID;
}
public void setUniqueID( String id )
{
mUniqueID = id;;
}
@XmlAttribute( name = "assigned" )
public boolean isAssigned()
{
return mAssigned;
}
public void setAssigned( boolean assigned )
{
mAssigned = assigned;
}
@XmlAttribute( name = "tuner_type" ) @XmlAttribute( name = "tuner_type" )
public abstract TunerType getTunerType(); public abstract TunerType getTunerType();

View File

@@ -3,7 +3,6 @@ package source.tuner.configuration;
public class TunerConfigurationEvent public class TunerConfigurationEvent
{ {
private TunerConfiguration mTunerConfiguration; private TunerConfiguration mTunerConfiguration;
private TunerConfigurationAssignment mTunerConfigurationAssignment;
private Event mEvent; private Event mEvent;
public TunerConfigurationEvent( TunerConfiguration configuration, Event event ) public TunerConfigurationEvent( TunerConfiguration configuration, Event event )
@@ -12,22 +11,11 @@ public class TunerConfigurationEvent
mEvent = event; mEvent = event;
} }
public TunerConfigurationEvent( TunerConfigurationAssignment assignment, Event event )
{
mTunerConfigurationAssignment = assignment;
mEvent = event;
}
public TunerConfiguration getConfiguration() public TunerConfiguration getConfiguration()
{ {
return mTunerConfiguration; return mTunerConfiguration;
} }
public TunerConfigurationAssignment getAssignment()
{
return mTunerConfigurationAssignment;
}
public Event getEvent() public Event getEvent()
{ {
return mEvent; return mEvent;
@@ -35,11 +23,8 @@ public class TunerConfigurationEvent
public enum Event public enum Event
{ {
CONFIGURATION_ADD, ADD,
CONFIGURATION_REMOVE, REMOVE,
CONFIGURATION_CHANGE, CHANGE;
ASSIGNMENT_ADD,
ASSIGNMENT_REMOVE,
ASSIGNMENT_CHANGE;
} }
} }

View File

@@ -15,22 +15,23 @@ import source.tuner.rtl.r820t.R820TTunerEditor;
public class TunerConfigurationFactory public class TunerConfigurationFactory
{ {
public static TunerConfiguration getTunerConfiguration( TunerType type, String name ) public static TunerConfiguration getTunerConfiguration( TunerType type,
String uniqueID, String name )
{ {
switch( type ) switch( type )
{ {
case AIRSPY_R820T: case AIRSPY_R820T:
return new AirspyTunerConfiguration( name ); return new AirspyTunerConfiguration( uniqueID, name );
case ELONICS_E4000: case ELONICS_E4000:
return new E4KTunerConfiguration( name ); return new E4KTunerConfiguration( uniqueID, name );
case FUNCUBE_DONGLE_PRO: case FUNCUBE_DONGLE_PRO:
return new FCD1TunerConfiguration( name ); return new FCD1TunerConfiguration( uniqueID, name );
case FUNCUBE_DONGLE_PRO_PLUS: case FUNCUBE_DONGLE_PRO_PLUS:
return new FCD2TunerConfiguration( name ); return new FCD2TunerConfiguration( uniqueID, name );
case HACKRF: case HACKRF:
return new HackRFTunerConfiguration( name ); return new HackRFTunerConfiguration( uniqueID, name );
case RAFAELMICRO_R820T: case RAFAELMICRO_R820T:
return new R820TTunerConfiguration( name ); return new R820TTunerConfiguration( uniqueID, name );
default: default:
throw new IllegalArgumentException( "Unrecognized tuner type [" throw new IllegalArgumentException( "Unrecognized tuner type ["
+ type.name() + "] - can't create named [" + name + "] tuner" + type.name() + "] - can't create named [" + name + "] tuner"

View File

@@ -20,11 +20,11 @@ public class TunerConfigurationModel extends AbstractTableModel
private static final int TUNER_TYPE = 0; private static final int TUNER_TYPE = 0;
private static final int CONFIGURATION_NAME = 1; private static final int CONFIGURATION_NAME = 1;
private static final String[] COLUMN_HEADERS = { "Tuner Type", "Name" }; private static final int ASSIGNED = 2;
private static final String[] COLUMN_HEADERS = { "Tuner Type", "Name", "Assigned" };
private List<Listener<TunerConfigurationEvent>> mConfigurationListeners = new ArrayList<>(); private List<Listener<TunerConfigurationEvent>> mConfigurationListeners = new ArrayList<>();
private List<TunerConfiguration> mTunerConfigurations = new ArrayList<>(); private List<TunerConfiguration> mTunerConfigurations = new ArrayList<>();
private List<TunerConfigurationAssignment> mTunerConfigurationAssignments = new ArrayList<>();
/** /**
* Table model for managing tuner configurations and tuner configuration * Table model for managing tuner configurations and tuner configuration
@@ -59,7 +59,9 @@ public class TunerConfigurationModel extends AbstractTableModel
*/ */
public void addTunerConfiguration( TunerConfiguration config ) public void addTunerConfiguration( TunerConfiguration config )
{ {
if( !mTunerConfigurations.contains( config ) ) if( !mTunerConfigurations.contains( config ) &&
config.getUniqueID() != null &&
config.getName() != null )
{ {
mTunerConfigurations.add( config ); mTunerConfigurations.add( config );
@@ -67,7 +69,7 @@ public class TunerConfigurationModel extends AbstractTableModel
fireTableRowsInserted( index, index ); fireTableRowsInserted( index, index );
broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_ADD ) ); broadcast( new TunerConfigurationEvent( config, Event.ADD ) );
} }
} }
@@ -85,7 +87,7 @@ public class TunerConfigurationModel extends AbstractTableModel
fireTableRowsDeleted( index, index ); fireTableRowsDeleted( index, index );
broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_REMOVE ) ); broadcast( new TunerConfigurationEvent( config, Event.REMOVE ) );
} }
} }
@@ -98,7 +100,7 @@ public class TunerConfigurationModel extends AbstractTableModel
{ {
for( TunerConfiguration config: mTunerConfigurations ) for( TunerConfiguration config: mTunerConfigurations )
{ {
broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_REMOVE ) ); broadcast( new TunerConfigurationEvent( config, Event.REMOVE ) );
} }
int size = mTunerConfigurations.size(); int size = mTunerConfigurations.size();
@@ -106,13 +108,6 @@ public class TunerConfigurationModel extends AbstractTableModel
mTunerConfigurations.clear(); mTunerConfigurations.clear();
fireTableRowsDeleted( 0, size - 1 ); fireTableRowsDeleted( 0, size - 1 );
for( TunerConfigurationAssignment assignment: mTunerConfigurationAssignments )
{
broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_REMOVE ) );
}
mTunerConfigurationAssignments.clear();
} }
/** /**
@@ -142,96 +137,61 @@ public class TunerConfigurationModel extends AbstractTableModel
} }
} }
/**
* Adds a list of tuner configuration assignments to the model
*/
public void addTunerConfigurationAssignments( List<TunerConfigurationAssignment> assignments )
{
for( TunerConfigurationAssignment assigment: assignments )
{
addTunerConfigurationAssignment( assigment );
}
}
/**
* Returns of list of tuner configurations from the model
*/
public List<TunerConfigurationAssignment> getTunerConfigurationAssignments()
{
return mTunerConfigurationAssignments;
}
/**
* Adds a tuner configuration assigment to the model
*/
public void addTunerConfigurationAssignment( TunerConfigurationAssignment assignment )
{
mTunerConfigurationAssignments.add( assignment );
broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_ADD ) );
}
/**
* Removes a tuner configuration assignment from the model
*/
public void removeTunerConfigurationAssignment( TunerConfigurationAssignment assignment )
{
mTunerConfigurationAssignments.remove( assignment );
broadcast( new TunerConfigurationEvent( assignment, Event.ASSIGNMENT_REMOVE ) );
}
/** /**
* Returns the tuner configuration that is assigned to the tuner with the * Returns the tuner configuration that is assigned to the tuner with the
* tuner type and uniqueID, or creates a new tuner configuration and tuner * tuner type and uniqueID, or selects the first existing configuration that
* configuration assignment for the tuner. * matches the tuner type and unique ID and assigns it, or creates a new
* tuner configuration and assigns it to the tuner.
*
* This method will always return a tuner configuration that is assigned to
* the tuner type and unique ID.
*/ */
public TunerConfiguration getTunerConfiguration( TunerType type, String uniqueID ) public TunerConfiguration getTunerConfiguration( TunerType type, String uniqueID )
{ {
String configurationName = null; List<TunerConfiguration> configs = getTunerConfigurations( type, uniqueID );
TunerConfigurationAssignment assignment = getTunerConfigurationAssignment( type, uniqueID );
if( assignment != null )
{
configurationName = assignment.getTunerConfigurationName();
}
if( configurationName == null )
{
configurationName = uniqueID;
}
List<TunerConfiguration> configs = getTunerConfigurations( type );
for( TunerConfiguration config: configs ) for( TunerConfiguration config: configs )
{ {
if( config.getName().contentEquals( configurationName ) ) if( config.isAssigned() &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( uniqueID ) )
{ {
if( assignment == null )
{
assignTunerConfiguration( config, configurationName );
}
return config; return config;
} }
} }
//Reuse an existing configuration to assign
if( !configs.isEmpty() )
{
configs.get( 0 ).setAssigned( true );
return configs.get( 0 );
}
String name = getDistinctName( type, uniqueID );
//We didn't find the config so create a new one and assign it //We didn't find the config so create a new one and assign it
TunerConfiguration config = TunerConfigurationFactory TunerConfiguration config = TunerConfigurationFactory
.getTunerConfiguration( type, configurationName ); .getTunerConfiguration( type, uniqueID, name );
config.setAssigned( true );
addTunerConfiguration( config ); addTunerConfiguration( config );
assignTunerConfiguration( config, configurationName );
return config; return config;
} }
public boolean hasTunerConfiguration( TunerType type, String name ) /**
* Indicates if a configuration exists in this model matching the tuner type
* and unique ID and name.
*/
public boolean hasTunerConfiguration( TunerType type, String uniqueID, String name )
{ {
for( TunerConfiguration config: mTunerConfigurations ) for( TunerConfiguration config: mTunerConfigurations )
{ {
if( config.getTunerType() == type && if( config.getTunerType() == type &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( uniqueID ) &&
config.getName() != null &&
config.getName().contentEquals( name ) ) config.getName().contentEquals( name ) )
{ {
return true; return true;
@@ -240,59 +200,39 @@ public class TunerConfigurationModel extends AbstractTableModel
return false; return false;
} }
/**
* Assigns the tuner configuration to the tuner identified by the uniqueID
*/
public void assignTunerConfiguration( TunerConfiguration config, String uniqueID )
{
TunerConfigurationAssignment assignment =
getTunerConfigurationAssignment( config.getTunerType(), uniqueID );
Event event = Event.ASSIGNMENT_CHANGE;
if( assignment == null )
{
assignment = new TunerConfigurationAssignment();
assignment.setUniqueID( uniqueID );
addTunerConfigurationAssignment( assignment );
event = Event.ASSIGNMENT_ADD;
}
assignment.setTunerConfigurationName( config.getName() );
broadcast( new TunerConfigurationEvent( assignment, event ) );
}
/**
* Returns the tuner configuration assiged to the tuner type and unique id
*/
private TunerConfigurationAssignment getTunerConfigurationAssignment( TunerType type, String uniqueID )
{
for( TunerConfigurationAssignment assignment: mTunerConfigurationAssignments )
{
if( assignment.getTunerType() == type &&
assignment.getUniqueID().contentEquals( uniqueID ) )
{
return assignment;
}
}
return null;
}
/**
* Creates a configuration name for the tuner configuration that is distinct
* among the existing tuner configurations of the same type and uniqueID
*/
public String getDistinctName( TunerType type, String uniqueID )
{
int counter = 0;
String name = "New";
while( hasTunerConfiguration( type, uniqueID, name ) )
{
counter++;
name = "New (" + counter + ")";
}
return name;
}
/** /**
* Returns all tuner configurations for the specified tuner type * Returns all tuner configurations for the specified tuner type
*/ */
public List<TunerConfiguration> getTunerConfigurations( TunerType type ) public List<TunerConfiguration> getTunerConfigurations( TunerType type, String uniqueID )
{ {
List<TunerConfiguration> configs = new ArrayList<>(); List<TunerConfiguration> configs = new ArrayList<>();
for( TunerConfiguration config: mTunerConfigurations ) for( TunerConfiguration config: mTunerConfigurations )
{ {
if( config.getTunerType() == type ) if( config.getTunerType() == type &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( uniqueID ) )
{ {
configs.add( config ); configs.add( config );
} }
@@ -370,6 +310,8 @@ public class TunerConfigurationModel extends AbstractTableModel
return config.getTunerType().getLabel(); return config.getTunerType().getLabel();
case CONFIGURATION_NAME: case CONFIGURATION_NAME:
return config.getName(); return config.getName();
case ASSIGNED:
return config.isAssigned() ? "*" : null;
default: default:
break; break;
} }

View File

@@ -42,12 +42,11 @@ public class FCD1TunerConfiguration extends TunerConfiguration
*/ */
public FCD1TunerConfiguration() public FCD1TunerConfiguration()
{ {
this( "Default" );
} }
public FCD1TunerConfiguration( String name ) public FCD1TunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -33,12 +33,11 @@ public class FCD2TunerConfiguration extends TunerConfiguration
*/ */
public FCD2TunerConfiguration() public FCD2TunerConfiguration()
{ {
this( "Default" );
} }
public FCD2TunerConfiguration( String name ) public FCD2TunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -39,12 +39,11 @@ public class HackRFTunerConfiguration extends TunerConfiguration
*/ */
public HackRFTunerConfiguration() public HackRFTunerConfiguration()
{ {
this( "Default" );
} }
public HackRFTunerConfiguration( String name ) public HackRFTunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -41,12 +41,11 @@ public class E4KTunerConfiguration extends TunerConfiguration
*/ */
public E4KTunerConfiguration() public E4KTunerConfiguration()
{ {
this( "Default" );
} }
public E4KTunerConfiguration( String name ) public E4KTunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -41,12 +41,11 @@ public class R820TTunerConfiguration extends TunerConfiguration
*/ */
public R820TTunerConfiguration() public R820TTunerConfiguration()
{ {
this( "Default" );
} }
public R820TTunerConfiguration( String name ) public R820TTunerConfiguration( String uniqueID, String name )
{ {
super( name ); super( uniqueID, name );
} }
@Override @Override

View File

@@ -120,7 +120,7 @@ public class R820TTunerEditor extends TunerConfigurationEditor
config.setVGAGain( vgaGain ); config.setVGAGain( vgaGain );
getTunerConfigurationModel().broadcast( getTunerConfigurationModel().broadcast(
new TunerConfigurationEvent( getConfiguration(), Event.CONFIGURATION_CHANGE ) ); new TunerConfigurationEvent( getConfiguration(), Event.CHANGE ) );
} }
} }