diff options
Diffstat (limited to 'src')
11 files changed, 113 insertions, 120 deletions
diff --git a/src/com/isode/stroke/avatars/AvatarManager.java b/src/com/isode/stroke/avatars/AvatarManager.java index 8bb8e71..10b2777 100755 --- a/src/com/isode/stroke/avatars/AvatarManager.java +++ b/src/com/isode/stroke/avatars/AvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -11,14 +11,11 @@ package com.isode.stroke.avatars; -import java.nio.file.Path; import com.isode.stroke.jid.JID; -import com.isode.stroke.base.ByteArray; import com.isode.stroke.signals.Signal1; -public interface AvatarManager { +public abstract class AvatarManager { - public ByteArray getAvatar(JID jid); - public Path getAvatarPath(JID jid); + public abstract String getAvatar(JID jid); public Signal1<JID> onAvatarChanged = new Signal1<JID>(); }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/AvatarManagerImpl.java b/src/com/isode/stroke/avatars/AvatarManagerImpl.java index b324b3e..7803670 100755 --- a/src/com/isode/stroke/avatars/AvatarManagerImpl.java +++ b/src/com/isode/stroke/avatars/AvatarManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -11,30 +11,22 @@ package com.isode.stroke.avatars; -import com.isode.stroke.avatars.AvatarManager; -import com.isode.stroke.avatars.CombinedAvatarProvider; -import com.isode.stroke.muc.MUCRegistry; -import com.isode.stroke.avatars.AvatarStorage; import com.isode.stroke.client.StanzaChannel; -import com.isode.stroke.vcards.VCardManager; -import com.isode.stroke.avatars.VCardUpdateAvatarManager; -import com.isode.stroke.avatars.VCardAvatarManager; -import com.isode.stroke.avatars.OfflineAvatarManager; import com.isode.stroke.crypto.CryptoProvider; -import com.isode.stroke.base.ByteArray; import com.isode.stroke.jid.JID; -import com.isode.stroke.signals.Slot1; -import java.nio.file.*; +import com.isode.stroke.muc.MUCRegistry; import com.isode.stroke.signals.SignalConnection; +import com.isode.stroke.signals.Slot1; +import com.isode.stroke.vcards.VCardManager; -public class AvatarManagerImpl implements AvatarManager { +public class AvatarManagerImpl extends AvatarManager { - private CombinedAvatarProvider combinedAvatarProvider = new CombinedAvatarProvider(); + private final CombinedAvatarProvider combinedAvatarProvider = new CombinedAvatarProvider(); private AvatarStorage avatarStorage; private VCardUpdateAvatarManager vcardUpdateAvatarManager; private VCardAvatarManager vcardAvatarManager; private OfflineAvatarManager offlineAvatarManager; - private SignalConnection onAvatarChangedConnection; + private final SignalConnection onAvatarChangedConnection; public AvatarManagerImpl(VCardManager vcardManager, StanzaChannel stanzaChannel, AvatarStorage avatarStorage, CryptoProvider crypto) { this(vcardManager, stanzaChannel, avatarStorage, crypto, null); @@ -52,27 +44,22 @@ public class AvatarManagerImpl implements AvatarManager { combinedAvatarProvider.addProvider(offlineAvatarManager); onAvatarChangedConnection = combinedAvatarProvider.onAvatarChanged.connect(new Slot1<JID>() { - - public void call(JID p1) { - handleCombinedAvatarChanged(p1); - } + @Override public void call(JID p1) {handleCombinedAvatarChanged(p1);} }); } - - public Path getAvatarPath(JID jid) { - String hash = combinedAvatarProvider.getAvatarHash(jid); - if (hash != null && hash.length() != 0) { - return avatarStorage.getAvatarPath(hash); - } - return Paths.get(""); + + public void delete() { + onAvatarChangedConnection.disconnect(); + combinedAvatarProvider.delete(); } - public ByteArray getAvatar(JID jid) { + @Override + public String getAvatar(JID jid) { String hash = combinedAvatarProvider.getAvatarHash(jid); - if (hash != null && hash.length() != 0) { - return avatarStorage.getAvatar(hash); + if (hash != null && hash.length() != 0 && avatarStorage.hasAvatar(hash)) { + return hash; } - return new ByteArray(); + return null; } private void handleCombinedAvatarChanged(JID jid) { diff --git a/src/com/isode/stroke/avatars/AvatarMemoryStorage.java b/src/com/isode/stroke/avatars/AvatarMemoryStorage.java index a3ad6f0..10079ba 100755 --- a/src/com/isode/stroke/avatars/AvatarMemoryStorage.java +++ b/src/com/isode/stroke/avatars/AvatarMemoryStorage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -14,8 +14,7 @@ package com.isode.stroke.avatars; import com.isode.stroke.avatars.AvatarStorage; import com.isode.stroke.base.ByteArray; import com.isode.stroke.jid.JID; -import java.nio.file.*; -import java.io.File; + import java.util.*; public class AvatarMemoryStorage implements AvatarStorage { @@ -23,35 +22,38 @@ public class AvatarMemoryStorage implements AvatarStorage { private Map<String, ByteArray> avatars = new HashMap<String, ByteArray>(); private Map<JID, String> jidAvatars = new HashMap<JID, String>(); + @Override public boolean hasAvatar(String hash) { return avatars.containsKey(hash); } + @Override public void addAvatar(String hash, ByteArray avatar) { avatars.put(hash, avatar); } - public ByteArray getAvatar(String hash) { - if(avatars.containsKey(hash)) { - return avatars.get(hash); - } else { - return new ByteArray(); - } - } - - public Path getAvatarPath(String hash) { - return (Paths.get("/avatars" + File.separator + hash)).toAbsolutePath(); + @Override + public String getAvatar(String hash) { + return avatars.containsKey(hash) ? hash : null; } + @Override public void setAvatarForJID(JID jid, String hash) { jidAvatars.put(jid, hash); } + @Override public String getAvatarForJID(JID jid) { if(jidAvatars.containsKey(jid)) { return jidAvatars.get(jid); } else { - return ""; + return null; } } + + // Used for test cases only + public ByteArray getAvatarBytes(String hash) { + return avatars.get(hash); + } + }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/AvatarProvider.java b/src/com/isode/stroke/avatars/AvatarProvider.java index 31fabb4..4618f19 100755 --- a/src/com/isode/stroke/avatars/AvatarProvider.java +++ b/src/com/isode/stroke/avatars/AvatarProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -14,8 +14,10 @@ package com.isode.stroke.avatars; import com.isode.stroke.signals.Signal1; import com.isode.stroke.jid.JID; -public interface AvatarProvider { +public abstract class AvatarProvider { + + public abstract String getAvatarHash(JID jid); + public abstract void delete(); - public String getAvatarHash(JID jid); public Signal1<JID> onAvatarChanged = new Signal1<JID>(); }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/AvatarStorage.java b/src/com/isode/stroke/avatars/AvatarStorage.java index 98f7e6f..2803006 100755 --- a/src/com/isode/stroke/avatars/AvatarStorage.java +++ b/src/com/isode/stroke/avatars/AvatarStorage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -13,15 +13,12 @@ package com.isode.stroke.avatars; import com.isode.stroke.base.ByteArray; import com.isode.stroke.jid.JID; -import java.nio.file.Path; public interface AvatarStorage { public boolean hasAvatar(String hash); public void addAvatar(String hash, ByteArray avatar); - public ByteArray getAvatar(String hash); - public Path getAvatarPath(String hash); - + public String getAvatar(String hash); public void setAvatarForJID(JID jid, String hash); public String getAvatarForJID(JID jid); }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/CombinedAvatarProvider.java b/src/com/isode/stroke/avatars/CombinedAvatarProvider.java index 0426bd6..5520736 100755 --- a/src/com/isode/stroke/avatars/CombinedAvatarProvider.java +++ b/src/com/isode/stroke/avatars/CombinedAvatarProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -15,34 +15,39 @@ import com.isode.stroke.avatars.AvatarProvider; import com.isode.stroke.signals.SignalConnection; import com.isode.stroke.signals.Slot1; import com.isode.stroke.jid.JID; + import java.util.logging.Logger; import java.util.*; -public class CombinedAvatarProvider implements AvatarProvider { +public class CombinedAvatarProvider extends AvatarProvider { - private Vector<AvatarProvider> providers = new Vector<AvatarProvider>(); + private final Vector<AvatarProvider> providers = new Vector<AvatarProvider>(); private Map<JID, String> avatars = new HashMap<JID, String>(); - private SignalConnection onAvatarChangedConnection_; + private final Map<AvatarProvider, SignalConnection> onAvatarChangedConnections_ = new HashMap<AvatarProvider, SignalConnection>(); private Logger logger_ = Logger.getLogger(this.getClass().getName()); + @Override public String getAvatarHash(JID jid) { return getCombinedAvatarAndCache(jid); } + private final Slot1<JID> onAvatarChangedSlot = new Slot1<JID>() { + @Override public void call(JID p1) {handleAvatarChanged(p1);} + }; + public void addProvider(AvatarProvider provider) { - onAvatarChangedConnection_ = provider.onAvatarChanged.connect(new Slot1<JID>() { - - public void call(JID p1) { - handleAvatarChanged(p1); - } - }); + if (!onAvatarChangedConnections_.containsKey(provider)) { + onAvatarChangedConnections_.put(provider, provider.onAvatarChanged.connect(onAvatarChangedSlot)); + } providers.add(provider); } - public void removeProvider(AvatarProvider provider) { - while(providers.contains(provider)) { - providers.remove(provider); - onAvatarChangedConnection_.disconnect(); + public void delete() { + for (SignalConnection connection : onAvatarChangedConnections_.values()) { + connection.disconnect(); + } + for (AvatarProvider provider : providers) { + provider.delete(); } } diff --git a/src/com/isode/stroke/avatars/DummyAvatarManager.java b/src/com/isode/stroke/avatars/DummyAvatarManager.java index f1dfe41..e27424b 100755 --- a/src/com/isode/stroke/avatars/DummyAvatarManager.java +++ b/src/com/isode/stroke/avatars/DummyAvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -11,26 +11,13 @@ package com.isode.stroke.avatars; -import com.isode.stroke.avatars.AvatarManager; -import com.isode.stroke.base.ByteArray; import com.isode.stroke.jid.JID; -import java.nio.file.*; -import java.io.File; -import java.util.*; -public class DummyAvatarManager implements AvatarManager { +public class DummyAvatarManager extends AvatarManager { - private Map<JID, ByteArray> avatars = new HashMap<JID, ByteArray>(); - - public Path getAvatarPath(JID j) { - return (Paths.get("/avatars" + File.separator + j.toString())).toAbsolutePath(); + @Override + public String getAvatar(final JID j) { + return null; } - public ByteArray getAvatar(JID jid) { - if(avatars.containsKey(jid)) { - return avatars.get(jid); - } else { - return new ByteArray(); - } - } }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/NullAvatarManager.java b/src/com/isode/stroke/avatars/NullAvatarManager.java index e69ed46..9f53cab 100755 --- a/src/com/isode/stroke/avatars/NullAvatarManager.java +++ b/src/com/isode/stroke/avatars/NullAvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -11,18 +11,12 @@ package com.isode.stroke.avatars; -import com.isode.stroke.avatars.AvatarManager; -import com.isode.stroke.base.ByteArray; import com.isode.stroke.jid.JID; -import java.nio.file.*; -public class NullAvatarManager implements AvatarManager { +public class NullAvatarManager extends AvatarManager { - public Path getAvatarPath(JID j) { - return Paths.get(""); - } - - public ByteArray getAvatar(JID jid) { - return new ByteArray(); + @Override + public String getAvatar(JID j) { + return null; } }
\ No newline at end of file diff --git a/src/com/isode/stroke/avatars/OfflineAvatarManager.java b/src/com/isode/stroke/avatars/OfflineAvatarManager.java index fe5de08..b5c909b 100755 --- a/src/com/isode/stroke/avatars/OfflineAvatarManager.java +++ b/src/com/isode/stroke/avatars/OfflineAvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -15,7 +15,7 @@ import com.isode.stroke.avatars.AvatarProvider; import com.isode.stroke.avatars.AvatarStorage; import com.isode.stroke.jid.JID; -public class OfflineAvatarManager implements AvatarProvider { +public class OfflineAvatarManager extends AvatarProvider { private AvatarStorage avatarStorage; @@ -23,12 +23,17 @@ public class OfflineAvatarManager implements AvatarProvider { this.avatarStorage = avatarStorage; } + @Override + public void delete() { + } + + @Override public String getAvatarHash(JID jid) { return avatarStorage.getAvatarForJID(jid); } public void setAvatar(JID jid, String hash) { - if (!getAvatarHash(jid).equals(hash)) { + if (!hash.equals(getAvatarHash(jid))) { avatarStorage.setAvatarForJID(jid, hash); onAvatarChanged.emit(jid); } diff --git a/src/com/isode/stroke/avatars/VCardAvatarManager.java b/src/com/isode/stroke/avatars/VCardAvatarManager.java index b2efcf2..83c8c64 100755 --- a/src/com/isode/stroke/avatars/VCardAvatarManager.java +++ b/src/com/isode/stroke/avatars/VCardAvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -20,17 +20,19 @@ import com.isode.stroke.avatars.AvatarStorage; import com.isode.stroke.muc.MUCRegistry; import com.isode.stroke.vcards.VCardManager; import com.isode.stroke.signals.Slot2; + import java.util.logging.Logger; + import com.isode.stroke.signals.SignalConnection; -public class VCardAvatarManager implements AvatarProvider { +public class VCardAvatarManager extends AvatarProvider { private VCardManager vcardManager_; private AvatarStorage avatarStorage_; private CryptoProvider crypto_; private MUCRegistry mucRegistry_; - private SignalConnection onVCardChangedConnection_; - private Logger logger_ = Logger.getLogger(this.getClass().getName()); + private final SignalConnection onVCardChangedConnection_; + private final Logger logger_ = Logger.getLogger(this.getClass().getName()); public VCardAvatarManager(VCardManager vcardManager, AvatarStorage avatarStorage, CryptoProvider crypto) { this(vcardManager, avatarStorage, crypto, null); @@ -42,13 +44,19 @@ public class VCardAvatarManager implements AvatarProvider { this.crypto_ = crypto; this.mucRegistry_ = mucRegistry; onVCardChangedConnection_ = vcardManager.onVCardChanged.connect(new Slot2<JID, VCard>() { - + @Override public void call(JID p1, VCard vcard) { handleVCardChanged(p1); } }); } + @Override + public void delete() { + onVCardChangedConnection_.disconnect(); + } + + @Override public String getAvatarHash(JID jid) { JID avatarJID = getAvatarJID(jid); String hash = vcardManager_.getPhotoHash(avatarJID); diff --git a/src/com/isode/stroke/avatars/VCardUpdateAvatarManager.java b/src/com/isode/stroke/avatars/VCardUpdateAvatarManager.java index ce61892..5328fb4 100755 --- a/src/com/isode/stroke/avatars/VCardUpdateAvatarManager.java +++ b/src/com/isode/stroke/avatars/VCardUpdateAvatarManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2014 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -13,6 +13,7 @@ package com.isode.stroke.avatars; import java.util.Map; import java.util.HashMap; + import com.isode.stroke.avatars.AvatarProvider; import com.isode.stroke.jid.JID; import com.isode.stroke.elements.VCard; @@ -20,7 +21,6 @@ import com.isode.stroke.elements.Presence; import com.isode.stroke.elements.ErrorPayload; import com.isode.stroke.elements.VCardUpdate; import com.isode.stroke.client.StanzaChannel; -import com.isode.stroke.vcards.GetVCardRequest; import com.isode.stroke.crypto.CryptoProvider; import com.isode.stroke.stringcodecs.Hexify; import com.isode.stroke.avatars.AvatarStorage; @@ -28,20 +28,21 @@ import com.isode.stroke.muc.MUCRegistry; import com.isode.stroke.vcards.VCardManager; import com.isode.stroke.signals.Slot2; import com.isode.stroke.signals.Slot1; + import java.util.logging.Logger; import com.isode.stroke.signals.SignalConnection; -public class VCardUpdateAvatarManager implements AvatarProvider { +public class VCardUpdateAvatarManager extends AvatarProvider { private VCardManager vcardManager_; private AvatarStorage avatarStorage_; private CryptoProvider crypto_; private MUCRegistry mucRegistry_; - private Map<JID, String> avatarHashes_ = new HashMap<JID, String>(); - private SignalConnection onPresenceReceivedConnection; - private SignalConnection onAvailableChangedConnection; - private SignalConnection onVCardChangedConnection; - private Logger logger_ = Logger.getLogger(this.getClass().getName()); + private final Map<JID, String> avatarHashes_ = new HashMap<JID, String>(); + private final SignalConnection onPresenceReceivedConnection; + private final SignalConnection onAvailableChangedConnection; + private final SignalConnection onVCardChangedConnection; + private final Logger logger_ = Logger.getLogger(this.getClass().getName()); public VCardUpdateAvatarManager(VCardManager vcardManager, StanzaChannel stanzaChannel, AvatarStorage avatarStorage, CryptoProvider crypto) { this(vcardManager, stanzaChannel, avatarStorage, crypto, null); @@ -53,25 +54,33 @@ public class VCardUpdateAvatarManager implements AvatarProvider { this.crypto_ = crypto; this.mucRegistry_ = mucRegistry; onPresenceReceivedConnection = stanzaChannel.onPresenceReceived.connect(new Slot1<Presence>() { - + @Override public void call(Presence p1) { handlePresenceReceived(p1); } }); onAvailableChangedConnection = stanzaChannel.onAvailableChanged.connect(new Slot1<Boolean>() { - + @Override public void call(Boolean b) { handleStanzaChannelAvailableChanged(b); } }); onVCardChangedConnection = vcardManager_.onVCardChanged.connect(new Slot2<JID, VCard>() { - + @Override public void call(JID p1, VCard vcard) { handleVCardChanged(p1, vcard); } }); } + + @Override + public void delete() { + onPresenceReceivedConnection.disconnect(); + onAvailableChangedConnection.disconnect(); + onVCardChangedConnection.disconnect(); + } + @Override public String getAvatarHash(JID jid) { if(avatarHashes_.containsKey(jid)) { return avatarHashes_.get(jid); |