src/com/beem/project/beem/smack/avatar/AvatarManager.java
author Da Risk <darisk972@gmail.com>
Tue, 26 Oct 2010 00:59:27 +0200
changeset 807 e4b9ec9f30e6
parent 802 20308ad77837
child 808 98d220b7fe9d
permissions -rw-r--r--
javadoc and checstyle
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     1
/*
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     2
    BEEM is a videoconference application on the Android Platform.
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     3
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     4
    Copyright (C) 2009 by Frederic-Charles Barthelery,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     5
                          Jean-Manuel Da Silva,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     6
                          Nikita Kozlov,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     7
                          Philippe Lago,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     8
                          Jean Baptiste Vergely,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
     9
                          Vincent Veronis.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    10
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    11
    This file is part of BEEM.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    12
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    13
    BEEM is free software: you can redistribute it and/or modify
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    14
    it under the terms of the GNU General Public License as published by
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    15
    the Free Software Foundation, either version 3 of the License, or
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    16
    (at your option) any later version.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    17
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    18
    BEEM is distributed in the hope that it will be useful,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    19
    but WITHOUT ANY WARRANTY; without even the implied warranty of
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    20
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    21
    GNU General Public License for more details.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    22
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    23
    You should have received a copy of the GNU General Public License
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    24
    along with BEEM.  If not, see <http://www.gnu.org/licenses/>.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    25
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    26
    Please send bug reports with examples or suggestions to
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    27
    contact@beem-project.com or http://dev.beem-project.com/
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    28
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    29
    Epitech, hereby disclaims all copyright interest in the program "Beem"
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    30
    written by Frederic-Charles Barthelery,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    31
               Jean-Manuel Da Silva,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    32
               Nikita Kozlov,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    33
               Philippe Lago,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    34
               Jean Baptiste Vergely,
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    35
               Vincent Veronis.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    36
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    37
    Nicolas Sadirac, November 26, 2009
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    38
    President of Epitech.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    39
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    40
    Flavien Astraud, November 26, 2009
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    41
    Head of the EIP Laboratory.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    42
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    43
*/
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    44
package com.beem.project.beem.smack.avatar;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    45
802
20308ad77837 Checkstyle and javadoc.
Da Risk <darisk972@gmail.com>
parents: 801
diff changeset
    46
import com.beem.project.beem.smack.avatar.AvatarMetadataExtension.Info;
20308ad77837 Checkstyle and javadoc.
Da Risk <darisk972@gmail.com>
parents: 801
diff changeset
    47
import com.beem.project.beem.smack.pep.PEPListener;
20308ad77837 Checkstyle and javadoc.
Da Risk <darisk972@gmail.com>
parents: 801
diff changeset
    48
import com.beem.project.beem.smack.pep.PepSubManager;
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    49
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    50
import java.io.IOException;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    51
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    52
import java.util.List;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    53
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    54
import org.jivesoftware.smack.Connection;
800
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
    55
import org.jivesoftware.smack.packet.PacketExtension;
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
    56
import org.jivesoftware.smackx.pubsub.Item;
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
    57
import org.jivesoftware.smackx.pubsub.PayloadItem;
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    58
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    59
/**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    60
 * This class deals with the avatar data.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    61
 * It can be configured to auto retrieve the avatar and put it in cache.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    62
 *
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    63
 */
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    64
public class AvatarManager {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    65
800
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
    66
    private PepSubManager mPep;
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    67
    private Connection mCon;
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    68
    private boolean mAutoDownload;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    69
    private AvatarCache mCache;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    70
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    71
    /**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    72
     * Create an AvatarManager.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    73
     *
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    74
     * @param con the connection
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    75
     * @param cache the cache which will store the avatars
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    76
     * @param autoDownload true to enable auto download of avatars
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    77
     */
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    78
    public AvatarManager(final Connection con, final AvatarCache cache, final boolean autoDownload) {
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    79
	mCon = con;
800
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
    80
	mPep = new PepSubManager(mCon);
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    81
	mAutoDownload = autoDownload;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    82
	mCache = cache;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    83
	if (mAutoDownload)
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    84
	    mPep.addPEPListener(new Listener());
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    85
    }
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    86
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    87
    /**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    88
     * Get an avatar from the cache.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    89
     *
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    90
     * @param avatarId the id of the avatar
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    91
     * @return the avatar or null if it cannot be retrieved from the cache
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
    92
     */
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    93
    public byte[] getAvatar(String avatarId) {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    94
	try {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    95
	    return mCache.get(avatarId);
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    96
	} catch (IOException e) {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    97
	    return null;
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    98
	}
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    99
    }
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   100
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   101
    /**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   102
     * Select the avatar to download.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   103
     * Subclass should override this method to take control over the selection process.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   104
     * This implementation select the first element.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   105
     *
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   106
     * @param available list of the avatar metadata information
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   107
     * @return the metadata of the avatar to download
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   108
     */
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   109
    protected Info selectAvatar(List<Info> available) {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   110
	return available.get(0);
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   111
    }
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   112
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   113
    /**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   114
     * Doawload an avatar.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   115
     *
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   116
     * @param from The jid of the user
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   117
     * @param info the metadata information of the avatar to download
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   118
     */
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   119
    private void downloadAvatar(String from, Info info) {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   120
	try {
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   121
	    AvatarRetriever retriever = AvatarRetrieverFactory.getRetriever(mCon, from, info);
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   122
	    byte[] avatar = retriever.getAvatar();
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   123
	// TODO check the hash before store
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   124
	    mCache.put(info.getId(), avatar);
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   125
	} catch (IOException e) {
807
e4b9ec9f30e6 javadoc and checstyle
Da Risk <darisk972@gmail.com>
parents: 802
diff changeset
   126
	    System.err.println("Error while downloading avatar");
e4b9ec9f30e6 javadoc and checstyle
Da Risk <darisk972@gmail.com>
parents: 802
diff changeset
   127
	    e.printStackTrace();
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   128
	}
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   129
    }
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   130
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   131
    /**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   132
     * A listener to PEPEevent.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   133
     */
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   134
    private class Listener implements PEPListener {
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   135
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   136
	/**
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   137
	 * Create a listener.
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   138
	 */
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   139
	public Listener() {
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   140
	}
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   141
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   142
	@Override
800
1eefc5da624a Port the avatar manager on smackx.pubsub.* instead of PEPManager.
Da Risk <darisk972@gmail.com>
parents: 799
diff changeset
   143
	public void eventReceived(String from, String node, List<Item> items) {
801
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   144
	    Item i = items.get(0);
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   145
	    if (i instanceof PayloadItem) {
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   146
		PayloadItem<PacketExtension> pi = (PayloadItem<PacketExtension>) i;
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   147
		PacketExtension ex = pi.getPayload();
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   148
		if (ex instanceof AvatarMetadataExtension) {
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   149
		    AvatarMetadataExtension ext = (AvatarMetadataExtension) ex;
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   150
		    Info info = selectAvatar(ext.getInfos());
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   151
		    if (!mCache.contains(info.getId()))
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   152
			downloadAvatar(from, info);
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   153
		}
9093c2de4159 Documentation.
Da Risk <darisk972@gmail.com>
parents: 800
diff changeset
   154
	    }
799
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   155
	}
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   156
    }
b2a796654230 Implementation of XEP-084 which loads avatar from http.
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   157
}