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

View File

@@ -10,7 +10,6 @@ import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
@@ -26,7 +25,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import source.tuner.configuration.TunerConfiguration;
import source.tuner.configuration.TunerConfigurationEditor;
import source.tuner.configuration.TunerConfigurationFactory;
import source.tuner.configuration.TunerConfigurationModel;
@@ -94,7 +92,8 @@ public class TunerEditor extends Editor<Tuner>
} );
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( tableScroller, "span" );
@@ -106,38 +105,14 @@ public class TunerEditor extends Editor<Tuner>
{
Tuner tuner = getItem();
int counter = 0;
String name = mTunerConfigurationModel
.getDistinctName( tuner.getTunerType(), tuner.getUniqueID() );
String name = tuner.getUniqueID() + "-New";
while( counter < 10 && mTunerConfigurationModel
.hasTunerConfiguration( tuner.getTunerType(), name ) )
{
counter++;
TunerConfiguration config = TunerConfigurationFactory
.getTunerConfiguration( tuner.getTunerType(),
tuner.getUniqueID(), name );
StringBuilder sb = new StringBuilder();
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 );
}
mTunerConfigurationModel.addTunerConfiguration( config );
}
} );
listPanel.add( mNewConfigurationButton );
@@ -186,7 +161,8 @@ public class TunerEditor extends Editor<Tuner>
mTunerConfigurationTable.setEnabled( true );
mNewConfigurationButton.setEnabled( true );
mRowSorter.setRowFilter( new ConfigurationRowFilter( tuner.getTunerType() ) );
mRowSorter.setRowFilter( new ConfigurationRowFilter(
tuner.getTunerType(), tuner.getUniqueID() ) );
TunerConfiguration assigned = mTunerConfigurationModel
.getTunerConfiguration( tuner.getTunerType(), tuner.getUniqueID() );
@@ -228,7 +204,7 @@ public class TunerEditor extends Editor<Tuner>
mEditor = new EmptyEditor<TunerConfiguration>();
}
//Swap out the editor
//Swap out the editor
int split = mEditorSplitPane.getDividerLocation( 0 );
mEditorSplitPane.remove( mEditorScroller );
mEditorScroller = new JScrollPane( mEditor );
@@ -259,10 +235,12 @@ public class TunerEditor extends Editor<Tuner>
public class ConfigurationRowFilter extends RowFilter<TunerConfigurationModel,Integer>
{
private TunerType mTunerType;
private String mUniqueID;
public ConfigurationRowFilter( TunerType type )
public ConfigurationRowFilter( TunerType type, String uniqueID )
{
mTunerType = type;
mUniqueID = uniqueID;
}
@Override
@@ -272,7 +250,10 @@ public class TunerEditor extends Editor<Tuner>
TunerConfiguration config = entry.getModel()
.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()
{
this( "Default" );
}
public AirspyTunerConfiguration( String name )
public AirspyTunerConfiguration( String uniqueID, String name )
{
super( name );
super( uniqueID, name );
}
@Override

View File

@@ -29,13 +29,23 @@ import source.tuner.TunerType;
public abstract class TunerConfiguration
{
protected String mName;
protected String mUniqueID;
protected boolean mAssigned;
/**
* Default constructor to support JAXB
*/
public TunerConfiguration()
{
this( "Unknown" );
}
/**
* Normal constructor
*/
public TunerConfiguration( String uniqueID, String name )
{
mUniqueID = uniqueID;
mName = name;
}
public String toString()
@@ -43,14 +53,6 @@ public abstract class TunerConfiguration
return mName;
}
/**
* Normal constructor
*/
public TunerConfiguration( String name )
{
mName = name;
}
@XmlAttribute( name = "name" )
public String getName()
{
@@ -61,6 +63,28 @@ public abstract class TunerConfiguration
{
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" )
public abstract TunerType getTunerType();

View File

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

View File

@@ -15,22 +15,23 @@ import source.tuner.rtl.r820t.R820TTunerEditor;
public class TunerConfigurationFactory
{
public static TunerConfiguration getTunerConfiguration( TunerType type, String name )
public static TunerConfiguration getTunerConfiguration( TunerType type,
String uniqueID, String name )
{
switch( type )
{
case AIRSPY_R820T:
return new AirspyTunerConfiguration( name );
return new AirspyTunerConfiguration( uniqueID, name );
case ELONICS_E4000:
return new E4KTunerConfiguration( name );
return new E4KTunerConfiguration( uniqueID, name );
case FUNCUBE_DONGLE_PRO:
return new FCD1TunerConfiguration( name );
return new FCD1TunerConfiguration( uniqueID, name );
case FUNCUBE_DONGLE_PRO_PLUS:
return new FCD2TunerConfiguration( name );
return new FCD2TunerConfiguration( uniqueID, name );
case HACKRF:
return new HackRFTunerConfiguration( name );
return new HackRFTunerConfiguration( uniqueID, name );
case RAFAELMICRO_R820T:
return new R820TTunerConfiguration( name );
return new R820TTunerConfiguration( uniqueID, name );
default:
throw new IllegalArgumentException( "Unrecognized tuner type ["
+ 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 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<TunerConfiguration> mTunerConfigurations = new ArrayList<>();
private List<TunerConfigurationAssignment> mTunerConfigurationAssignments = new ArrayList<>();
/**
* Table model for managing tuner configurations and tuner configuration
@@ -59,7 +59,9 @@ public class TunerConfigurationModel extends AbstractTableModel
*/
public void addTunerConfiguration( TunerConfiguration config )
{
if( !mTunerConfigurations.contains( config ) )
if( !mTunerConfigurations.contains( config ) &&
config.getUniqueID() != null &&
config.getName() != null )
{
mTunerConfigurations.add( config );
@@ -67,7 +69,7 @@ public class TunerConfigurationModel extends AbstractTableModel
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 );
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 )
{
broadcast( new TunerConfigurationEvent( config, Event.CONFIGURATION_REMOVE ) );
broadcast( new TunerConfigurationEvent( config, Event.REMOVE ) );
}
int size = mTunerConfigurations.size();
@@ -106,13 +108,6 @@ public class TunerConfigurationModel extends AbstractTableModel
mTunerConfigurations.clear();
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
* tuner type and uniqueID, or creates a new tuner configuration and tuner
* configuration assignment for the tuner.
* tuner type and uniqueID, or selects the first existing configuration that
* 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 )
{
String configurationName = null;
TunerConfigurationAssignment assignment = getTunerConfigurationAssignment( type, uniqueID );
if( assignment != null )
{
configurationName = assignment.getTunerConfigurationName();
}
if( configurationName == null )
{
configurationName = uniqueID;
}
List<TunerConfiguration> configs = getTunerConfigurations( type );
List<TunerConfiguration> configs = getTunerConfigurations( type, uniqueID );
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;
}
}
//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
TunerConfiguration config = TunerConfigurationFactory
.getTunerConfiguration( type, configurationName );
.getTunerConfiguration( type, uniqueID, name );
config.setAssigned( true );
addTunerConfiguration( config );
assignTunerConfiguration( config, configurationName );
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 )
{
if( config.getTunerType() == type &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( uniqueID ) &&
config.getName() != null &&
config.getName().contentEquals( name ) )
{
return true;
@@ -240,59 +200,39 @@ public class TunerConfigurationModel extends AbstractTableModel
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
*/
public List<TunerConfiguration> getTunerConfigurations( TunerType type )
public List<TunerConfiguration> getTunerConfigurations( TunerType type, String uniqueID )
{
List<TunerConfiguration> configs = new ArrayList<>();
for( TunerConfiguration config: mTunerConfigurations )
{
if( config.getTunerType() == type )
if( config.getTunerType() == type &&
config.getUniqueID() != null &&
config.getUniqueID().contentEquals( uniqueID ) )
{
configs.add( config );
}
@@ -370,6 +310,8 @@ public class TunerConfigurationModel extends AbstractTableModel
return config.getTunerType().getLabel();
case CONFIGURATION_NAME:
return config.getName();
case ASSIGNED:
return config.isAssigned() ? "*" : null;
default:
break;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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