diff --git a/src/main/java/com/tomczarniecki/jpasskeep/Entry.java b/src/main/java/com/tomczarniecki/jpasskeep/Entry.java index 93980f9..197c5a4 100644 --- a/src/main/java/com/tomczarniecki/jpasskeep/Entry.java +++ b/src/main/java/com/tomczarniecki/jpasskeep/Entry.java @@ -27,16 +27,24 @@ */ package com.tomczarniecki.jpasskeep; +import java.util.List; +import java.util.UUID; + import org.apache.commons.lang.builder.EqualsBuilder; public class Entry implements Comparable { + private final String key = UUID.randomUUID().toString(); private String description = ""; private Category category = Category.Home; private String username = ""; private String password = ""; private String notes = ""; + public String getKey() { + return key; + } + public String getDescription() { return description; } @@ -77,6 +85,11 @@ public void setPassword(String password) { this.password = password; } + public List getNotesAsLines() { + String[] lines = notes.split("\\r?\\n"); + return List.of(lines); + } + public String getNotes() { return notes; } diff --git a/src/main/java/com/tomczarniecki/jpasskeep/MainListModel.java b/src/main/java/com/tomczarniecki/jpasskeep/MainListModel.java index 0ffb971..7e38bcf 100644 --- a/src/main/java/com/tomczarniecki/jpasskeep/MainListModel.java +++ b/src/main/java/com/tomczarniecki/jpasskeep/MainListModel.java @@ -29,14 +29,15 @@ import javax.swing.AbstractListModel; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.Map; public class MainListModel extends AbstractListModel { private final List filtered; - private final SortedMap entries; + private final Map entries; private boolean showHome = true; private boolean showWork = true; @@ -44,19 +45,9 @@ public class MainListModel extends AbstractListModel { public MainListModel(List entries) { this.filtered = new ArrayList<>(); - this.entries = new TreeMap<>(); + this.entries = new HashMap<>(); for (Entry entry : entries) { - String key = entry.getDescription(); - if (this.entries.containsKey(key)) { - Entry current = this.entries.get(key); - String notes = current.getNotes(); - notes += "\n--Merged--\n" + entry.getUsername(); - notes += "\n" + entry.getPassword(); - notes += "\n" + entry.getNotes(); - current.setNotes(notes); - } else { - this.entries.put(key, entry); - } + this.entries.put(entry.getKey(), entry); } filter(); } @@ -74,18 +65,20 @@ public Entry getEntry(int index) { } public void setEntry(Entry entry) { - entries.put(entry.getDescription(), entry); + entries.put(entry.getKey(), entry); filter(); } public void removeEntry(int index) { Entry entry = filtered.get(index); - entries.remove(entry.getDescription()); + entries.remove(entry.getKey()); filter(); } public List getEntries() { - return List.copyOf(entries.values()); + List values = new ArrayList<>(entries.values()); + Collections.sort(values); + return values; } public void setShowHome(boolean showHome) { @@ -122,6 +115,7 @@ private void filter() { filtered.add(entry); } } + Collections.sort(filtered); fireContentsChanged(this, 0, filtered.size()); } @@ -134,13 +128,14 @@ private boolean show(Entry entry) { } public ImportState stateForEntry(Entry otherEntry) { - Entry currentEntry = entries.get(otherEntry.getDescription()); - if (currentEntry == null) { - return ImportState.New; - } - if (currentEntry.equals(otherEntry)) { - return ImportState.Equal; + for (Entry entry : entries.values()) { + if (entry.getDescription().equals(otherEntry.getDescription())) { + if (entry.equals(otherEntry)) { + return ImportState.Equal; + } + return ImportState.Changed; + } } - return ImportState.Changed; + return ImportState.New; } }