diff --git a/src/alias/AliasList.java b/src/alias/AliasList.java index 10c3e214..493e051a 100644 --- a/src/alias/AliasList.java +++ b/src/alias/AliasList.java @@ -48,16 +48,16 @@ public class AliasList implements Listener public static final String WILDCARD = "*"; public static final String REGEX_WILDCARD = "."; - private Map mESN = new HashMap<>(); - private Map mFleetsync = new HashMap<>(); - private Map mLoJack = new HashMap<>(); - private Map mMDC1200 = new HashMap<>(); - private Map mMobileID = new HashMap<>(); - private Map mMPT1327 = new HashMap<>(); - private Map mSiteID = new HashMap<>(); - private Map mStatus = new HashMap<>(); - private Map mTalkgroup = new HashMap<>(); - private Map mUniqueID = new HashMap<>(); + private Map mESN = new HashMap<>(); + private Map mFleetsync = new HashMap<>(); + private Map mLoJack = new HashMap<>(); + private Map mMDC1200 = new HashMap<>(); + private Map mMobileID = new HashMap<>(); + private Map mMPT1327 = new HashMap<>(); + private Map mSiteID = new HashMap<>(); + private Map mStatus = new HashMap<>(); + private Map mTalkgroup = new HashMap<>(); + private Map mUniqueID = new HashMap<>(); private List mESNWildcards = new ArrayList<>(); private List mMobileIDWildcards = new ArrayList<>(); @@ -124,7 +124,7 @@ public class AliasList implements Listener if(fleetsync != null) { - if(fleetsync.contains(WILDCARD)) + if (fleetsync.contains(WILDCARD)) { mFleetsyncWildcards.add(new WildcardID(fleetsync)); Collections.sort(mFleetsyncWildcards); @@ -137,11 +137,11 @@ public class AliasList implements Listener mLoJack.put((LoJackFunctionAndID) id, alias); break; case MDC1200: - String mdc = ((MDC1200ID) id).getIdent(); + String mdc = ((MDC1200ID)id).getIdent(); if(mdc != null) { - if(mdc.contains(WILDCARD)) + if (mdc.contains(WILDCARD)) { mMDC1200Wildcards.add(new WildcardID(mdc)); Collections.sort(mMDC1200Wildcards); @@ -151,11 +151,11 @@ public class AliasList implements Listener } break; case MPT1327: - String mpt = ((MPT1327ID) id).getIdent(); + String mpt = ((MPT1327ID)id).getIdent(); if(mpt != null) { - if(mpt.contains(WILDCARD)) + if (mpt.contains(WILDCARD)) { mMPT1327Wildcards.add(new WildcardID(mpt)); Collections.sort(mMPT1327Wildcards); @@ -165,11 +165,11 @@ public class AliasList implements Listener } break; case MIN: - String min = ((Min) id).getMin(); + String min = ((Min)id).getMin(); if(min != null) { - if(min.contains(WILDCARD)) + if (min.contains(WILDCARD)) { mMobileIDWildcards.add(new WildcardID(min)); Collections.sort(mMobileIDWildcards); @@ -179,14 +179,14 @@ public class AliasList implements Listener } break; case LTR_NET_UID: - mUniqueID.put(((UniqueID) id).getUid(), alias); + mUniqueID.put(((UniqueID)id).getUid(), alias); break; case SITE: - String siteID = ((SiteID) id).getSite(); + String siteID = ((SiteID)id).getSite(); if(siteID != null) { - if(siteID.contains(WILDCARD)) + if (siteID.contains(WILDCARD)) { mSiteWildcards.add(new WildcardID(siteID)); Collections.sort(mSiteWildcards); @@ -199,11 +199,11 @@ public class AliasList implements Listener mStatus.put(((StatusID) id).getStatus(), alias); break; case TALKGROUP: - String tgid = ((TalkgroupID) id).getTalkgroup(); + String tgid = ((TalkgroupID)id).getTalkgroup(); if(tgid != null) { - if(tgid.contains(WILDCARD)) + if (tgid.contains(WILDCARD)) { mTalkgroupWildcards.add(new WildcardID(tgid)); Collections.sort(mTalkgroupWildcards); @@ -222,7 +222,7 @@ public class AliasList implements Listener break; } } - catch(Exception e) + catch (Exception e) { mLog.error("Couldn't add alias ID " + id + " for alias " + alias); } @@ -234,9 +234,9 @@ public class AliasList implements Listener */ public void removeAlias(Alias alias) { - if(alias != null) + if (alias != null) { - for(AliasID aliasID : alias.getId()) + for (AliasID aliasID : alias.getId()) { removeAliasID(aliasID, alias); } @@ -247,7 +247,7 @@ public class AliasList implements Listener { if(value != null) { - for(WildcardID wildcardID : wildcards) + for(WildcardID wildcardID: wildcards) { if(wildcardID.value().equals(value)) { @@ -262,12 +262,12 @@ public class AliasList implements Listener */ private void removeAliasID(AliasID id, Alias alias) { - if(id.isValid()) + if (id.isValid()) { - switch(id.getType()) + switch (id.getType()) { case ESN: - String esn = ((Esn) id).getEsn(); + String esn = ((Esn)id).getEsn(); if(esn != null) { @@ -280,13 +280,13 @@ public class AliasList implements Listener mESN.remove(esn); break; case FLEETSYNC: - String fleetsync = ((FleetsyncID) id).getIdent(); + String fleetsync = ((FleetsyncID)id).getIdent(); if(fleetsync != null) { if(fleetsync.contains(WILDCARD)) { - removeWildcard(fleetsync, mFleetsyncWildcards); + removeWildcard(fleetsync,mFleetsyncWildcards); } mFleetsync.remove(fleetsync); @@ -296,7 +296,7 @@ public class AliasList implements Listener mLoJack.remove((LoJackFunctionAndID) id); break; case MDC1200: - String mdc = ((MDC1200ID) id).getIdent(); + String mdc = ((MDC1200ID)id).getIdent(); if(mdc != null) { @@ -309,7 +309,7 @@ public class AliasList implements Listener } break; case MPT1327: - String mpt = ((MPT1327ID) id).getIdent(); + String mpt = ((MPT1327ID)id).getIdent(); if(mpt != null) { @@ -322,7 +322,7 @@ public class AliasList implements Listener } break; case MIN: - String min = ((Min) id).getMin(); + String min = ((Min)id).getMin(); if(min != null) { @@ -344,7 +344,7 @@ public class AliasList implements Listener mStatus.remove(((StatusID) id).getStatus()); break; case TALKGROUP: - String tgid = ((TalkgroupID) id).getTalkgroup(); + String tgid = ((TalkgroupID)id).getTalkgroup(); if(tgid != null) { @@ -378,11 +378,11 @@ public class AliasList implements Listener */ private String getWildcardMatch(String id, List wildcards) { - if(id != null) + if (id != null) { - for(WildcardID wildcard : wildcards) + for (WildcardID wildcard : wildcards) { - if(wildcard.matches(id)) + if (wildcard.matches(id)) { return wildcard.value(); } @@ -399,15 +399,15 @@ public class AliasList implements Listener { Alias alias = null; - if(siteID != null) + if (siteID != null) { alias = mSiteID.get(siteID); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(siteID, mSiteWildcards); - if(wildcard != null) + if (wildcard != null) { alias = mSiteID.get(wildcard); } @@ -440,15 +440,15 @@ public class AliasList implements Listener { Alias alias = null; - if(esn != null) + if (esn != null) { alias = mESN.get(esn); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(esn, mESNWildcards); - if(wildcard != null) + if (wildcard != null) { alias = mESN.get(wildcard); } @@ -465,15 +465,15 @@ public class AliasList implements Listener { Alias alias = null; - if(ident != null) + if (ident != null) { alias = mFleetsync.get(ident); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(ident, mFleetsyncWildcards); - if(wildcard != null) + if (wildcard != null) { alias = mFleetsync.get(wildcard); } @@ -488,11 +488,11 @@ public class AliasList implements Listener */ public Alias getLoJackAlias(Function function, String id) { - if(id != null) + if (id != null) { - for(LoJackFunctionAndID lojack : mLoJack.keySet()) + for (LoJackFunctionAndID lojack : mLoJack.keySet()) { - if(lojack.matches(function, id)) + if (lojack.matches(function, id)) { return mLoJack.get(lojack); } @@ -509,15 +509,15 @@ public class AliasList implements Listener { Alias alias = null; - if(ident != null) + if (ident != null) { alias = mMDC1200.get(ident); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(ident, mMDC1200Wildcards); - if(wildcard != null) + if (wildcard != null) { alias = mMDC1200.get(wildcard); } @@ -534,15 +534,15 @@ public class AliasList implements Listener { Alias alias = null; - if(ident != null) + if (ident != null) { alias = mMPT1327.get(ident); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(ident, mMPT1327Wildcards); - if(wildcard != null) + if (wildcard != null) { alias = mMPT1327.get(wildcard); } @@ -559,15 +559,15 @@ public class AliasList implements Listener { Alias alias = null; - if(ident != null) + if (ident != null) { alias = mMobileID.get(ident); - if(alias == null) + if (alias == null) { String wildcard = getWildcardMatch(ident, mMobileIDWildcards); - if(wildcard != null) + if (wildcard != null) { alias = mMobileID.get(wildcard); } @@ -579,20 +579,24 @@ 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; - if(tgid != null) + if (tgid != null) { alias = mTalkgroup.get(tgid); - if(alias == null) + if (alias == null && includeWildcards) { String wildcard = getWildcardMatch(tgid, mTalkgroupWildcards); - if(wildcard != null) + if (wildcard != null) { alias = mTalkgroup.get(wildcard); } @@ -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; @@ -627,22 +639,22 @@ public class AliasList implements Listener { Alias alias = event.getAlias(); - switch(event.getEvent()) + switch (event.getEvent()) { case ADD: - if(alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) + if (alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) { addAlias(alias); } break; case CHANGE: - if(alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) + if (alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) { addAlias(alias); } break; case DELETE: - if(alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) + if (alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) { removeAlias(alias); } diff --git a/src/alias/PatchGroupAlias.java b/src/alias/PatchGroupAlias.java index 2e24f91f..b4788a86 100644 --- a/src/alias/PatchGroupAlias.java +++ b/src/alias/PatchGroupAlias.java @@ -144,19 +144,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 @@ -164,16 +161,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; } @@ -198,7 +201,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 926c3ea3..6e05a5e7 100644 --- a/src/module/decode/p25/P25DecoderState.java +++ b/src/module/decode/p25/P25DecoderState.java @@ -2917,8 +2917,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) { @@ -2928,6 +2928,8 @@ public class P25DecoderState extends DecoderState { patchGroupAlias = new PatchGroupAlias(); + patchGroupAlias.addAliasID(new TalkgroupID(patchGroupID)); + if(existingAlias != null) { getAliasList().removeAlias(existingAlias); @@ -2935,8 +2937,6 @@ public class P25DecoderState extends DecoderState patchGroupAlias.setPatchGroupAlias(existingAlias); } - patchGroupAlias.addAliasID(new TalkgroupID(patchGroupID)); - getAliasList().addAlias(patchGroupAlias); }