From 95a6deaae165e0d26f02d0c09a929b674c671e3b Mon Sep 17 00:00:00 2001 From: Denny Date: Tue, 17 Jan 2017 20:43:49 -0500 Subject: [PATCH] #115 patch group alias - resolves issue where wildcard aliases were being matched against a temporary patch group id and removed from the alias list for the lifespan of the patch group. General cleanup of the rollup methods for the patch group alias. Adds a new method to alias list that allows alias lookup from a tgid while excluding wildcard talkgroups. --- src/alias/AliasList.java | 18 +++++++++++--- src/alias/PatchGroupAlias.java | 29 ++++++++++++---------- src/module/decode/p25/P25DecoderState.java | 8 +++--- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/alias/AliasList.java b/src/alias/AliasList.java index cc1c4662..86428626 100644 --- a/src/alias/AliasList.java +++ b/src/alias/AliasList.java @@ -579,8 +579,12 @@ public class AliasList implements Listener /** * Lookup alias by talkgroup + * + * @param tgid to use when searching for an alias + * @param includeWildcards true if you want to additionally search for a matching alias that contains wildcard(s) + * when there is not a direct match to the TGID. */ - public Alias getTalkgroupAlias(String tgid) + public Alias getTalkgroupAlias(String tgid, boolean includeWildcards) { Alias alias = null; @@ -588,7 +592,7 @@ public class AliasList implements Listener { alias = mTalkgroup.get(tgid); - if (alias == null) + if (alias == null && includeWildcards) { String wildcard = getWildcardMatch(tgid, mTalkgroupWildcards); @@ -603,8 +607,16 @@ public class AliasList implements Listener } /** - * Alias list name + * Lookup alias by talkgroup. Defaults to matching to wildcard talkgroups. */ + public Alias getTalkgroupAlias(String tgid) + { + return getTalkgroupAlias(tgid, true); + } + + /** + * Alias list name + */ public String toString() { return mName; diff --git a/src/alias/PatchGroupAlias.java b/src/alias/PatchGroupAlias.java index a83a6fd7..8c6f1bba 100644 --- a/src/alias/PatchGroupAlias.java +++ b/src/alias/PatchGroupAlias.java @@ -133,19 +133,16 @@ public class PatchGroupAlias extends Alias } else { - if(getId().size() > 0) + for(AliasID id: getId()) { - for(AliasID id: getId()) + if(id.getType() == AliasIDType.TALKGROUP) { - if(id.getType() == AliasIDType.TALKGROUP) - { - return "PATCH:" + ((TalkgroupID)id).getTalkgroup(); - } + return "PATCH:" + ((TalkgroupID)id).getTalkgroup(); } } } - return "PATCH"; + return "PATCH:****"; } @Override @@ -153,16 +150,22 @@ public class PatchGroupAlias extends Alias { List aliasActions = new ArrayList<>(); - for(Alias alias: mPatchedAliases) - { - aliasActions.addAll(alias.getAction()); - } - if(hasPatchGroupAlias()) { aliasActions.addAll(getPatchGroupAlias().getAction()); } + for(Alias alias: mPatchedAliases) + { + for(AliasAction action: alias.getAction()) + { + if(!aliasActions.contains(action)) + { + aliasActions.add(action); + } + } + } + return aliasActions; } @@ -187,7 +190,7 @@ public class PatchGroupAlias extends Alias for(Alias alias: mPatchedAliases) { - if(alias.getCallPriority() < highestPriority) + if(alias.hasCallPriority() && alias.getCallPriority() < highestPriority) { highestPriority = alias.getCallPriority(); } diff --git a/src/module/decode/p25/P25DecoderState.java b/src/module/decode/p25/P25DecoderState.java index 0b17c870..40917161 100644 --- a/src/module/decode/p25/P25DecoderState.java +++ b/src/module/decode/p25/P25DecoderState.java @@ -2924,8 +2924,8 @@ public class P25DecoderState extends DecoderState { PatchGroupAlias patchGroupAlias = null; - //Check for an existing alias for the patch talkgroup - Alias existingAlias = getAliasList().getTalkgroupAlias(patchGroupID); + //Check for an existing alias for the patch talkgroup - do not include wildcard aliases + Alias existingAlias = getAliasList().getTalkgroupAlias(patchGroupID, false); if(existingAlias instanceof PatchGroupAlias) { @@ -2935,6 +2935,8 @@ public class P25DecoderState extends DecoderState { patchGroupAlias = new PatchGroupAlias(); + patchGroupAlias.addAliasID(new TalkgroupID(patchGroupID)); + if(existingAlias != null) { getAliasList().removeAlias(existingAlias); @@ -2942,8 +2944,6 @@ public class P25DecoderState extends DecoderState patchGroupAlias.setPatchGroupAlias(existingAlias); } - patchGroupAlias.addAliasID(new TalkgroupID(patchGroupID)); - getAliasList().addAlias(patchGroupAlias); }