#90 [WIP] Adds support for attribute monitors to all of the decoder states. Updates color scheme in 'Now Playing' view for channel states. Wires selection listener for selected channel metadata to the Events and Messages views. Finalizes format for horizontal audio panels, font and coloration.

This commit is contained in:
Denny
2017-01-20 21:12:57 -05:00
parent ce47d2545d
commit 2d9c3c0aa4
25 changed files with 1511 additions and 1816 deletions

View File

@@ -19,10 +19,14 @@
package module.decode.event;
import alias.Alias;
import gui.SDRTrunk;
import icon.IconManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;
/**
* Custom renderer for JTable cells that contain Alias objects. Renders the
@@ -32,6 +36,7 @@ import javax.swing.table.DefaultTableCellRenderer;
public class CallEventAliasCellRenderer extends DefaultTableCellRenderer
{
private static final long serialVersionUID = 1L;
private final static Logger mLog = LoggerFactory.getLogger(CallEventAliasCellRenderer.class);
private IconManager mIconManager;
@@ -41,35 +46,26 @@ public class CallEventAliasCellRenderer extends DefaultTableCellRenderer
mIconManager = iconManager;
}
public void setValue(Object obj)
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
if(obj != null && obj instanceof Alias)
JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if(value instanceof Alias)
{
Alias alias = (Alias) obj;
Alias alias = (Alias)value;
setText(alias.getName());
ImageIcon icon = getIcon(alias, IconManager.DEFAULT_ICON_SIZE);
if(icon != null)
{
setIcon(icon);
}
label.setText(alias.getName());
label.setForeground(alias.getDisplayColor());
label.setIcon(mIconManager.getIcon(alias.getIconName(), IconManager.DEFAULT_ICON_SIZE));
}
else
{
setText(" ");
setIcon(null);
}
}
private ImageIcon getIcon(Alias alias, int height)
{
if(mIconManager != null && alias != null)
{
return mIconManager.getIcon(alias.getIconName(), height);
label.setText("");
label.setForeground(table.getForeground());
label.setIcon(null);
}
return null;
return label;
}
}

View File

@@ -1,38 +1,38 @@
/*******************************************************************************
* SDR Trunk
* Copyright (C) 2014,2015 Dennis Sheirer
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
******************************************************************************/
package module.decode.event;
import alias.Alias;
import module.decode.event.CallEvent.CallEventType;
import sample.Listener;
import javax.swing.table.AbstractTableModel;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import module.decode.event.CallEvent.CallEventType;
import sample.Listener;
public class CallEventModel extends AbstractTableModel implements Listener<CallEvent>
{
private static final long serialVersionUID = 1L;
private static DecimalFormat mFrequencyFormatter = new DecimalFormat( "0.000000" );
private static DecimalFormat mFrequencyFormatter = new DecimalFormat("0.000000");
public static final int TIME = 0;
public static final int EVENT = 1;
public static final int FROM_ID = 2;
@@ -43,168 +43,179 @@ public class CallEventModel extends AbstractTableModel implements Listener<CallE
public static final int FREQUENCY = 7;
public static final int DETAILS = 8;
protected int mMaxMessages = 500;
protected int mMaxMessages = 500;
protected List<CallEvent> mEvents = new ArrayList<CallEvent>();
protected List<CallEvent> mEvents = new ArrayList<CallEvent>();
protected String[] mHeaders = new String[] { "Time",
"Event",
"From",
"Alias",
"To",
"Alias",
"Channel",
"Frequency",
"Details" };
protected String[] mHeaders = new String[]{"Time",
"Event",
"From",
"Alias",
"To",
"Alias",
"Channel",
"Frequency",
"Details"};
private SimpleDateFormat mSDFTime = new SimpleDateFormat( "HH:mm:ss" );
public CallEventModel()
{
}
public void dispose()
{
mEvents.clear();
}
public void reset()
{
mEvents.clear();
fireTableDataChanged();
}
public int getMaxMessageCount()
{
return mMaxMessages;
}
private SimpleDateFormat mSDFTime = new SimpleDateFormat("HH:mm:ss");
public void setMaxMessageCount( int count )
{
mMaxMessages = count;
}
public CallEventModel()
{
}
/**
* Adds, updates or deletes the event from the model. Producers can send
* the same call event multiple times to indicate that information in the
* event is updated. Producers can also mark the event as invalid and the
* event will be removed from the model.
*/
public void receive( final CallEvent event )
{
if( event.isValid() )
{
if( !mEvents.contains( event ) )
{
mEvents.add( 0, event );
fireTableRowsInserted( 0, 0 );
public void dispose()
{
mEvents.clear();
}
prune();
}
else
{
int row = mEvents.indexOf( event );
fireTableRowsUpdated( row, row );
}
}
else
{
if( mEvents.contains( event ) )
{
int row = mEvents.indexOf( event );
mEvents.remove( event );
fireTableRowsDeleted( row, row );
}
}
}
private void prune()
{
while( mEvents.size() > mMaxMessages )
{
int index = mEvents.size() - 1;
mEvents.remove( index );
fireTableRowsDeleted( index, index );
}
}
public void reset()
{
mEvents.clear();
@Override
fireTableDataChanged();
}
public int getMaxMessageCount()
{
return mMaxMessages;
}
public void setMaxMessageCount(int count)
{
mMaxMessages = count;
}
/**
* Adds, updates or deletes the event from the model. Producers can send
* the same call event multiple times to indicate that information in the
* event is updated. Producers can also mark the event as invalid and the
* event will be removed from the model.
*/
public void receive(final CallEvent event)
{
if(event.isValid())
{
if(!mEvents.contains(event))
{
mEvents.add(0, event);
fireTableRowsInserted(0, 0);
prune();
}
else
{
int row = mEvents.indexOf(event);
fireTableRowsUpdated(row, row);
}
}
else
{
if(mEvents.contains(event))
{
int row = mEvents.indexOf(event);
mEvents.remove(event);
fireTableRowsDeleted(row, row);
}
}
}
private void prune()
{
while(mEvents.size() > mMaxMessages)
{
int index = mEvents.size() - 1;
mEvents.remove(index);
fireTableRowsDeleted(index, index);
}
}
@Override
public int getRowCount()
{
return mEvents.size();
return mEvents.size();
}
@Override
@Override
public int getColumnCount()
{
return mHeaders.length;
return mHeaders.length;
}
public String getColumnName( int column )
{
return mHeaders[ column ];
}
@Override
public Object getValueAt( int rowIndex, int columnIndex )
public String getColumnName(int column)
{
synchronized( mEvents )
{
switch( columnIndex )
{
case TIME:
StringBuilder sb = new StringBuilder();
sb.append( mSDFTime.format(
mEvents.get( rowIndex ).getEventStartTime() ) );
if( mEvents.get( rowIndex ).getEventEndTime() != 0 )
{
sb.append( " - " );
sb.append( mSDFTime.format(
mEvents.get( rowIndex ).getEventEndTime() ) );
}
else if( mEvents.get( rowIndex )
.getCallEventType() == CallEventType.CALL )
{
sb.append( " - In Progress" );
}
return sb.toString();
case EVENT:
return mEvents.get( rowIndex ).getCallEventType();
case FROM_ID:
return mEvents.get( rowIndex ).getFromID();
case FROM_ALIAS:
return mEvents.get( rowIndex ).getFromIDAlias();
case TO_ID:
return mEvents.get( rowIndex ).getToID();
case TO_ALIAS:
return mEvents.get( rowIndex ).getToIDAlias();
case CHANNEL:
return mEvents.get( rowIndex ).getChannel();
case FREQUENCY:
long frequency = mEvents.get( rowIndex ).getFrequency();
if( frequency != 0 )
{
return mFrequencyFormatter.format( (double)frequency / 1E6d );
}
else
{
return null;
}
case DETAILS:
return mEvents.get( rowIndex ).getDetails();
}
}
return null;
return mHeaders[column];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex)
{
synchronized(mEvents)
{
switch(columnIndex)
{
case TIME:
StringBuilder sb = new StringBuilder();
sb.append(mSDFTime.format(
mEvents.get(rowIndex).getEventStartTime()));
if(mEvents.get(rowIndex).getEventEndTime() != 0)
{
sb.append(" - ");
sb.append(mSDFTime.format(
mEvents.get(rowIndex).getEventEndTime()));
}
else if(mEvents.get(rowIndex)
.getCallEventType() == CallEventType.CALL)
{
sb.append(" - In Progress");
}
return sb.toString();
case EVENT:
return mEvents.get(rowIndex).getCallEventType();
case FROM_ID:
return mEvents.get(rowIndex).getFromID();
case FROM_ALIAS:
return mEvents.get(rowIndex).getFromIDAlias();
case TO_ID:
return mEvents.get(rowIndex).getToID();
case TO_ALIAS:
return mEvents.get(rowIndex).getToIDAlias();
case CHANNEL:
return mEvents.get(rowIndex).getChannel();
case FREQUENCY:
long frequency = mEvents.get(rowIndex).getFrequency();
if(frequency != 0)
{
return mFrequencyFormatter.format((double) frequency / 1E6d);
}
else
{
return null;
}
case DETAILS:
return mEvents.get(rowIndex).getDetails();
}
}
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex)
{
if(columnIndex == FROM_ALIAS || columnIndex == TO_ALIAS)
{
return Alias.class;
}
return super.getColumnClass(columnIndex);
}
}

View File

@@ -18,112 +18,58 @@
******************************************************************************/
package module.decode.event;
import controller.channel.Channel;
import controller.channel.ChannelEvent;
import controller.channel.ChannelEvent.Event;
import controller.channel.ChannelEventListener;
import controller.channel.ChannelProcessingManager;
import icon.IconManager;
import module.ProcessingChain;
import net.miginfocom.swing.MigLayout;
import sample.Listener;
import javax.swing.*;
import java.awt.*;
public class CallEventPanel extends JPanel implements ChannelEventListener
public class CallEventPanel extends JPanel implements Listener<ProcessingChain>
{
private static final long serialVersionUID = 1L;
private JTable mTable;
private CallEventModel mEmptyCallEventModel = new CallEventModel();
private JScrollPane mEmptyScroller;
private Channel mDisplayedChannel;
private CallEventAliasCellRenderer mRenderer;
private ChannelProcessingManager mChannelProcessingManager;
public CallEventPanel(IconManager iconManager, ChannelProcessingManager channelProcessingManager)
/**
* View for call event table
* @param iconManager to display alias icons in table rows
*/
public CallEventPanel(IconManager iconManager)
{
mChannelProcessingManager = channelProcessingManager;
setLayout(new MigLayout("insets 0 0 0 0", "[grow,fill]", "[grow,fill]"));
setLayout(new MigLayout("insets 0 0 0 0 ", "[grow,fill]", "[grow,fill]"));
JTable table = new JTable(new CallEventModel());
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
mTable = new JTable(mEmptyCallEventModel);
mTable.setAutoCreateRowSorter(true);
mTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
mRenderer = new CallEventAliasCellRenderer(iconManager);
table.getColumnModel().getColumn(CallEventModel.FROM_ALIAS).setCellRenderer(mRenderer);
table.getColumnModel().getColumn(CallEventModel.TO_ALIAS).setCellRenderer(mRenderer);
mEmptyScroller = new JScrollPane(table);
mEmptyScroller = new JScrollPane(mTable);
add(mEmptyScroller);
}
@Override
public void channelChanged(final ChannelEvent event)
public void receive(ProcessingChain processingChain)
{
if(event.getEvent() == Event.NOTIFICATION_SELECTION_CHANGE && event.getChannel().isSelected())
EventQueue.invokeLater(new Runnable()
{
if(mDisplayedChannel == null || (mDisplayedChannel != null && mDisplayedChannel != event.getChannel()))
@Override
public void run()
{
ProcessingChain chain = mChannelProcessingManager.getProcessingChain(event.getChannel());
mTable.setModel(processingChain != null ? processingChain.getCallEventModel() : mEmptyCallEventModel);
if(chain != null)
if(processingChain != null)
{
final CallEventModel model = chain.getCallEventModel();
if(model != null)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
removeAll();
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
table.getColumnModel().getColumn(CallEventModel.FROM_ALIAS)
.setCellRenderer(mRenderer);
table.getColumnModel().getColumn(CallEventModel.TO_ALIAS)
.setCellRenderer(mRenderer);
add(new JScrollPane(table));
mDisplayedChannel = event.getChannel();
revalidate();
repaint();
}
});
}
mTable.getColumnModel().getColumn(CallEventModel.FROM_ALIAS).setCellRenderer(mRenderer);
mTable.getColumnModel().getColumn(CallEventModel.TO_ALIAS).setCellRenderer(mRenderer);
}
}
}
else if(event.getEvent() == Event.NOTIFICATION_PROCESSING_STOP || event.getEvent() == Event.REQUEST_DISABLE)
{
if(mDisplayedChannel != null && mDisplayedChannel == event.getChannel())
{
mDisplayedChannel = null;
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
removeAll();
add(mEmptyScroller);
revalidate();
repaint();
}
});
}
}
});
}
}

View File

@@ -32,6 +32,7 @@ import module.ProcessingChain;
import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sample.Listener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
@@ -42,7 +43,7 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MessageActivityPanel extends JPanel implements ChannelEventListener
public class MessageActivityPanel extends JPanel implements Listener<ProcessingChain>
{
private static final long serialVersionUID = 1L;
@@ -50,10 +51,7 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
private static MessageActivityModel EMPTY_MODEL = new MessageActivityModel();
private JTable mMessageTable;
private Channel mDisplayedChannel;
private MessageActivityModel mDisplayedModel = EMPTY_MODEL;
private JTable mTable = new JTable(EMPTY_MODEL);
private MessageManagementPanel mManagementPanel = new MessageManagementPanel();
@@ -67,37 +65,20 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
add(mManagementPanel, "span,growx");
mMessageTable = new JTable(mDisplayedModel);
add(new JScrollPane(mMessageTable), "span,grow");
add(new JScrollPane(mTable), "span,grow");
}
@Override
public void channelChanged(ChannelEvent event)
public void receive(ProcessingChain processingChain)
{
boolean changed = false;
if(event.getEvent() == Event.NOTIFICATION_SELECTION_CHANGE &&
event.getChannel().isSelected())
EventQueue.invokeLater(new Runnable()
{
if(mDisplayedChannel == null || (mDisplayedChannel != null && mDisplayedChannel != event.getChannel()))
@Override
public void run()
{
mDisplayedChannel = event.getChannel();
mTable.setModel(processingChain != null ? processingChain.getMessageActivityModel() : EMPTY_MODEL);
ProcessingChain chain = mChannelProcessingManager.getProcessingChain(mDisplayedChannel);
if(chain != null)
{
mDisplayedModel = chain.getMessageActivityModel();
}
else
{
mDisplayedModel = EMPTY_MODEL;
}
mMessageTable.setModel(mDisplayedModel);
if(mDisplayedChannel != null)
if(processingChain != null)
{
mManagementPanel.enableButtons();
}
@@ -105,31 +86,68 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
{
mManagementPanel.disableButtons();
}
changed = true;
}
}
else if(event.getEvent() == Event.NOTIFICATION_PROCESSING_STOP || event.getEvent() == Event.REQUEST_DISABLE)
{
if(mDisplayedChannel != null && mDisplayedChannel == event.getChannel())
{
mDisplayedChannel = null;
mMessageTable.setModel(EMPTY_MODEL);
mManagementPanel.disableButtons();
changed = true;
}
}
if(changed)
{
revalidate();
repaint();
}
});
}
// @Override
// public void channelChanged(ChannelEvent event)
// {
// boolean changed = false;
//
// if(event.getEvent() == Event.NOTIFICATION_SELECTION_CHANGE &&
// event.getChannel().isSelected())
// {
// if(mDisplayedChannel == null || (mDisplayedChannel != null && mDisplayedChannel != event.getChannel()))
// {
// mDisplayedChannel = event.getChannel();
//
// ProcessingChain chain = mChannelProcessingManager.getProcessingChain(mDisplayedChannel);
//
// if(chain != null)
// {
// mDisplayedModel = chain.getMessageActivityModel();
// }
// else
// {
// mDisplayedModel = EMPTY_MODEL;
// }
//
// mMessageTable.setModel(mDisplayedModel);
//
// if(mDisplayedChannel != null)
// {
// mManagementPanel.enableButtons();
// }
// else
// {
// mManagementPanel.disableButtons();
// }
//
// changed = true;
// }
// }
// else if(event.getEvent() == Event.NOTIFICATION_PROCESSING_STOP || event.getEvent() == Event.REQUEST_DISABLE)
// {
// if(mDisplayedChannel != null && mDisplayedChannel == event.getChannel())
// {
// mDisplayedChannel = null;
//
// mMessageTable.setModel(EMPTY_MODEL);
//
// mManagementPanel.disableButtons();
//
// changed = true;
// }
// }
//
// if(changed)
// {
// revalidate();
// repaint();
// }
// }
public class MessageManagementPanel extends JPanel
{
private static final long serialVersionUID = 1L;
@@ -184,8 +202,7 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
@Override
public void mouseClicked(MouseEvent arg0)
{
if(SwingUtilities.isLeftMouseButton(arg0) &&
arg0.getClickCount() == 2)
if(SwingUtilities.isLeftMouseButton(arg0) && arg0.getClickCount() == 2)
{
slider.setValue(500); //default
}
@@ -208,24 +225,13 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
}
});
if(mDisplayedModel != null)
{
slider.setValue(mDisplayedModel.getMaxMessageCount());
}
else
{
slider.setValue(500);
}
slider.setValue(((MessageActivityModel)mTable.getModel()).getMaxMessageCount());
slider.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent arg0)
{
if(mDisplayedModel != null)
{
mDisplayedModel.setMaxMessageCount(slider.getValue());
}
((MessageActivityModel)mTable.getModel()).setMaxMessageCount(slider.getValue());
}
});
@@ -239,10 +245,7 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
@Override
public void actionPerformed(ActionEvent e)
{
if(mDisplayedModel != null)
{
mDisplayedModel.clear();
}
((MessageActivityModel)mTable.getModel()).clear();
}
});
}
@@ -261,61 +264,46 @@ public class MessageActivityPanel extends JPanel implements ChannelEventListener
@Override
public void actionPerformed(ActionEvent arg0)
{
if(mDisplayedChannel == null)
final JFrame editor = new JFrame();
editor.setTitle("Message Filter Editor");
editor.setSize(600, 400);
editor.setLocationRelativeTo(MessageFilterButton.this);
editor.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
editor.setLayout(new MigLayout("", "[grow,fill]",
"[grow,fill][][]"));
@SuppressWarnings("unchecked")
FilterSet<Message> filter = (FilterSet<Message>) ((MessageActivityModel)mTable.getModel()).getMessageFilter();
FilterEditorPanel<Message> panel = new FilterEditorPanel<Message>(filter);
JScrollPane scroller = new JScrollPane(panel);
scroller.setViewportView(panel);
editor.add(scroller, "wrap");
editor.add(new JLabel("Right-click to select/deselect all nodes"), "wrap");
JButton close = new JButton("Close");
close.addActionListener(new ActionListener()
{
JOptionPane.showMessageDialog(MessageFilterButton.this,
"Please enable and select a decoding channel to "
+ "adjust the channel's message display filter");
}
else
{
if(mDisplayedModel != null)
@Override
public void actionPerformed(ActionEvent e)
{
final JFrame editor = new JFrame();
editor.setTitle("Message Filter Editor");
editor.setSize(600, 400);
editor.setLocationRelativeTo(MessageFilterButton.this);
editor.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
editor.setLayout(new MigLayout("", "[grow,fill]",
"[grow,fill][][]"));
@SuppressWarnings("unchecked")
FilterSet<Message> filter = (FilterSet<Message>)
mDisplayedModel.getMessageFilter();
FilterEditorPanel<Message> panel =
new FilterEditorPanel<Message>(filter);
JScrollPane scroller = new JScrollPane(panel);
scroller.setViewportView(panel);
editor.add(scroller, "wrap");
editor.add(new JLabel("Right-click to select/deselect "
+ "all nodes"), "wrap");
JButton close = new JButton("Close");
close.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
editor.dispose();
}
});
editor.add(close);
EventQueue.invokeLater(new Runnable()
{
public void run()
{
editor.setVisible(true);
}
});
editor.dispose();
}
}
});
editor.add(close);
EventQueue.invokeLater(new Runnable()
{
public void run()
{
editor.setVisible(true);
}
});
}
});
}

View File

@@ -20,6 +20,8 @@ package module.decode.fleetsync2;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -39,20 +41,20 @@ public class Fleetsync2DecoderState extends DecoderState
private TreeSet<String> mIdents = new TreeSet<String>();
private TreeSet<String> mEmergencyIdents = new TreeSet<String>();
private String mFrom;
private Alias mFromAlias;
private String mTo;
private Alias mToAlias;
private AliasedStringAttributeMonitor mFromAttribute;
private AliasedStringAttributeMonitor mToAttribute;
private String mMessage;
private String mMessageType;
private long mFrequency;
public Fleetsync2DecoderState(AliasList aliasList)
{
super(aliasList);
mFromAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.FLEETSYNC);
mToAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.FLEETSYNC);
}
@Override
@@ -99,10 +101,8 @@ public class Fleetsync2DecoderState extends DecoderState
*/
public void resetState()
{
mFrom = null;
mFromAlias = null;
mTo = null;
mToAlias = null;
mFromAttribute.reset();
mToAttribute.reset();
mMessage = null;
mMessageType = null;
}
@@ -118,14 +118,14 @@ public class Fleetsync2DecoderState extends DecoderState
{
State state = State.CALL;
setFromID(fleetsync.getFromID());
mFromAttribute.process(fleetsync.getFromID());
mIdents.add(fleetsync.getFromID());
FleetsyncMessageType type = fleetsync.getMessageType();
if(type != FleetsyncMessageType.ANI)
{
setToID(fleetsync.getToID());
mToAttribute.process(fleetsync.getToID());
mIdents.add(fleetsync.getToID());
}
@@ -175,46 +175,6 @@ public class Fleetsync2DecoderState extends DecoderState
}
}
public String getFromID()
{
return mFrom;
}
public Alias getFromIDAlias()
{
return mFromAlias;
}
public void setFromID(String from)
{
if(!StringUtils.isEqual(mFrom, from))
{
mFrom = from;
mFromAlias = hasAliasList() ? getAliasList().getFleetsyncAlias(mFrom) : null;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_FROM, mFrom, mFromAlias));
}
}
public String getToID()
{
return mTo;
}
public Alias getToIDAlias()
{
return mToAlias;
}
public void setToID(String to)
{
if(!StringUtils.isEqual(mTo, to))
{
mTo = to;
mToAlias = hasAliasList() ? getAliasList().getFleetsyncAlias(mTo) : null;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, mTo, mToAlias));
}
}
public String getMessage()
{
return mMessage;

View File

@@ -20,6 +20,8 @@ package module.decode.lj1200;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -45,12 +47,14 @@ public class LJ1200DecoderState extends DecoderState
private Set<String> mAddresses = new TreeSet<String>();
private String mAddress;
private Alias mAddressAlias;
private AliasedStringAttributeMonitor mAddressAttribute;
public LJ1200DecoderState(AliasList aliasList)
{
super(aliasList);
mAddressAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.LOJACK);
}
@Override
@@ -69,16 +73,6 @@ public class LJ1200DecoderState extends DecoderState
{
}
public String getAddress()
{
return mAddress;
}
public Alias getAddressAlias()
{
return mAddressAlias;
}
@Override
public void receive(Message message)
{
@@ -88,10 +82,10 @@ public class LJ1200DecoderState extends DecoderState
if(lj.isValid())
{
setAddress(lj.getAddress());
setAddressAlias(lj.getTransponderAlias());
String address = lj.getAddress();
mAddresses.add(mAddress);
mAddressAttribute.process(address);
mAddresses.add(address);
broadcast(LJ1200CallEvent.getLJ1200Event(lj));
@@ -104,21 +98,6 @@ public class LJ1200DecoderState extends DecoderState
}
}
private void setAddress(String address)
{
if(!StringUtils.isEqual(mAddress, address))
{
mAddress = address;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, mAddress, mAddressAlias));
}
}
private void setAddressAlias(Alias alias)
{
mAddressAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, mAddress, mAddressAlias));
}
@Override
public String getActivitySummary()
{
@@ -163,8 +142,7 @@ public class LJ1200DecoderState extends DecoderState
private void resetState()
{
mAddress = null;
mAddressAlias = null;
mAddressAttribute.reset();
}
@Override

View File

@@ -19,6 +19,9 @@ package module.decode.ltrnet;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedIntegerAttributeMonitor;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -57,10 +60,9 @@ public class LTRNetDecoderState extends DecoderState
new HashMap<Integer,Long>();
private HashMap<Integer,String> mActiveCalls = new HashMap<Integer,String>();
private String mToTalkgroup;
private Alias mToTalkgroupAlias;
private String mFromTalkgroup;
private Alias mFromTalkgroupAlias;
private AliasedStringAttributeMonitor mToAttribute;
private AliasedIntegerAttributeMonitor mFromUIDAttribute;
private AliasedStringAttributeMonitor mESNAttribute;
private String mMessage;
private String mMessageType;
private int mChannelNumber;
@@ -69,6 +71,16 @@ public class LTRNetDecoderState extends DecoderState
public LTRNetDecoderState(AliasList aliasList)
{
super(aliasList);
mToAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.TALKGROUP);
mToAttribute.addIllegalValue("0-00-000");
mFromUIDAttribute = new AliasedIntegerAttributeMonitor(Attribute.PRIMARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.LTR_NET_UID);
mESNAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.ESN);
}
@Override
@@ -204,8 +216,7 @@ public class LTRNetDecoderState extends DecoderState
broadcast(mCurrentCallEvent);
}
setFromTalkgroup(String.valueOf(uniqueID));
setFromTalkgroupAlias(ltr.getRadioUniqueIDAlias());
mFromUIDAttribute.process(uniqueID);
break;
case ID_SITE:
String siteID = ltr.getSiteID();
@@ -243,8 +254,7 @@ public class LTRNetDecoderState extends DecoderState
}
setMessageType("ESN");
setFromTalkgroup(ltr.getESN());
setFromTalkgroupAlias(ltr.getESNAlias());
mESNAttribute.process(ltr.getESN());
broadcast(new DecoderStateEvent(this, Event.DECODE, State.DATA));
@@ -272,8 +282,7 @@ public class LTRNetDecoderState extends DecoderState
mUniqueIDs.add(uniqueid);
setMessageType("REGISTER UID");
setToTalkgroup(String.valueOf(uniqueid));
setToTalkgroupAlias(ltr.getRadioUniqueIDAlias());
mFromUIDAttribute.process(uniqueid);
if(getCurrentLTRCallEvent() == null)
{
@@ -609,10 +618,11 @@ public class LTRNetDecoderState extends DecoderState
if(isValidTalkgroup(talkgroup))
{
mToAttribute.process(talkgroup);
final LTRCallEvent current = getCurrentLTRCallEvent();
/* If this is a new call or the talkgroup is different from the current
* call, create a new call event */
//If this is a new call or the talkgroup is different from the current call, create a new call event
if(current == null || isDifferentTalkgroup(talkgroup))
{
/* Invalidate the current call */
@@ -622,22 +632,18 @@ public class LTRNetDecoderState extends DecoderState
broadcast(current);
}
setToTalkgroup(message.getTalkgroupID());
/* A talkgroup must be seen at least once before it will be added
* to the mTalkgroups list that is used in the activity summary,
* so that we don't pollute the summary with one-off error talkgroups */
if(mTalkgroupsFirstHeard.contains(mToTalkgroup))
if(mTalkgroupsFirstHeard.contains(talkgroup))
{
mTalkgroups.add(mToTalkgroup);
mTalkgroups.add(talkgroup);
}
else
{
mTalkgroupsFirstHeard.add(mToTalkgroup);
mTalkgroupsFirstHeard.add(talkgroup);
}
setToTalkgroupAlias(message.getTalkgroupIDAlias());
CallEvent callEvent = new LTRCallEvent.Builder(DecoderType.LTR_NET, CallEventType.CALL)
.aliasList(getAliasList())
.channel(String.valueOf(message.getChannel()))
@@ -704,71 +710,13 @@ public class LTRNetDecoderState extends DecoderState
mCurrentCallEvent = null;
mToTalkgroup = null;
mToTalkgroupAlias = null;
mToAttribute.reset();
mESNAttribute.reset();
mFromUIDAttribute.reset();
mMessage = null;
mMessageType = null;
}
public String getToTalkgroup()
{
return mToTalkgroup;
}
public void setToTalkgroup(String toTalkgroup)
{
if(!StringUtils.isEqual(mToTalkgroup, toTalkgroup))
{
mToTalkgroup = toTalkgroup;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, mToTalkgroup, mToTalkgroupAlias));
}
}
public Alias getToTalkgroupAlias()
{
return mToTalkgroupAlias;
}
public void setToTalkgroupAlias(Alias alias)
{
if(mToTalkgroupAlias == null || (alias != null && mToTalkgroupAlias != alias))
{
mToTalkgroupAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, mToTalkgroup, mToTalkgroupAlias));
}
}
public String getFromTalkgroup()
{
return mFromTalkgroup;
}
public void setFromTalkgroup(String fromTalkgroup)
{
if(!StringUtils.isEqual(mFromTalkgroup, fromTalkgroup))
{
mFromTalkgroup = fromTalkgroup;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_FROM, mFromTalkgroup,
mFromTalkgroupAlias));
}
}
public Alias getFromTalkgroupAlias()
{
return mFromTalkgroupAlias;
}
public void setFromTalkgroupAlias(Alias alias)
{
if(mFromTalkgroupAlias == null || (alias != null && alias != mFromTalkgroupAlias))
{
mFromTalkgroupAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_FROM, mFromTalkgroup,
mFromTalkgroupAlias));
}
}
public String getMessage()
{
return mMessage;

View File

@@ -20,6 +20,8 @@ package module.decode.ltrstandard;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -56,14 +58,16 @@ public class LTRStandardDecoderState extends DecoderState
private Set<String> mTalkgroupsFirstHeard = new HashSet<>();
private Set<String> mTalkgroups = new TreeSet<>();
private String mTalkgroup;
private Alias mTalkgroupAlias;
private AliasedStringAttributeMonitor mTalkgroupAttribute;
private long mFrequency;
private LCNTracker mLCNTracker = new LCNTracker();
public LTRStandardDecoderState(AliasList aliasList)
{
super(aliasList);
mTalkgroupAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.TALKGROUP);
}
@Override
@@ -134,11 +138,9 @@ public class LTRStandardDecoderState extends DecoderState
if(mLCNTracker.isCurrentChannel(channel))
{
setTalkgroup(start.getToID());
processTalkgroup(mTalkgroup);
setTalkgroupAlias(start.getToIDAlias());
String talkgroup = start.getToID();
mTalkgroupAttribute.process(talkgroup);
processTalkgroup(talkgroup);
}
}
@@ -156,11 +158,9 @@ public class LTRStandardDecoderState extends DecoderState
if(mLCNTracker.isCurrentChannel(repeater))
{
setTalkgroup(end.getToID());
processTalkgroup(mTalkgroup);
setTalkgroupAlias(end.getToIDAlias());
String talkgroup = end.getToID();
mTalkgroupAttribute.process(talkgroup);
processTalkgroup(talkgroup);
LTRCallEvent event = mActiveCalls.remove(repeater);
@@ -231,36 +231,7 @@ public class LTRStandardDecoderState extends DecoderState
mActiveCalls.clear();
mTalkgroup = null;
mTalkgroupAlias = null;
}
public String getTalkgroup()
{
return mTalkgroup;
}
private void setTalkgroup(String talkgroup)
{
if(!StringUtils.isEqual(mTalkgroup, talkgroup))
{
mTalkgroup = talkgroup;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, mTalkgroup, mTalkgroupAlias));
}
}
public Alias getTalkgroupAlias()
{
return mTalkgroupAlias;
}
private void setTalkgroupAlias(Alias alias)
{
if(mTalkgroupAlias == null || (alias != null && mTalkgroupAlias != alias))
{
mTalkgroupAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, mTalkgroup, mTalkgroupAlias));
}
mTalkgroupAttribute.reset();
}
public boolean hasChannelNumber()

View File

@@ -20,6 +20,8 @@ package module.decode.mdc1200;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -39,16 +41,16 @@ public class MDCDecoderState extends DecoderState
private TreeSet<String> mIdents = new TreeSet<String>();
private TreeSet<String> mEmergencyIdents = new TreeSet<String>();
private String mFrom;
private Alias mFromAlias;
private String mTo;
private Alias mToAlias;
private AliasedStringAttributeMonitor mFromAttribute;
private String mMessage;
private String mMessageType;
public MDCDecoderState(AliasList aliasList)
{
super(aliasList);
mFromAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.MDC1200);
}
@Override
@@ -78,10 +80,7 @@ public class MDCDecoderState extends DecoderState
private void resetState()
{
mFrom = null;
mFromAlias = null;
mTo = null;
mToAlias = null;
mFromAttribute.reset();
mMessage = null;
mMessageType = null;
}
@@ -100,8 +99,7 @@ public class MDCDecoderState extends DecoderState
mEmergencyIdents.add(mdc.getUnitID());
}
setFrom(mdc.getFromID());
setFromAlias(mdc.getFromIDAlias());
mFromAttribute.process(mdc.getFromID());
MDCMessageType type = mdc.getMessageType();
@@ -145,62 +143,6 @@ public class MDCDecoderState extends DecoderState
}
}
public String getFrom()
{
return mFrom;
}
public void setFrom(String from)
{
if(!StringUtils.isEqual(mFrom, from))
{
mFrom = from;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_FROM, mFrom, mFromAlias));
}
}
public Alias getFromAlias()
{
return mFromAlias;
}
public void setFromAlias(Alias alias)
{
if(mFromAlias == null || (alias != null && mFromAlias != alias))
{
mFromAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_FROM, mFrom, mFromAlias));
}
}
public String getTo()
{
return mTo;
}
public void setTo(String to)
{
if(!StringUtils.isEqual(mTo, to))
{
mTo = to;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, mTo, mToAlias));
}
}
public Alias getToAlias()
{
return mToAlias;
}
public void setToAlias(Alias alias)
{
if(mToAlias == null || (alias != null && mToAlias != alias))
{
mToAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, mTo, mToAlias));
}
}
public String getMessage()
{
return mMessage;

View File

@@ -20,6 +20,8 @@ package module.decode.mpt1327;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.ChangeChannelTimeoutEvent;
@@ -56,8 +58,8 @@ public class MPT1327DecoderState extends DecoderState
private HashMap<String,ArrayList<String>> mGroups = new HashMap<String,ArrayList<String>>();
private String mSite;
private String mFromTalkgroup;
private String mToTalkgroup;
private AliasedStringAttributeMonitor mFromAttribute;
private AliasedStringAttributeMonitor mToAttribute;
private int mChannelNumber;
private ChannelType mChannelType;
@@ -73,6 +75,10 @@ public class MPT1327DecoderState extends DecoderState
mChannelMap = channelMap;
mChannelType = channelType;
mCallTimeout = callTimeout;
mFromAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.MPT1327);
mToAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.MPT1327);
}
@Override
@@ -277,7 +283,7 @@ public class MPT1327DecoderState extends DecoderState
broadcast(mCurrentCallEvent);
}
setToTalkgroup(mpt.getToID());
mToAttribute.process(mpt.getToID());
broadcast(new DecoderStateEvent(this, Event.START, State.CALL));
}
@@ -298,8 +304,8 @@ public class MPT1327DecoderState extends DecoderState
private void resetState()
{
mFromTalkgroup = null;
mToTalkgroup = null;
mFromAttribute.reset();
mToAttribute.reset();
/**
* If this is a standard channel, reset the fade timeout to the default
@@ -359,67 +365,6 @@ public class MPT1327DecoderState extends DecoderState
mChannelMap = channelMap;
}
public String getFromTalkgroup()
{
return mFromTalkgroup;
}
/**
* Set the talkgroup. This is used primarily for traffic channels since
* the talkgroup will already have been identified prior to the traffic
* channel being created.
*/
public void setFromTalkgroup(String fromTalkgroup)
{
if(!StringUtils.isEqual(mFromTalkgroup, fromTalkgroup))
{
mFromTalkgroup = fromTalkgroup;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_FROM, mFromTalkgroup,
getFromTalkgroupAlias()));
}
}
public Alias getFromTalkgroupAlias()
{
if(hasAliasList())
{
return getAliasList().getMPT1327Alias(mFromTalkgroup);
}
return null;
}
public String getToTalkgroup()
{
return mToTalkgroup;
}
/**
* Set the talkgroup. This is used primarily for traffic channels since
* the talkgroup will already have been identified prior to the traffic
* channel being created.
*/
public void setToTalkgroup(String toTalkgroup)
{
if(!StringUtils.isEqual(mToTalkgroup, toTalkgroup))
{
mToTalkgroup = toTalkgroup;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, mToTalkgroup,
getToTalkgroupAlias()));
}
}
public Alias getToTalkgroupAlias()
{
if(hasAliasList())
{
return getAliasList().getMPT1327Alias(mToTalkgroup);
}
return null;
}
public int getChannelNumber()
{
return mChannelNumber;
@@ -588,6 +533,8 @@ public class MPT1327DecoderState extends DecoderState
TrafficChannelAllocationEvent allocationEvent =
(TrafficChannelAllocationEvent) event;
broadcast(new AttributeChangeRequest<String>(Attribute.CHANNEL_CONFIGURATION_LABEL_1, "TRAFFIC"));
String channel = allocationEvent.getCallEvent().getChannel();
if(channel != null)
@@ -606,8 +553,8 @@ public class MPT1327DecoderState extends DecoderState
broadcast(new AttributeChangeRequest<Long>(Attribute.CHANNEL_FREQUENCY,
allocationEvent.getCallEvent().getFrequency()));
setFromTalkgroup(allocationEvent.getCallEvent().getFromID());
setToTalkgroup(allocationEvent.getCallEvent().getToID());
mFromAttribute.process(allocationEvent.getCallEvent().getFromID());
mToAttribute.process(allocationEvent.getCallEvent().getToID());
}
}
break;

View File

@@ -3669,8 +3669,9 @@ public class P25DecoderState extends DecoderState
{
if(event instanceof TrafficChannelAllocationEvent)
{
TrafficChannelAllocationEvent allocationEvent =
(TrafficChannelAllocationEvent) event;
TrafficChannelAllocationEvent allocationEvent = (TrafficChannelAllocationEvent) event;
broadcast(new AttributeChangeRequest<String>(Attribute.CHANNEL_CONFIGURATION_LABEL_1, "TRAFFIC"));
mCurrentCallEvent = (P25CallEvent) allocationEvent.getCallEvent();

View File

@@ -20,6 +20,8 @@ package module.decode.passport;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -32,7 +34,6 @@ import module.decode.event.CallEvent;
import module.decode.event.CallEvent.CallEventType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import util.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -53,10 +54,8 @@ public class PassportDecoderState extends DecoderState
private HashMap<Integer,String> mSiteLCNs = new HashMap<Integer,String>();
private HashMap<Integer,String> mNeighborLCNs = new HashMap<Integer,String>();
private String mTalkgroup;
private Alias mTalkgroupAlias;
private String mMobileID;
private Alias mMobileIDAlias;
private AliasedStringAttributeMonitor mFromMobileIDAttribute;
private AliasedStringAttributeMonitor mToTalkgroupAttribute;
private int mChannelNumber;
private int mSiteNumber;
private PassportBand mSiteBand;
@@ -66,6 +65,11 @@ public class PassportDecoderState extends DecoderState
public PassportDecoderState(AliasList aliasList)
{
super(aliasList);
mFromMobileIDAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.MIN);
mToTalkgroupAttribute = new AliasedStringAttributeMonitor(Attribute.PRIMARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.TALKGROUP);
}
@Override
@@ -146,7 +150,7 @@ public class PassportDecoderState extends DecoderState
/* Call on this channel */
if(passport.getLCN() == mChannelNumber)
{
setTalkgroup(talkgroup);
mToTalkgroupAttribute.process(talkgroup);
PassportCallEvent current = getCurrentCallEvent();
@@ -207,7 +211,7 @@ public class PassportDecoderState extends DecoderState
String.valueOf(passport.getTalkgroupID());
logTalkgroup(endTalkgroup);
setTalkgroup(endTalkgroup);
mToTalkgroupAttribute.process(endTalkgroup);
broadcast(new DecoderStateEvent(this,
Event.END, State.CALL));
@@ -234,11 +238,11 @@ public class PassportDecoderState extends DecoderState
{
setChannelNumber(passport.getLCN());
}
/* Data call on this channel */
if(passport.getLCN() == mChannelNumber)
{
setTalkgroup(dataTalkgroup);
mToTalkgroupAttribute.process(dataTalkgroup);
PassportCallEvent current = getCurrentCallEvent();
@@ -299,7 +303,7 @@ public class PassportDecoderState extends DecoderState
String.valueOf(passport.getTalkgroupID());
logTalkgroup(dataEndTalkgroup);
setTalkgroup(dataEndTalkgroup);
mToTalkgroupAttribute.process(dataEndTalkgroup);
broadcast(new DecoderStateEvent(this,
Event.END, State.DATA));
@@ -321,7 +325,7 @@ public class PassportDecoderState extends DecoderState
mMobileIDs.add(min);
}
setMobileID(min);
mFromMobileIDAttribute.process(min);
final CallEvent current = getCurrentCallEvent();
@@ -519,10 +523,8 @@ public class PassportDecoderState extends DecoderState
private void resetState()
{
mTalkgroup = null;
mTalkgroupAlias = null;
mMobileID = null;
mMobileIDAlias = null;
mToTalkgroupAttribute.reset();
mFromMobileIDAttribute.reset();
}
public int getChannelNumber()
@@ -568,48 +570,6 @@ public class PassportDecoderState extends DecoderState
}
}
public String getTalkgroup()
{
return mTalkgroup;
}
public void setTalkgroup(String talkgroup)
{
if(!StringUtils.isEqual(mTalkgroup, talkgroup))
{
mTalkgroup = talkgroup;
mTalkgroupAlias = hasAliasList() ? getAliasList().getTalkgroupAlias(getTalkgroup()) : null;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_TO, getTalkgroup(),
getTalkgroupAlias()));
}
}
public Alias getTalkgroupAlias()
{
return mTalkgroupAlias;
}
public String getMobileID()
{
return mMobileID;
}
public void setMobileID(String id)
{
if(!StringUtils.isEqual(mMobileID, id))
{
mMobileID = id;
mMobileIDAlias = hasAliasList() ? getAliasList().getMobileIDNumberAlias(getMobileID()) : null;
broadcast(new AttributeChangeRequest<String>(Attribute.PRIMARY_ADDRESS_FROM, getMobileID(),
getMobileIDAlias()));
}
}
public Alias getMobileIDAlias()
{
return mMobileIDAlias;
}
@Override
public void receiveDecoderStateEvent(DecoderStateEvent event)
{

View File

@@ -20,6 +20,8 @@ package module.decode.tait;
import alias.Alias;
import alias.AliasList;
import alias.id.AliasIDType;
import channel.metadata.AliasedStringAttributeMonitor;
import channel.metadata.Attribute;
import channel.metadata.AttributeChangeRequest;
import channel.state.DecoderState;
@@ -42,18 +44,19 @@ public class Tait1200DecoderState extends DecoderState
{
private TreeSet<String> mIdents = new TreeSet<String>();
private String mFrom;
private Alias mFromAlias;
private String mTo;
private Alias mToAlias;
private AliasedStringAttributeMonitor mFromAttribute;
private AliasedStringAttributeMonitor mToAttribute;
private String mMessage;
private String mMessageType;
public Tait1200DecoderState(AliasList aliasList)
{
super(aliasList);
mFromAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_FROM,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.TALKGROUP);
mToAttribute = new AliasedStringAttributeMonitor(Attribute.SECONDARY_ADDRESS_TO,
getAttributeChangeRequestListener(), getAliasList(), AliasIDType.TALKGROUP);
}
@Override
@@ -82,10 +85,8 @@ public class Tait1200DecoderState extends DecoderState
private void resetState()
{
mFrom = null;
mFromAlias = null;
mTo = null;
mToAlias = null;
mFromAttribute.reset();
mToAttribute.reset();
mMessage = null;
mMessageType = null;
}
@@ -97,12 +98,10 @@ public class Tait1200DecoderState extends DecoderState
{
Tait1200GPSMessage gps = (Tait1200GPSMessage) message;
setFromID(gps.getFromID());
setFromIDAlias(gps.getFromIDAlias());
mFromAttribute.process(gps.getFromID());
mIdents.add(gps.getFromID());
setToID(gps.getToID());
setToIDAlias(gps.getToIDAlias());
mToAttribute.process(gps.getToID());
mIdents.add(gps.getToID());
GeoPosition position = gps.getGPSLocation();
@@ -123,13 +122,10 @@ public class Tait1200DecoderState extends DecoderState
else if(message instanceof Tait1200ANIMessage)
{
Tait1200ANIMessage ani = (Tait1200ANIMessage) message;
setFromID(ani.getFromID());
setFromIDAlias(ani.getFromIDAlias());
mFromAttribute.process(ani.getFromID());
mIdents.add(ani.getFromID());
setToID(ani.getToID());
setToIDAlias(ani.getToIDAlias());
mToAttribute.process(ani.getToID());
mIdents.add(ani.getToID());
setMessage(null);
@@ -202,62 +198,6 @@ public class Tait1200DecoderState extends DecoderState
}
}
public String getFromID()
{
return mFrom;
}
public void setFromID(String from)
{
if(!StringUtils.isEqual(mFrom, from))
{
mFrom = from;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_FROM, getFromID(), getFromIDAlias()));
}
}
public Alias getFromIDAlias()
{
return mFromAlias;
}
public void setFromIDAlias(Alias alias)
{
if(mFromAlias == null || (alias != null && mFromAlias != alias))
{
mFromAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_FROM, getFromID(), getFromIDAlias()));
}
}
public String getToID()
{
return mTo;
}
public void setToID(String to)
{
if(!StringUtils.isEqual(mTo, to))
{
mTo = to;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, getToID(), getToIDAlias()));
}
}
public Alias getToIDAlias()
{
return mToAlias;
}
public void setToIDAlias(Alias alias)
{
if(mToAlias == null || (alias != null && mToAlias != alias))
{
mToAlias = alias;
broadcast(new AttributeChangeRequest<String>(Attribute.SECONDARY_ADDRESS_TO, getToID(), getToIDAlias()));
}
}
public String getMessage()
{
return mMessage;