Skip to content

Commit 9502ca3

Browse files
DSheirerDennis Sheirer
andauthored
#1547 Updates playlist alias editor to make add/delete operations more efficient. (#1560)
Co-authored-by: Dennis Sheirer <[email protected]>
1 parent 7762900 commit 9502ca3

File tree

3 files changed

+73
-49
lines changed

3 files changed

+73
-49
lines changed

src/main/java/io/github/dsheirer/alias/AliasModel.java

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* *****************************************************************************
3-
* Copyright (C) 2014-2022 Dennis Sheirer
3+
* Copyright (C) 2014-2023 Dennis Sheirer
44
*
55
* This program is free software: you can redistribute it and/or modify
66
* it under the terms of the GNU General Public License as published by
@@ -23,17 +23,16 @@
2323
import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
2424
import io.github.dsheirer.identifier.IdentifierCollection;
2525
import io.github.dsheirer.identifier.configuration.AliasListConfigurationIdentifier;
26-
import javafx.collections.FXCollections;
27-
import javafx.collections.ListChangeListener;
28-
import javafx.collections.ObservableList;
29-
import org.slf4j.Logger;
30-
import org.slf4j.LoggerFactory;
31-
3226
import java.util.ArrayList;
3327
import java.util.Collections;
3428
import java.util.HashMap;
3529
import java.util.List;
3630
import java.util.Map;
31+
import javafx.collections.FXCollections;
32+
import javafx.collections.ListChangeListener;
33+
import javafx.collections.ObservableList;
34+
import org.slf4j.Logger;
35+
import org.slf4j.LoggerFactory;
3736

3837
/**
3938
* Alias Model contains all aliases and is responsible for creation and management of alias lists. Alias lists are a
@@ -184,10 +183,8 @@ public List<String> getGroupNames()
184183
*/
185184
public void addAliases(List<Alias> aliases)
186185
{
187-
for(Alias alias : aliases)
188-
{
189-
addAlias(alias);
190-
}
186+
removeAliases(aliases);
187+
mAliases.addAll(aliases);
191188
}
192189

193190
/**
@@ -241,6 +238,26 @@ public void removeAlias(Alias alias)
241238
}
242239
}
243240

241+
/**
242+
* Removes the list of aliases from this model and any alias lists that might contain each alias.
243+
* @param aliases
244+
*/
245+
public void removeAliases(List<Alias> aliases)
246+
{
247+
if(aliases != null && !aliases.isEmpty())
248+
{
249+
mAliases.removeAll(aliases);
250+
251+
for(Alias alias: aliases)
252+
{
253+
if(hasAliasList(alias.getAliasListName()))
254+
{
255+
getAliasList(alias.getAliasListName()).removeAlias(alias);
256+
}
257+
}
258+
}
259+
}
260+
244261
/**
245262
* Retrieves all aliases that match the alias list and have at least one alias ID of the specified type
246263
* @param aliasListName to search

src/main/java/io/github/dsheirer/gui/playlist/alias/AliasConfigurationEditor.java

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* *****************************************************************************
3-
* Copyright (C) 2014-2021 Dennis Sheirer
3+
* Copyright (C) 2014-2023 Dennis Sheirer
44
*
55
* This program is free software: you can redistribute it and/or modify
66
* it under the terms of the GNU General Public License as published by
@@ -19,15 +19,6 @@
1919

2020
package io.github.dsheirer.gui.playlist.alias;
2121

22-
import java.util.ArrayList;
23-
import java.util.List;
24-
import java.util.Optional;
25-
import java.util.function.Predicate;
26-
27-
import org.controlsfx.control.textfield.TextFields;
28-
import org.slf4j.Logger;
29-
import org.slf4j.LoggerFactory;
30-
3122
import io.github.dsheirer.alias.Alias;
3223
import io.github.dsheirer.alias.AliasFactory;
3324
import io.github.dsheirer.alias.AliasList;
@@ -37,6 +28,10 @@
3728
import io.github.dsheirer.icon.Icon;
3829
import io.github.dsheirer.playlist.PlaylistManager;
3930
import io.github.dsheirer.preference.UserPreferences;
31+
import java.util.ArrayList;
32+
import java.util.List;
33+
import java.util.Optional;
34+
import java.util.function.Predicate;
4035
import javafx.application.Platform;
4136
import javafx.beans.property.ReadOnlyObjectWrapper;
4237
import javafx.beans.value.ObservableValue;
@@ -74,6 +69,9 @@
7469
import jiconfont.IconCode;
7570
import jiconfont.icons.font_awesome.FontAwesome;
7671
import jiconfont.javafx.IconNode;
72+
import org.controlsfx.control.textfield.TextFields;
73+
import org.slf4j.Logger;
74+
import org.slf4j.LoggerFactory;
7775

7876
/**
7977
* Editor for aliases
@@ -532,11 +530,10 @@ private Button getDeleteAliasButton()
532530
mDeleteAliasButton.setMaxWidth(Double.MAX_VALUE);
533531
mDeleteAliasButton.setOnAction(event ->
534532
{
535-
536-
boolean multiple = getAliasTableView().getSelectionModel().getSelectedItems().size() > 1;
533+
int count = getAliasTableView().getSelectionModel().getSelectedItems().size();
537534

538535
Alert alert = new Alert(Alert.AlertType.CONFIRMATION,
539-
"Do you want to delete the selected alias" + (multiple ? "es?" : "?"),
536+
"Do you want to delete [" + count + "] selected alias" + ((count > 1) ? "es?" : "?"),
540537
ButtonType.NO, ButtonType.YES);
541538
alert.setTitle("Delete Alias");
542539
alert.setHeaderText("Are you sure?");
@@ -547,11 +544,7 @@ private Button getDeleteAliasButton()
547544
if(result.get() == ButtonType.YES)
548545
{
549546
List<Alias> selectedAliases = new ArrayList<>(getAliasTableView().getSelectionModel().getSelectedItems());
550-
551-
for(Alias selected : selectedAliases)
552-
{
553-
mPlaylistManager.getAliasModel().removeAlias(selected);
554-
}
547+
mPlaylistManager.getAliasModel().removeAliases(selectedAliases);
555548
}
556549
});
557550
}

src/main/java/io/github/dsheirer/gui/playlist/radioreference/SystemTalkgroupSelectionEditor.java

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
* *****************************************************************************
3-
* Copyright (C) 2014-2020 Dennis Sheirer
3+
* Copyright (C) 2014-2023 Dennis Sheirer
44
*
55
* This program is free software: you can redistribute it and/or modify
66
* it under the terms of the GNU General Public License as published by
@@ -34,6 +34,12 @@
3434
import io.github.dsheirer.rrapi.type.System;
3535
import io.github.dsheirer.rrapi.type.Talkgroup;
3636
import io.github.dsheirer.rrapi.type.TalkgroupCategory;
37+
import java.util.ArrayList;
38+
import java.util.Collections;
39+
import java.util.Comparator;
40+
import java.util.List;
41+
import java.util.Optional;
42+
import java.util.function.Predicate;
3743
import javafx.animation.RotateTransition;
3844
import javafx.beans.property.SimpleStringProperty;
3945
import javafx.beans.property.StringProperty;
@@ -71,12 +77,6 @@
7177
import org.slf4j.Logger;
7278
import org.slf4j.LoggerFactory;
7379

74-
import java.util.Collections;
75-
import java.util.Comparator;
76-
import java.util.List;
77-
import java.util.Optional;
78-
import java.util.function.Predicate;
79-
8080
public class SystemTalkgroupSelectionEditor extends GridPane
8181
{
8282
private static final Logger mLog = LoggerFactory.getLogger(SystemTalkgroupSelectionEditor.class);
@@ -323,13 +323,20 @@ private Button getImportAllTalkgroupsButton()
323323
}
324324
else
325325
{
326+
List<Talkgroup> aliasesToCreate = new ArrayList<>();
327+
326328
for(AliasedTalkgroup aliasedTalkgroup : mTalkgroupFilteredList)
327329
{
328330
if(!aliasedTalkgroup.hasAlias())
329331
{
330-
createAlias(aliasedTalkgroup.getTalkgroup());
332+
aliasesToCreate.add(aliasedTalkgroup.getTalkgroup());
331333
}
332334
}
335+
336+
if(!aliasesToCreate.isEmpty())
337+
{
338+
createAliases(aliasesToCreate);
339+
}
333340
}
334341
});
335342
}
@@ -338,24 +345,31 @@ private Button getImportAllTalkgroupsButton()
338345
}
339346

340347
/**
341-
* Creates an alias for the specified talkgroup and adds it to the currently selected alias list
342-
* @param talkgroup to alias
348+
* Creates an alias for each of the specified talkgroups and adds it to the currently selected alias list
349+
* @param talkgroups to alias
343350
*/
344-
public void createAlias(Talkgroup talkgroup)
351+
public void createAliases(List<Talkgroup> talkgroups)
345352
{
346-
TalkgroupCategory talkgroupCategory = getTalkgroupCategory(talkgroup);
347-
String group = (talkgroupCategory != null ? talkgroupCategory.getName() : null);
348-
Alias alias = getRadioReferenceDecoder().createAlias(talkgroup, getCurrentSystem(),
349-
getAliasListNameComboBox().getSelectionModel().getSelectedItem(), group);
353+
List<Alias> createdAliases = new ArrayList<>();
350354

351-
if(getEncryptedAsDoNotMonitorCheckBox().selectedProperty().get() &&
352-
TalkgroupEncryption.lookup(talkgroup.getEncryptionState()) == TalkgroupEncryption.FULL)
355+
for(Talkgroup talkgroup: talkgroups)
353356
{
354-
int priority = io.github.dsheirer.alias.id.priority.Priority.DO_NOT_MONITOR;
355-
alias.addAliasID(new io.github.dsheirer.alias.id.priority.Priority(priority));
357+
TalkgroupCategory talkgroupCategory = getTalkgroupCategory(talkgroup);
358+
String group = (talkgroupCategory != null ? talkgroupCategory.getName() : null);
359+
Alias alias = getRadioReferenceDecoder().createAlias(talkgroup, getCurrentSystem(),
360+
getAliasListNameComboBox().getSelectionModel().getSelectedItem(), group);
361+
362+
if(getEncryptedAsDoNotMonitorCheckBox().selectedProperty().get() &&
363+
TalkgroupEncryption.lookup(talkgroup.getEncryptionState()) == TalkgroupEncryption.FULL)
364+
{
365+
int priority = io.github.dsheirer.alias.id.priority.Priority.DO_NOT_MONITOR;
366+
alias.addAliasID(new io.github.dsheirer.alias.id.priority.Priority(priority));
367+
}
368+
369+
createdAliases.add(alias);
356370
}
357371

358-
mPlaylistManager.getAliasModel().addAlias(alias);
372+
mPlaylistManager.getAliasModel().addAliases(createdAliases);
359373
}
360374

361375
/**

0 commit comments

Comments
 (0)