From 3fa7401a2b2361908a2810c8a056265326f20e8d Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Mon, 31 Dec 2018 05:36:54 -0500 Subject: [PATCH] 467 Alias List Update On Alias Delete/Change (#470) * Updates playlist to fully clean aliases from the alias list when deleted and to perform a delete and re-add on any alias that changes, to ensure that the alias list is kept fully up to date. Removed site id as an alias identifier. Add support for converting ltr-net uid's to talkgroups in playlist updater and updated playlist to version 3 to ensure anyone using current codebase will have their playlists fully updated. Moved MIN, UniqueID and Site ID to the legacy package and updated label descriptions to signify that they are no longer supported. --- sdr-trunk.ipr | 67 +++-- sdrtrunk.iml | 14 - .../io/github/dsheirer/alias/AliasEditor.java | 3 +- .../github/dsheirer/alias/AliasFactory.java | 12 +- .../io/github/dsheirer/alias/AliasList.java | 247 +++--------------- .../io/github/dsheirer/alias/id/AliasID.java | 6 +- .../alias/id/AliasIdentifierEditor.java | 6 +- .../id/{ => legacy}/mobileID/MINEditor.java | 2 +- .../alias/id/{ => legacy}/mobileID/Min.java | 4 +- .../alias/id/{ => legacy}/siteID/SiteID.java | 2 +- .../id/{ => legacy}/siteID/SiteIDEditor.java | 2 +- .../legacy/talkgroup/LegacyTalkgroupID.java | 2 +- .../id/{ => legacy}/uniqueID/UniqueID.java | 4 +- .../{ => legacy}/uniqueID/UniqueIDEditor.java | 2 +- .../decode/ltrnet/LTRNetDecoderState.java | 20 +- ...tifier.java => LtrNetRadioIdentifier.java} | 20 +- .../ltrnet/message/isw/IswUniqueId.java | 12 +- .../message/osw/RegistrationAccept.java | 12 +- .../dsheirer/playlist/PlaylistManager.java | 2 +- .../dsheirer/playlist/PlaylistUpdater.java | 40 ++- 20 files changed, 159 insertions(+), 320 deletions(-) delete mode 100644 sdrtrunk.iml rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/mobileID/MINEditor.java (98%) rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/mobileID/Min.java (95%) rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/siteID/SiteID.java (97%) rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/siteID/SiteIDEditor.java (98%) rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/uniqueID/UniqueID.java (93%) rename src/main/java/io/github/dsheirer/alias/id/{ => legacy}/uniqueID/UniqueIDEditor.java (98%) rename src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/{UniqueIdentifier.java => LtrNetRadioIdentifier.java} (70%) diff --git a/sdr-trunk.ipr b/sdr-trunk.ipr index 28efe348..f3b4d0ec 100644 --- a/sdr-trunk.ipr +++ b/sdr-trunk.ipr @@ -383,15 +383,15 @@ - + - + - + - + @@ -476,15 +476,15 @@ - + - + - + - + @@ -619,82 +619,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + - + - + - + - + diff --git a/sdrtrunk.iml b/sdrtrunk.iml deleted file mode 100644 index 390626c0..00000000 --- a/sdrtrunk.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/io/github/dsheirer/alias/AliasEditor.java b/src/main/java/io/github/dsheirer/alias/AliasEditor.java index a6df0774..7becf5b5 100644 --- a/src/main/java/io/github/dsheirer/alias/AliasEditor.java +++ b/src/main/java/io/github/dsheirer/alias/AliasEditor.java @@ -31,8 +31,7 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -public class AliasEditor extends Editor - implements ActionListener, Listener +public class AliasEditor extends Editor implements ActionListener, Listener { private static final long serialVersionUID = 1L; diff --git a/src/main/java/io/github/dsheirer/alias/AliasFactory.java b/src/main/java/io/github/dsheirer/alias/AliasFactory.java index 102007cb..2cb19ba9 100644 --- a/src/main/java/io/github/dsheirer/alias/AliasFactory.java +++ b/src/main/java/io/github/dsheirer/alias/AliasFactory.java @@ -45,22 +45,22 @@ import io.github.dsheirer.alias.id.legacy.talkgroup.LegacyTalkgroupID; import io.github.dsheirer.alias.id.legacy.talkgroup.LegacyTalkgroupIDEditor; import io.github.dsheirer.alias.id.lojack.LoJackFunctionAndID; import io.github.dsheirer.alias.id.lojack.LoJackIDEditor; -import io.github.dsheirer.alias.id.mobileID.MINEditor; -import io.github.dsheirer.alias.id.mobileID.Min; +import io.github.dsheirer.alias.id.legacy.mobileID.MINEditor; +import io.github.dsheirer.alias.id.legacy.mobileID.Min; import io.github.dsheirer.alias.id.priority.Priority; import io.github.dsheirer.alias.id.priority.PriorityEditor; import io.github.dsheirer.alias.id.record.Record; import io.github.dsheirer.alias.id.record.RecordEditor; -import io.github.dsheirer.alias.id.siteID.SiteID; -import io.github.dsheirer.alias.id.siteID.SiteIDEditor; +import io.github.dsheirer.alias.id.legacy.siteID.SiteID; +import io.github.dsheirer.alias.id.legacy.siteID.SiteIDEditor; import io.github.dsheirer.alias.id.status.StatusID; import io.github.dsheirer.alias.id.status.StatusIDEditor; import io.github.dsheirer.alias.id.talkgroup.Talkgroup; import io.github.dsheirer.alias.id.talkgroup.TalkgroupEditor; import io.github.dsheirer.alias.id.talkgroup.TalkgroupRange; import io.github.dsheirer.alias.id.talkgroup.TalkgroupRangeEditor; -import io.github.dsheirer.alias.id.uniqueID.UniqueID; -import io.github.dsheirer.alias.id.uniqueID.UniqueIDEditor; +import io.github.dsheirer.alias.id.legacy.uniqueID.UniqueID; +import io.github.dsheirer.alias.id.legacy.uniqueID.UniqueIDEditor; import io.github.dsheirer.audio.broadcast.BroadcastModel; import io.github.dsheirer.gui.editor.Editor; import io.github.dsheirer.gui.editor.EmptyEditor; diff --git a/src/main/java/io/github/dsheirer/alias/AliasList.java b/src/main/java/io/github/dsheirer/alias/AliasList.java index 221797e8..62a5af96 100644 --- a/src/main/java/io/github/dsheirer/alias/AliasList.java +++ b/src/main/java/io/github/dsheirer/alias/AliasList.java @@ -21,15 +21,12 @@ package io.github.dsheirer.alias; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import io.github.dsheirer.alias.id.AliasID; -import io.github.dsheirer.alias.id.WildcardID; import io.github.dsheirer.alias.id.broadcast.BroadcastChannel; import io.github.dsheirer.alias.id.esn.Esn; import io.github.dsheirer.alias.id.priority.Priority; -import io.github.dsheirer.alias.id.siteID.SiteID; import io.github.dsheirer.alias.id.status.StatusID; import io.github.dsheirer.alias.id.talkgroup.Talkgroup; import io.github.dsheirer.alias.id.talkgroup.TalkgroupRange; -import io.github.dsheirer.alias.id.uniqueID.UniqueID; import io.github.dsheirer.identifier.Identifier; import io.github.dsheirer.identifier.IdentifierCollection; import io.github.dsheirer.identifier.esn.ESNIdentifier; @@ -42,8 +39,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.TreeMap; @@ -51,19 +48,10 @@ import java.util.TreeMap; public class AliasList implements Listener { private final static Logger mLog = LoggerFactory.getLogger(AliasList.class); - public static final String WILDCARD = "*"; - - private Map mESN = new HashMap<>(); - private Map mSiteID = new HashMap<>(); - private Map mStatus = new HashMap<>(); - private Map mUniqueID = new HashMap<>(); - - private List mESNWildcards = new ArrayList<>(); - private List mSiteWildcards = new ArrayList<>(); - private boolean mHasAliasActions = false; - private Map mTalkgroupProtocolMap = new HashMap<>(); - + private Map mESNMap = new HashMap<>(); + private Map mStatusMap = new HashMap<>(); + private boolean mHasAliasActions = false; private String mName; /** @@ -136,45 +124,13 @@ public class AliasList implements Listener case ESN: String esn = ((Esn) id).getEsn(); - if(esn != null) + if(esn != null && !esn.isEmpty()) { - if(esn.contains(WILDCARD)) - { - mESNWildcards.add(new WildcardID(esn)); - Collections.sort(mESNWildcards); - } - - mESN.put(esn, alias); - } - break; - case LTR_NET_UID: - mUniqueID.put(((UniqueID) id).getUid(), alias); - break; - case SITE: - String siteID = ((SiteID) id).getSite(); - - if(siteID != null) - { - if(siteID.contains(WILDCARD)) - { - mSiteWildcards.add(new WildcardID(siteID)); - Collections.sort(mSiteWildcards); - } - - mSiteID.put(siteID, alias); + mESNMap.put(esn.toLowerCase(), alias); } break; case STATUS: - mStatus.put(((StatusID) id).getStatus(), alias); - break; - case BROADCAST_CHANNEL: - case NON_RECORDABLE: - case RECORD: - case PRIORITY: - //We don't maintain lookups for these items - break; - default: - mLog.warn("Unrecognized Alias ID Type:" + id.getType().name() + " - can't ADD to lookup table"); + mStatusMap.put(((StatusID) id).getStatus(), alias); break; } } @@ -190,155 +146,13 @@ public class AliasList implements Listener */ public void removeAlias(Alias alias) { - if(alias != null) + for(TalkgroupAliasList talkgroupAliasList: mTalkgroupProtocolMap.values()) { - for(AliasID aliasID : alias.getId()) - { - removeAliasID(aliasID, alias); - } - } - } - - private void removeWildcard(String value, List wildcards) - { - if(value != null) - { - for(WildcardID wildcardID : wildcards) - { - if(wildcardID.value().equals(value)) - { - wildcards.remove(wildcardID); - } - } - } - } - - /** - * Removes the alias and alias identifier from internal mappings. - */ - private void removeAliasID(AliasID id, Alias alias) - { - if(id.isValid()) - { - switch(id.getType()) - { - case TALKGROUP: - Talkgroup talkgroup = (Talkgroup)id; - - TalkgroupAliasList talkgroupAliasList = mTalkgroupProtocolMap.get(talkgroup.getProtocol()); - - if(talkgroupAliasList != null) - { - talkgroupAliasList.remove(talkgroup); - } - break; - case TALKGROUP_RANGE: - TalkgroupRange talkgroupRange = (TalkgroupRange)id; - - TalkgroupAliasList talkgroupRangeAliasList = mTalkgroupProtocolMap.get(talkgroupRange.getProtocol()); - - if(talkgroupRangeAliasList != null) - { - talkgroupRangeAliasList.remove(talkgroupRange); - } - break; - case ESN: - String esn = ((Esn) id).getEsn(); - - if(esn != null) - { - if(esn.contains(WILDCARD)) - { - removeWildcard(esn, mESNWildcards); - } - } - - mESN.remove(esn); - break; - case LTR_NET_UID: - mUniqueID.remove(((UniqueID) id).getUid()); - break; - case SITE: - mSiteID.remove(((SiteID) id).getSite()); - break; - case STATUS: - mStatus.remove(((StatusID) id).getStatus()); - break; - case NON_RECORDABLE: - case PRIORITY: - case BROADCAST_CHANNEL: - //We don't maintain lookups for these items - break; - default: - mLog.warn("Unrecognized Alias ID Type:" + id.getType().name() + " - can't REMOVE from lookup table"); - break; - } - } - } - - /** - * Returns the first matching regex wildcard from the list of wildcards that matches the - * identifier. - * - * @param id to match - * @param wildcards to match against - * @return matching wildcard ID or null - */ - private String getWildcardMatch(String id, List wildcards) - { - if(id != null) - { - for(WildcardID wildcard : wildcards) - { - if(wildcard.matches(id)) - { - return wildcard.value(); - } - } + talkgroupAliasList.remove(alias); } - return null; - } - - /** - * Lookup alias by site ID - */ - public Alias getSiteID(String siteID) - { - Alias alias = null; - - if(siteID != null) - { - alias = mSiteID.get(siteID); - - if(alias == null) - { - String wildcard = getWildcardMatch(siteID, mSiteWildcards); - - if(wildcard != null) - { - alias = mSiteID.get(wildcard); - } - } - } - - return alias; - } - - /** - * Lookup alias by status ID - */ - public Alias getStatus(int status) - { - return mStatus.get(status); - } - - /** - * Lookup alias by Unique ID (UID) - */ - public Alias getUniqueID(int uniqueID) - { - return mUniqueID.get(uniqueID); + remove(alias, mStatusMap); + remove(alias, mESNMap); } /** @@ -350,17 +164,7 @@ public class AliasList implements Listener if(esn != null) { - alias = mESN.get(esn); - - if(alias == null) - { - String wildcard = getWildcardMatch(esn, mESNWildcards); - - if(wildcard != null) - { - alias = mESN.get(wildcard); - } - } + alias = mESNMap.get(esn); } return alias; @@ -412,6 +216,7 @@ public class AliasList implements Listener case CHANGE: if(alias.getList() != null && getName().equalsIgnoreCase(alias.getList())) { + removeAlias(alias); addAlias(alias); } break; @@ -588,6 +393,23 @@ public class AliasList implements Listener return channels; } + /** + * Removes the alias (as a value) from the specified map + */ + public static void remove(Alias alias, Map map) + { + Iterator it = map.entrySet().iterator(); + + while(it.hasNext()) + { + if(it.next().getKey().equals(alias)) + { + it.remove(); + } + } + } + + /** * Listing of talkgroups and ranges for a specific protocol */ @@ -639,5 +461,14 @@ public class AliasList implements Listener { mTalkgroupRangeMap.remove(talkgroupRange); } + + /** + * Removes the alias from all internal maps + */ + public void remove(Alias alias) + { + AliasList.remove(alias, mTalkgroupAliasMap); + AliasList.remove(alias, mTalkgroupRangeMap); + } } } diff --git a/src/main/java/io/github/dsheirer/alias/id/AliasID.java b/src/main/java/io/github/dsheirer/alias/id/AliasID.java index 935c764e..37aacdc9 100644 --- a/src/main/java/io/github/dsheirer/alias/id/AliasID.java +++ b/src/main/java/io/github/dsheirer/alias/id/AliasID.java @@ -29,14 +29,14 @@ import io.github.dsheirer.alias.id.legacy.mpt1327.MPT1327ID; import io.github.dsheirer.alias.id.legacy.nonrecordable.NonRecordable; import io.github.dsheirer.alias.id.legacy.talkgroup.LegacyTalkgroupID; import io.github.dsheirer.alias.id.lojack.LoJackFunctionAndID; -import io.github.dsheirer.alias.id.mobileID.Min; +import io.github.dsheirer.alias.id.legacy.mobileID.Min; import io.github.dsheirer.alias.id.priority.Priority; import io.github.dsheirer.alias.id.record.Record; -import io.github.dsheirer.alias.id.siteID.SiteID; +import io.github.dsheirer.alias.id.legacy.siteID.SiteID; import io.github.dsheirer.alias.id.status.StatusID; import io.github.dsheirer.alias.id.talkgroup.Talkgroup; import io.github.dsheirer.alias.id.talkgroup.TalkgroupRange; -import io.github.dsheirer.alias.id.uniqueID.UniqueID; +import io.github.dsheirer.alias.id.legacy.uniqueID.UniqueID; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes({ diff --git a/src/main/java/io/github/dsheirer/alias/id/AliasIdentifierEditor.java b/src/main/java/io/github/dsheirer/alias/id/AliasIdentifierEditor.java index e6bb7b9d..16193713 100644 --- a/src/main/java/io/github/dsheirer/alias/id/AliasIdentifierEditor.java +++ b/src/main/java/io/github/dsheirer/alias/id/AliasIdentifierEditor.java @@ -125,11 +125,7 @@ public class AliasIdentifierEditor extends Editor menu.add(new AddAliasIdentifierItem(AliasIDType.TALKGROUP)); menu.add(new AddAliasIdentifierItem(AliasIDType.TALKGROUP_RANGE)); menu.add(new AddAliasIdentifierItem(AliasIDType.ESN)); - menu.add(new AddAliasIdentifierItem(AliasIDType.LOJACK)); - menu.add(new AddAliasIdentifierItem(AliasIDType.LTR_NET_UID)); - menu.add(new AddAliasIdentifierItem(AliasIDType.MDC1200)); - menu.add(new AddAliasIdentifierItem(AliasIDType.MIN)); - menu.add(new AddAliasIdentifierItem(AliasIDType.SITE)); +// menu.add(new AddAliasIdentifierItem(AliasIDType.LOJACK)); menu.add(new AddAliasIdentifierItem(AliasIDType.STATUS)); menu.addSeparator(); diff --git a/src/main/java/io/github/dsheirer/alias/id/mobileID/MINEditor.java b/src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/MINEditor.java similarity index 98% rename from src/main/java/io/github/dsheirer/alias/id/mobileID/MINEditor.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/MINEditor.java index ff2a4f8d..f50b831a 100644 --- a/src/main/java/io/github/dsheirer/alias/id/mobileID/MINEditor.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/MINEditor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.mobileID; +package io.github.dsheirer.alias.id.legacy.mobileID; import io.github.dsheirer.alias.id.AliasID; import io.github.dsheirer.gui.editor.DocumentListenerEditor; diff --git a/src/main/java/io/github/dsheirer/alias/id/mobileID/Min.java b/src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/Min.java similarity index 95% rename from src/main/java/io/github/dsheirer/alias/id/mobileID/Min.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/Min.java index 89282fc6..4cd2e203 100644 --- a/src/main/java/io/github/dsheirer/alias/id/mobileID/Min.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/mobileID/Min.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.mobileID; +package io.github.dsheirer.alias.id.legacy.mobileID; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; @@ -52,7 +52,7 @@ public class Min extends AliasID public String toString() { - return "MIN: " + (mMin != null ? mMin : "(empty)") + (isValid() ? "" : " **NOT VALID**"); + return "MIN: " + (mMin != null ? mMin : "(empty)") + (isValid() ? "" : " **INVALID - USE TALKGROUP INSTEAD"); } @Override diff --git a/src/main/java/io/github/dsheirer/alias/id/siteID/SiteID.java b/src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteID.java similarity index 97% rename from src/main/java/io/github/dsheirer/alias/id/siteID/SiteID.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteID.java index f4bdbca8..a7616e7e 100644 --- a/src/main/java/io/github/dsheirer/alias/id/siteID/SiteID.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteID.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.siteID; +package io.github.dsheirer.alias.id.legacy.siteID; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import io.github.dsheirer.alias.id.AliasID; diff --git a/src/main/java/io/github/dsheirer/alias/id/siteID/SiteIDEditor.java b/src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteIDEditor.java similarity index 98% rename from src/main/java/io/github/dsheirer/alias/id/siteID/SiteIDEditor.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteIDEditor.java index aa87fcee..e7184ba5 100644 --- a/src/main/java/io/github/dsheirer/alias/id/siteID/SiteIDEditor.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/siteID/SiteIDEditor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.siteID; +package io.github.dsheirer.alias.id.legacy.siteID; import io.github.dsheirer.alias.id.AliasID; import io.github.dsheirer.gui.editor.DocumentListenerEditor; diff --git a/src/main/java/io/github/dsheirer/alias/id/legacy/talkgroup/LegacyTalkgroupID.java b/src/main/java/io/github/dsheirer/alias/id/legacy/talkgroup/LegacyTalkgroupID.java index bc925e83..8eb9553f 100644 --- a/src/main/java/io/github/dsheirer/alias/id/legacy/talkgroup/LegacyTalkgroupID.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/talkgroup/LegacyTalkgroupID.java @@ -59,7 +59,7 @@ public class LegacyTalkgroupID extends AliasID { StringBuilder sb = new StringBuilder(); - sb.append("Legacy Talkgroup:").append(mTalkgroup).append(" *Disabled - Please Convert"); + sb.append("Legacy Talkgroup:").append(mTalkgroup).append(" *Disabled - Please use Talkgroup instead"); return sb.toString(); } diff --git a/src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueID.java b/src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueID.java similarity index 93% rename from src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueID.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueID.java index 5b2e1f77..249a66ee 100644 --- a/src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueID.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueID.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.uniqueID; +package io.github.dsheirer.alias.id.legacy.uniqueID; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import io.github.dsheirer.alias.id.AliasID; @@ -48,7 +48,7 @@ public class UniqueID extends AliasID public String toString() { - return "UniqueID: " + mUid; + return "UniqueID: " + mUid + " **INVALID - USE TALKGROUP INSTEAD"; } @Override diff --git a/src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueIDEditor.java b/src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueIDEditor.java similarity index 98% rename from src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueIDEditor.java rename to src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueIDEditor.java index 01053c51..41dcb6fa 100644 --- a/src/main/java/io/github/dsheirer/alias/id/uniqueID/UniqueIDEditor.java +++ b/src/main/java/io/github/dsheirer/alias/id/legacy/uniqueID/UniqueIDEditor.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see ******************************************************************************/ -package io.github.dsheirer.alias.id.uniqueID; +package io.github.dsheirer.alias.id.legacy.uniqueID; import io.github.dsheirer.alias.id.AliasID; import io.github.dsheirer.gui.editor.DocumentListenerEditor; diff --git a/src/main/java/io/github/dsheirer/module/decode/ltrnet/LTRNetDecoderState.java b/src/main/java/io/github/dsheirer/module/decode/ltrnet/LTRNetDecoderState.java index 333e5c28..a73c1fc7 100644 --- a/src/main/java/io/github/dsheirer/module/decode/ltrnet/LTRNetDecoderState.java +++ b/src/main/java/io/github/dsheirer/module/decode/ltrnet/LTRNetDecoderState.java @@ -37,7 +37,7 @@ import io.github.dsheirer.message.MessageDirection; import io.github.dsheirer.module.decode.DecoderType; import io.github.dsheirer.module.decode.event.DecodeEvent; import io.github.dsheirer.module.decode.ltrnet.channel.LtrNetChannel; -import io.github.dsheirer.module.decode.ltrnet.identifier.UniqueIdentifier; +import io.github.dsheirer.module.decode.ltrnet.identifier.LtrNetRadioIdentifier; import io.github.dsheirer.module.decode.ltrnet.message.LtrNetMessage; import io.github.dsheirer.module.decode.ltrnet.message.isw.IswCallEnd; import io.github.dsheirer.module.decode.ltrnet.message.isw.IswCallStart; @@ -82,7 +82,7 @@ public class LTRNetDecoderState extends DecoderState private SiteId mCurrentSite; private int mCurrentChannelNumber; private Set mTalkgroups = new TreeSet<>(); - private Set mUniqueIdentifiers = new TreeSet<>(); + private Set mLtrNetRadioIdentifiers = new TreeSet<>(); private Set mESNIdentifiers = new TreeSet<>(); private DecodeEvent mCurrentCallEvent; private LTRTalkgroup mCurrentCallTalkgroup; @@ -121,7 +121,7 @@ public class LTRNetDecoderState extends DecoderState mCurrentSite = null; mCurrentChannelNumber = 0; mTalkgroups.clear(); - mUniqueIdentifiers.clear(); + mLtrNetRadioIdentifiers.clear(); mESNIdentifiers.clear(); resetState(); } @@ -388,7 +388,7 @@ public class LTRNetDecoderState extends DecoderState { IswUniqueId iswUniqueId = (IswUniqueId)message; getIdentifierCollection().update(iswUniqueId.getUniqueID()); - mUniqueIdentifiers.add(iswUniqueId.getUniqueID()); + mLtrNetRadioIdentifiers.add(iswUniqueId.getUniqueID()); updateCurrentCallIdentifiers(); broadcast(new DecoderStateEvent(this, Event.CONTINUATION, State.DATA)); } @@ -462,7 +462,7 @@ public class LTRNetDecoderState extends DecoderState if(message instanceof RegistrationAccept) { RegistrationAccept registrationAccept = (RegistrationAccept)message; - mUniqueIdentifiers.add(registrationAccept.getUniqueID()); + mLtrNetRadioIdentifiers.add(registrationAccept.getUniqueID()); MutableIdentifierCollection ic = new MutableIdentifierCollection(getIdentifierCollection().getIdentifiers()); ic.remove(IdentifierClass.USER); ic.update(message.getIdentifiers()); @@ -580,18 +580,18 @@ public class LTRNetDecoderState extends DecoderState sb.append("\nActive Radio Unique IDs\n"); - if(mUniqueIdentifiers.isEmpty()) + if(mLtrNetRadioIdentifiers.isEmpty()) { sb.append(" None\n"); } else { - List uniqueIdentifiers = new ArrayList<>(mUniqueIdentifiers); - Collections.sort(uniqueIdentifiers, Comparator.comparingInt(Identifier::getValue)); + List ltrNetRadioIdentifiers = new ArrayList<>(mLtrNetRadioIdentifiers); + Collections.sort(ltrNetRadioIdentifiers, Comparator.comparingInt(Identifier::getValue)); - for(UniqueIdentifier uniqueIdentifier: uniqueIdentifiers) + for(LtrNetRadioIdentifier ltrNetRadioIdentifier : ltrNetRadioIdentifiers) { - sb.append(" ").append(uniqueIdentifier).append("\n"); + sb.append(" ").append(ltrNetRadioIdentifier).append("\n"); } } diff --git a/src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/UniqueIdentifier.java b/src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/LtrNetRadioIdentifier.java similarity index 70% rename from src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/UniqueIdentifier.java rename to src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/LtrNetRadioIdentifier.java index b0d53d53..e4263396 100644 --- a/src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/UniqueIdentifier.java +++ b/src/main/java/io/github/dsheirer/module/decode/ltrnet/identifier/LtrNetRadioIdentifier.java @@ -20,20 +20,18 @@ package io.github.dsheirer.module.decode.ltrnet.identifier; -import io.github.dsheirer.identifier.Form; -import io.github.dsheirer.identifier.IdentifierClass; import io.github.dsheirer.identifier.Role; -import io.github.dsheirer.identifier.integer.IntegerIdentifier; +import io.github.dsheirer.identifier.talkgroup.TalkgroupIdentifier; import io.github.dsheirer.protocol.Protocol; /** * Unique ID or radio ID for LTR-Net radios is a 16-bit logical network radio identifier value. */ -public class UniqueIdentifier extends IntegerIdentifier implements Comparable +public class LtrNetRadioIdentifier extends TalkgroupIdentifier implements Comparable { - public UniqueIdentifier(int value, Role role) + public LtrNetRadioIdentifier(int value, Role role) { - super(value, IdentifierClass.USER, Form.UNIQUE_ID, role); + super(value, role, false); } @Override @@ -45,21 +43,21 @@ public class UniqueIdentifier extends IntegerIdentifier implements Comparable mIdentifiers; /** @@ -50,14 +50,14 @@ public class IswUniqueId extends LtrNetIswMessage return LtrNetMessageType.ISW_UNIQUE_ID; } - public UniqueIdentifier getUniqueID() + public LtrNetRadioIdentifier getUniqueID() { - if(mUniqueIdentifier == null) + if(mLtrNetRadioIdentifier == null) { - mUniqueIdentifier = UniqueIdentifier.createFrom(getMessage().getInt(SIXTEEN_BITS)); + mLtrNetRadioIdentifier = LtrNetRadioIdentifier.createFrom(getMessage().getInt(SIXTEEN_BITS)); } - return mUniqueIdentifier; + return mLtrNetRadioIdentifier; } diff --git a/src/main/java/io/github/dsheirer/module/decode/ltrnet/message/osw/RegistrationAccept.java b/src/main/java/io/github/dsheirer/module/decode/ltrnet/message/osw/RegistrationAccept.java index b63b3afc..b4ee1a81 100644 --- a/src/main/java/io/github/dsheirer/module/decode/ltrnet/message/osw/RegistrationAccept.java +++ b/src/main/java/io/github/dsheirer/module/decode/ltrnet/message/osw/RegistrationAccept.java @@ -22,7 +22,7 @@ package io.github.dsheirer.module.decode.ltrnet.message.osw; import io.github.dsheirer.bits.CorrectedBinaryMessage; import io.github.dsheirer.identifier.Identifier; import io.github.dsheirer.module.decode.ltrnet.LtrNetMessageType; -import io.github.dsheirer.module.decode.ltrnet.identifier.UniqueIdentifier; +import io.github.dsheirer.module.decode.ltrnet.identifier.LtrNetRadioIdentifier; import java.util.ArrayList; import java.util.List; @@ -32,7 +32,7 @@ import java.util.List; */ public class RegistrationAccept extends LtrNetOswMessage { - private UniqueIdentifier mUniqueIdentifier; + private LtrNetRadioIdentifier mLtrNetRadioIdentifier; private List mIdentifiers; /** @@ -49,14 +49,14 @@ public class RegistrationAccept extends LtrNetOswMessage return LtrNetMessageType.OSW_REGISTRATION_ACCEPT; } - public UniqueIdentifier getUniqueID() + public LtrNetRadioIdentifier getUniqueID() { - if(mUniqueIdentifier == null) + if(mLtrNetRadioIdentifier == null) { - mUniqueIdentifier = UniqueIdentifier.createTo(getMessage().getInt(SIXTEEN_BITS)); + mLtrNetRadioIdentifier = LtrNetRadioIdentifier.createTo(getMessage().getInt(SIXTEEN_BITS)); } - return mUniqueIdentifier; + return mLtrNetRadioIdentifier; } diff --git a/src/main/java/io/github/dsheirer/playlist/PlaylistManager.java b/src/main/java/io/github/dsheirer/playlist/PlaylistManager.java index 05755b9a..1bde42fd 100644 --- a/src/main/java/io/github/dsheirer/playlist/PlaylistManager.java +++ b/src/main/java/io/github/dsheirer/playlist/PlaylistManager.java @@ -51,7 +51,7 @@ public class PlaylistManager implements Listener { private final static Logger mLog = LoggerFactory.getLogger(PlaylistManager.class); - public static final int PLAYLIST_CURRENT_VERSION = 2; + public static final int PLAYLIST_CURRENT_VERSION = 3; private AliasModel mAliasModel; private BroadcastModel mBroadcastModel; diff --git a/src/main/java/io/github/dsheirer/playlist/PlaylistUpdater.java b/src/main/java/io/github/dsheirer/playlist/PlaylistUpdater.java index 0b907961..9add67fd 100644 --- a/src/main/java/io/github/dsheirer/playlist/PlaylistUpdater.java +++ b/src/main/java/io/github/dsheirer/playlist/PlaylistUpdater.java @@ -27,8 +27,9 @@ import io.github.dsheirer.alias.id.legacy.fleetsync.FleetsyncID; import io.github.dsheirer.alias.id.legacy.mdc.MDC1200ID; import io.github.dsheirer.alias.id.legacy.mpt1327.MPT1327ID; import io.github.dsheirer.alias.id.legacy.talkgroup.LegacyTalkgroupID; -import io.github.dsheirer.alias.id.mobileID.Min; +import io.github.dsheirer.alias.id.legacy.mobileID.Min; import io.github.dsheirer.alias.id.talkgroup.Talkgroup; +import io.github.dsheirer.alias.id.legacy.uniqueID.UniqueID; import io.github.dsheirer.controller.channel.Channel; import io.github.dsheirer.module.log.EventLogType; import io.github.dsheirer.module.log.config.EventLogConfiguration; @@ -77,10 +78,12 @@ public class PlaylistUpdater switch(playlist.getVersion()) { case 1: + case 2: mLog.info("Updating playlist from version [1] to version [" + PlaylistManager.PLAYLIST_CURRENT_VERSION + "]"); removeVersion1AudioRecordType(playlist); removeVersion1BinaryMessageLogger(playlist); removeVersion1NonRecordableAliasIdentifiers(playlist); + removeVersion1SiteIdentifiers(playlist); updateVersion1Talkgroups(playlist); updated = true; break; @@ -184,7 +187,34 @@ public class PlaylistUpdater } /** - * Converts legacy version 1talkgroups to the new talkgroup format. Previously, each protocol had a talkgroup + * Removes site identifiers from all aliases. These are no longer supported + */ + private static void removeVersion1SiteIdentifiers(PlaylistV2 playlist) + { + int removed = 0; + + for(Alias alias : playlist.getAliases()) + { + Iterator it = alias.getId().iterator(); + + while(it.hasNext()) + { + if(it.next().getType() == AliasIDType.SITE) + { + it.remove(); + removed++; + } + } + } + + if(removed > 0) + { + mLog.info("Removed [" + removed + "] site identifiers from aliases"); + } + } + + /** + * Converts legacy version 1 talkgroups to the new talkgroup format. Previously, each protocol had a talkgroup * flavor and now there is a generic talkgroup identifier with a protocol specifier. * * @param playlist to update @@ -426,6 +456,12 @@ public class PlaylistUpdater } } break; + case LTR_NET_UID: + int uid = ((UniqueID)next).getUid(); + toAdd.add(new Talkgroup(Protocol.LTR_NET, uid)); + it.remove(); + updated++; + break; } }