Merge pull request #196 from DSheirer/164-patched-group-streaming-duplicates

Resolves #173 - duplicate streaming calls for patch groups.
This commit is contained in:
Denny Sheirer
2017-02-12 15:59:46 +00:00
committed by GitHub
4 changed files with 60 additions and 66 deletions

View File

@@ -185,27 +185,6 @@ public class Alias
*/ */
public void validate() public void validate()
{ {
//Check for duplicate broadcast channels
List<BroadcastChannel> broadcastChannels = getBroadcastChannels();
if(broadcastChannels.size() > 0)
{
Set<String> channelNames = new TreeSet<>();
for(BroadcastChannel broadcastChannel: broadcastChannels)
{
String channelName = broadcastChannel.getChannelName();
if(channelName == null || channelName.isEmpty() || channelNames.contains(channelName))
{
removeAliasID(broadcastChannel);
}
else
{
channelNames.add(channelName);
}
}
}
} }
/** /**
* Returns the priority level of this alias, if defined, or the default priority * Returns the priority level of this alias, if defined, or the default priority
@@ -336,9 +315,9 @@ public class Alias
* List of broadcast channels specified for this alias. * List of broadcast channels specified for this alias.
*/ */
@XmlTransient @XmlTransient
public List<BroadcastChannel> getBroadcastChannels() public Set<BroadcastChannel> getBroadcastChannels()
{ {
List<BroadcastChannel> broadcastChannels = new ArrayList<>(); Set<BroadcastChannel> broadcastChannels = new TreeSet<>();
for(AliasID id: getId()) for(AliasID id: getId())
{ {

View File

@@ -24,12 +24,20 @@ import alias.id.AliasIDType;
import alias.id.broadcast.BroadcastChannel; import alias.id.broadcast.BroadcastChannel;
import alias.id.priority.Priority; import alias.id.priority.Priority;
import alias.id.talkgroup.TalkgroupID; import alias.id.talkgroup.TalkgroupID;
import gui.SDRTrunk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import playlist.version1.System;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class PatchGroupAlias extends Alias public class PatchGroupAlias extends Alias
{ {
private final static Logger mLog = LoggerFactory.getLogger(PatchGroupAlias.class);
private Alias mPatchGroupAlias; private Alias mPatchGroupAlias;
private List<Alias> mPatchedAliases = new ArrayList<>(); private List<Alias> mPatchedAliases = new ArrayList<>();
private List<String> mPatchedTalkgroupIDs = new ArrayList<>(); private List<String> mPatchedTalkgroupIDs = new ArrayList<>();
@@ -295,9 +303,9 @@ public class PatchGroupAlias extends Alias
} }
@Override @Override
public List<BroadcastChannel> getBroadcastChannels() public Set<BroadcastChannel> getBroadcastChannels()
{ {
List<BroadcastChannel> broadcastChannels = new ArrayList<>(); Set<BroadcastChannel> broadcastChannels = new TreeSet<>();
if(hasPatchGroupAlias()) if(hasPatchGroupAlias())
{ {
@@ -308,13 +316,7 @@ public class PatchGroupAlias extends Alias
{ {
if(!(alias instanceof PatchGroupAlias)) if(!(alias instanceof PatchGroupAlias))
{ {
for(BroadcastChannel broadcastChannel: alias.getBroadcastChannels()) broadcastChannels.addAll(alias.getBroadcastChannels());
{
if(!broadcastChannels.contains(broadcastChannel))
{
broadcastChannels.add(broadcastChannel);
}
}
} }
} }
@@ -339,4 +341,41 @@ public class PatchGroupAlias extends Alias
return false; return false;
} }
public static void main(String[] args)
{
Alias a1 = new Alias("Alias 1");
a1.addAliasID(new BroadcastChannel("Channel 1"));
a1.addAliasID(new BroadcastChannel("Channel 2"));
a1.addAliasID(new BroadcastChannel("Channel 3"));
a1.addAliasID(new BroadcastChannel("Channel 4"));
Alias a2 = new Alias("Alias 1");
a1.addAliasID(new BroadcastChannel("Channel 1"));
a1.addAliasID(new BroadcastChannel("Channel 2"));
a1.addAliasID(new BroadcastChannel("Channel 3"));
a1.addAliasID(new BroadcastChannel("Channel 4"));
Alias a3 = new Alias("Alias 1");
a1.addAliasID(new BroadcastChannel("Channel 1"));
a1.addAliasID(new BroadcastChannel("Channel 2"));
a1.addAliasID(new BroadcastChannel("Channel 3"));
a1.addAliasID(new BroadcastChannel("Channel 4"));
Alias a4 = new Alias("Alias 1");
a1.addAliasID(new BroadcastChannel("Channel 1"));
a1.addAliasID(new BroadcastChannel("Channel 2"));
a1.addAliasID(new BroadcastChannel("Channel 3"));
a1.addAliasID(new BroadcastChannel("Channel 4"));
PatchGroupAlias pga = new PatchGroupAlias();
pga.setPatchGroupAlias(a1);
pga.addPatchedAlias(a2);
pga.addPatchedAlias(a3);
pga.addPatchedAlias(a4);
Set<BroadcastChannel> bc = pga.getBroadcastChannels();
mLog.debug("Channels:" + bc);
}
} }

View File

@@ -707,9 +707,7 @@ public class BroadcastModel extends AbstractTableModel implements Listener<Audio
if(metadata != null && metadata.isStreamable()) if(metadata != null && metadata.isStreamable())
{ {
List<BroadcastChannel> broadcastChannels = metadata.getBroadcastChannels(); for(BroadcastChannel broadcastChannel : metadata.getBroadcastChannels())
for(BroadcastChannel broadcastChannel : broadcastChannels)
{ {
String channelName = broadcastChannel.getChannelName(); String channelName = broadcastChannel.getChannelName();

View File

@@ -28,6 +28,8 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class Metadata public class Metadata
{ {
@@ -61,7 +63,7 @@ public class Metadata
private Integer mAudioPriority; private Integer mAudioPriority;
protected Boolean mRecordable = false; protected Boolean mRecordable = false;
protected Boolean mDoNotRecord; protected Boolean mDoNotRecord;
private List<BroadcastChannel> mBroadcastChannels; private Set<BroadcastChannel> mBroadcastChannels;
/** /**
@@ -166,7 +168,7 @@ public class Metadata
/** /**
* List of de-duplicated broadcast channels aggregated from the primary and secondary TO/FROM aliases. * List of de-duplicated broadcast channels aggregated from the primary and secondary TO/FROM aliases.
*/ */
public List<BroadcastChannel> getBroadcastChannels() public Set<BroadcastChannel> getBroadcastChannels()
{ {
if(mBroadcastChannels == null) if(mBroadcastChannels == null)
{ {
@@ -582,50 +584,26 @@ public class Metadata
*/ */
private void determineBroadcastChannels() private void determineBroadcastChannels()
{ {
mBroadcastChannels = new ArrayList<>(); mBroadcastChannels = new TreeSet<>();
if(mPrimaryAddressTo.hasAlias() && mPrimaryAddressTo.getAlias().isStreamable()) if(mPrimaryAddressTo.hasAlias() && mPrimaryAddressTo.getAlias().isStreamable())
{ {
for(BroadcastChannel broadcastChannel: mPrimaryAddressTo.getAlias().getBroadcastChannels()) mBroadcastChannels.addAll(mPrimaryAddressTo.getAlias().getBroadcastChannels());
{
if(!mBroadcastChannels.contains(broadcastChannel))
{
mBroadcastChannels.add(broadcastChannel);
}
}
} }
if(mPrimaryAddressFrom.hasAlias() && mPrimaryAddressFrom.getAlias().isStreamable()) if(mPrimaryAddressFrom.hasAlias() && mPrimaryAddressFrom.getAlias().isStreamable())
{ {
for(BroadcastChannel broadcastChannel: mPrimaryAddressFrom.getAlias().getBroadcastChannels()) mBroadcastChannels.addAll(mPrimaryAddressFrom.getAlias().getBroadcastChannels());
{
if(!mBroadcastChannels.contains(broadcastChannel))
{
mBroadcastChannels.add(broadcastChannel);
}
}
} }
if(mSecondaryAddressTo.hasAlias() && mSecondaryAddressTo.getAlias().isStreamable()) if(mSecondaryAddressTo.hasAlias() && mSecondaryAddressTo.getAlias().isStreamable())
{ {
for(BroadcastChannel broadcastChannel: mSecondaryAddressTo.getAlias().getBroadcastChannels()) mBroadcastChannels.addAll(mSecondaryAddressTo.getAlias().getBroadcastChannels());
{
if(!mBroadcastChannels.contains(broadcastChannel))
{
mBroadcastChannels.add(broadcastChannel);
}
}
} }
if(mSecondaryAddressFrom.hasAlias() && mSecondaryAddressFrom.getAlias().isStreamable()) if(mSecondaryAddressFrom.hasAlias() && mSecondaryAddressFrom.getAlias().isStreamable())
{ {
for(BroadcastChannel broadcastChannel: mSecondaryAddressFrom.getAlias().getBroadcastChannels()) mBroadcastChannels.addAll(mSecondaryAddressFrom.getAlias().getBroadcastChannels());
{
if(!mBroadcastChannels.contains(broadcastChannel))
{
mBroadcastChannels.add(broadcastChannel);
}
}
} }
} }