From c03199f7e5643160523d8e413f06c70d170b0451 Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Sun, 28 Dec 2014 14:46:20 -0500 Subject: [PATCH] Update directory to mpw.d and fix issue that caused only one user to be visible in the drop-down. --- .../com/lyndir/masterpassword/model/User.java | 22 +++++++++- .../lyndir/masterpassword/gui/ModelSite.java | 5 +++ .../lyndir/masterpassword/gui/ModelUser.java | 4 +- .../com/lyndir/masterpassword/gui/User.java | 17 +++++--- .../Java/masterpassword-model/pom.xml | 7 ++++ .../lyndir/masterpassword/model/MPSite.java | 40 +++++++++++++++---- .../masterpassword/model/MPSiteResult.java | 20 ++++++++++ .../model/MPSiteUnmarshaller.java | 7 ++-- .../lyndir/masterpassword/model/MPUser.java | 28 ++++++++++++- .../model/MPUserFileManager.java | 12 +++++- .../masterpassword/model/MPUserManager.java | 10 +---- 11 files changed, 144 insertions(+), 28 deletions(-) diff --git a/MasterPassword/Java/masterpassword-android/src/main/java/com/lyndir/masterpassword/model/User.java b/MasterPassword/Java/masterpassword-android/src/main/java/com/lyndir/masterpassword/model/User.java index e396685a..9568f9fc 100644 --- a/MasterPassword/Java/masterpassword-android/src/main/java/com/lyndir/masterpassword/model/User.java +++ b/MasterPassword/Java/masterpassword-android/src/main/java/com/lyndir/masterpassword/model/User.java @@ -1,12 +1,17 @@ package com.lyndir.masterpassword.model; +import static com.lyndir.lhunath.opal.system.util.StringUtils.strf; + +import java.util.Objects; + + /** * @author lhunath, 2014-08-20 */ public class User { private String name; - private Avatar avatar; + private Avatar avatar; public User(final String name, final Avatar avatar) { this.name = name; @@ -20,4 +25,19 @@ public class User { public Avatar getAvatar() { return avatar; } + + @Override + public boolean equals(final Object obj) { + return this == obj || obj instanceof User && name.equals( ((User) obj).name ); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public String toString() { + return strf( "{User: %s}", name ); + } } diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelSite.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelSite.java index 1105cace..1a4f9d85 100644 --- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelSite.java +++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelSite.java @@ -48,4 +48,9 @@ public class ModelSite extends Site { MPUserFileManager.get().save(); } } + + public void use() { + model.updateLastUsed(); + MPUserFileManager.get().save(); + } } diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelUser.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelUser.java index a21fe83d..3dbca406 100644 --- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelUser.java +++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/ModelUser.java @@ -4,6 +4,7 @@ import static com.lyndir.lhunath.opal.system.util.StringUtils.strf; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; +import com.lyndir.lhunath.opal.system.util.ObjectUtils; import com.lyndir.masterpassword.MasterKey; import com.lyndir.masterpassword.model.*; import javax.annotation.Nullable; @@ -76,7 +77,8 @@ public class ModelUser extends User { @Override public void addSite(final Site site) { - model.addSite( new MPSite( site.getSiteName(), site.getSiteType(), site.getSiteCounter() ) ); + model.addSite( new MPSite( model, site.getSiteName(), site.getSiteType(), site.getSiteCounter() ) ); + model.updateLastUsed(); MPUserFileManager.get().save(); } diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/User.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/User.java index 40eb7b92..4c8573a1 100644 --- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/User.java +++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/gui/User.java @@ -3,7 +3,9 @@ package com.lyndir.masterpassword.gui; import static com.lyndir.lhunath.opal.system.util.StringUtils.*; import com.lyndir.masterpassword.MasterKey; +import com.lyndir.masterpassword.model.MPUser; import java.security.KeyException; +import java.util.Objects; import javax.annotation.Nonnull; @@ -38,17 +40,22 @@ public abstract class User { return key; } + public abstract Iterable findSitesByName(final String siteName); + + public abstract void addSite(final Site site); + + @Override + public boolean equals(final Object obj) { + return this == obj || obj instanceof User && Objects.equals( getFullName(), ((User) obj).getFullName() ); + } + @Override public int hashCode() { - return getFullName().hashCode(); + return Objects.hashCode( getFullName() ); } @Override public String toString() { return getFullName(); } - - public abstract Iterable findSitesByName(final String siteName); - - public abstract void addSite(final Site site); } diff --git a/MasterPassword/Java/masterpassword-model/pom.xml b/MasterPassword/Java/masterpassword-model/pom.xml index 6cad040f..395424a0 100644 --- a/MasterPassword/Java/masterpassword-model/pom.xml +++ b/MasterPassword/Java/masterpassword-model/pom.xml @@ -27,6 +27,13 @@ GIT-SNAPSHOT + + com.google.auto.value + auto-value + 1.0-rc1 + provided + + org.testng diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSite.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSite.java index 7fd09f7e..87b36584 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSite.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSite.java @@ -4,6 +4,7 @@ import static com.lyndir.lhunath.opal.system.util.ObjectUtils.ifNotNullElse; import static com.lyndir.lhunath.opal.system.util.StringUtils.strf; import com.lyndir.masterpassword.*; +import java.util.Objects; import javax.annotation.Nullable; import org.joda.time.DateTime; import org.joda.time.Instant; @@ -17,7 +18,8 @@ public class MPSite { public static final MPSiteType DEFAULT_TYPE = MPSiteType.GeneratedLong; public static final int DEFAULT_COUNTER = 1; - private int mpVersion; + private final MPUser user; + private int mpVersion; private Instant lastUsed; private String siteName; private MPSiteType siteType; @@ -25,11 +27,12 @@ public class MPSite { private int uses; private String loginName; - public MPSite(final String siteName) { - this( siteName, DEFAULT_TYPE, DEFAULT_COUNTER ); + public MPSite(final MPUser user, final String siteName) { + this( user, siteName, DEFAULT_TYPE, DEFAULT_COUNTER ); } - public MPSite(final String siteName, final MPSiteType siteType, final int siteCounter) { + public MPSite(final MPUser user, final String siteName, final MPSiteType siteType, final int siteCounter) { + this.user = user; this.mpVersion = MasterKey.ALGORITHM; this.lastUsed = new Instant(); this.siteName = siteName; @@ -37,8 +40,9 @@ public class MPSite { this.siteCounter = siteCounter; } - protected MPSite(final int mpVersion, final Instant lastUsed, final String siteName, final MPSiteType siteType, final int siteCounter, - final int uses, final String loginName, final String importContent) { + protected MPSite(final MPUser user, final int mpVersion, final Instant lastUsed, final String siteName, final MPSiteType siteType, final int siteCounter, + final int uses, final String loginName, final String importContent) { + this.user = user; this.mpVersion = mpVersion; this.lastUsed = lastUsed; this.siteName = siteName; @@ -56,6 +60,10 @@ public class MPSite { return masterKey.encode( siteName, siteType, siteCounter, variant, context ); } + public MPUser getUser() { + return user; + } + @Nullable protected String exportContent() { return null; @@ -73,8 +81,9 @@ public class MPSite { return lastUsed; } - public void setLastUsed(final Instant lastUsed) { - this.lastUsed = lastUsed; + public void updateLastUsed() { + lastUsed = new Instant(); + user.updateLastUsed(); } public String getSiteName() { @@ -116,4 +125,19 @@ public class MPSite { public void setLoginName(final String loginName) { this.loginName = loginName; } + + @Override + public boolean equals(final Object obj) { + return this == obj || obj instanceof MPSite && Objects.equals( siteName, ((MPSite) obj).siteName ); + } + + @Override + public int hashCode() { + return Objects.hashCode( siteName ); + } + + @Override + public String toString() { + return strf( "{MPSite: %s}", siteName ); + } } diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteResult.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteResult.java index 95628ede..50096d83 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteResult.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteResult.java @@ -1,5 +1,10 @@ package com.lyndir.masterpassword.model; +import static com.lyndir.lhunath.opal.system.util.StringUtils.strf; + +import java.util.Objects; + + /** * @author lhunath, 14-12-07 */ @@ -14,4 +19,19 @@ public class MPSiteResult { public MPSite getSite() { return site; } + + @Override + public boolean equals(final Object obj) { + return this == obj || obj instanceof MPSiteResult && Objects.equals( site, ((MPSiteResult) obj).site ); + } + + @Override + public int hashCode() { + return Objects.hashCode( site ); + } + + @Override + public String toString() { + return strf( "{MPSiteResult: %s}", site ); + } } diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteUnmarshaller.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteUnmarshaller.java index 0f02be03..1e104964 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteUnmarshaller.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPSiteUnmarshaller.java @@ -4,7 +4,6 @@ import static com.lyndir.lhunath.opal.system.util.ObjectUtils.*; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; import com.google.common.io.CharStreams; import com.lyndir.lhunath.opal.system.CodeUtils; import com.lyndir.lhunath.opal.system.logging.Logger; @@ -123,7 +122,8 @@ public class MPSiteUnmarshaller { MPSite site; switch (importFormat) { case 0: - site = new MPSite( ConversionUtils.toIntegerNN( siteMatcher.group( 4 ).replace( ":", "" ) ), // + site = new MPSite( user, // + ConversionUtils.toIntegerNN( siteMatcher.group( 4 ).replace( ":", "" ) ), // rfc3339.parseDateTime( siteMatcher.group( 1 ) ).toInstant(), // siteMatcher.group( 5 ), // MPSiteType.forType( ConversionUtils.toIntegerNN( siteMatcher.group( 3 ) ) ), @@ -134,7 +134,8 @@ public class MPSiteUnmarshaller { break; case 1: - site = new MPSite( ConversionUtils.toIntegerNN( siteMatcher.group( 4 ).replace( ":", "" ) ), // + site = new MPSite( user, // + ConversionUtils.toIntegerNN( siteMatcher.group( 4 ).replace( ":", "" ) ), // rfc3339.parseDateTime( siteMatcher.group( 1 ) ).toInstant(), // siteMatcher.group( 7 ), // MPSiteType.forType( ConversionUtils.toIntegerNN( siteMatcher.group( 3 ) ) ), diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUser.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUser.java index a6bd2abb..ce6f7d14 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUser.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUser.java @@ -1,5 +1,7 @@ package com.lyndir.masterpassword.model; +import static com.lyndir.lhunath.opal.system.util.StringUtils.strf; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.lyndir.lhunath.opal.system.CodeUtils; @@ -11,7 +13,7 @@ import org.joda.time.*; /** * @author lhunath, 14-12-07 */ -public class MPUser { +public class MPUser implements Comparable { private final String fullName; private final Collection sites = Sets.newHashSet(); @@ -98,4 +100,28 @@ public class MPUser { public Iterable getSites() { return sites; } + + @Override + public boolean equals(final Object obj) { + return this == obj || obj instanceof MPUser && Objects.equals( fullName, ((MPUser) obj).fullName ); + } + + @Override + public int hashCode() { + return Objects.hashCode( fullName ); + } + + @Override + public String toString() { + return strf( "{MPUser: %s}", fullName ); + } + + @Override + public int compareTo(final MPUser o) { + int comparison = lastUsed.compareTo( o.lastUsed ); + if (comparison == 0) + comparison = fullName.compareTo( o.fullName ); + + return comparison; + } } diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserFileManager.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserFileManager.java index 7f78f6e0..7c0a1674 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserFileManager.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserFileManager.java @@ -15,7 +15,17 @@ public class MPUserFileManager extends MPUserManager { @SuppressWarnings("UnusedDeclaration") private static final Logger logger = Logger.get( MPUserFileManager.class ); - private static final MPUserFileManager instance = create( new File( System.getProperty( "user.home" ), ".mpwrc" ) ); + private static final File mpwd = new File( System.getProperty( "user.home" ), ".mpw.d" ); + private static final MPUserFileManager instance; + + static { + File mpwrc = new File( System.getProperty( "user.home" ), ".mpwrc" ); + if (mpwrc.exists() && !mpwd.exists()) + if (!mpwrc.renameTo( mpwd )) + logger.err( "Couldn't migrate: %s -> %s", mpwrc, mpwd ); + + instance = create( mpwd ); + } private final File userFilesDirectory; diff --git a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserManager.java b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserManager.java index ae6cd01d..8c59763a 100644 --- a/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserManager.java +++ b/MasterPassword/Java/masterpassword-model/src/main/java/com/lyndir/masterpassword/model/MPUserManager.java @@ -1,7 +1,6 @@ package com.lyndir.masterpassword.model; -import com.google.common.collect.FluentIterable; -import com.google.common.collect.Maps; +import com.google.common.collect.*; import java.util.*; @@ -23,12 +22,7 @@ public abstract class MPUserManager { } public SortedSet getUsers() { - return FluentIterable.from( usersByName.values() ).toSortedSet( new Comparator() { - @Override - public int compare(final MPUser user1, final MPUser user2) { - return user1.getLastUsed().compareTo( user2.getLastUsed() ); - } - } ); + return FluentIterable.from( usersByName.values() ).toSortedSet( Ordering.natural() ); } public void addUser(final MPUser user) {