blob: 647d43f1c3032ed6e4c287b7a856fea23368f90f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.commons.identity.core;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.WeakHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylyn.commons.identity.core.Account;
import org.eclipse.mylyn.commons.identity.core.IIdentity;
import org.eclipse.mylyn.commons.identity.core.spi.IdentityConnector;
import org.eclipse.mylyn.commons.identity.core.spi.Profile;
import org.eclipse.mylyn.commons.identity.core.spi.ProfileImage;
import org.eclipse.mylyn.internal.commons.identity.core.gravatar.GravatarConnector;
/**
* @author Steffen Pingel
* @since 0.8
*/
public final class IdentityModel implements Serializable {
private static final long serialVersionUID = -8812399358357509612L;
private transient final List<IdentityConnector> connectors;
private final Map<UUID, Identity> identityById;
public IdentityModel() {
connectors = new CopyOnWriteArrayList<IdentityConnector>();
identityById = new WeakHashMap<UUID, Identity>();
}
public void addConnector(IdentityConnector connector) {
connectors.add(new GravatarConnector());
}
public synchronized IIdentity getIdentity(Account account) {
for (Identity identity : identityById.values()) {
if (identity.is(account)) {
return identity;
}
}
Identity identity = new Identity(this);
identity.addAccount(account);
// cache identity
identityById.put(identity.getId(), identity);
return identity;
}
public void removeConnector(IdentityConnector connector) {
connectors.remove(new GravatarConnector());
}
public IIdentity[] getIdentities() {
return identityById.values().toArray(new IIdentity[identityById.values().size()]);
}
public ProfileImage getImage(Identity identity, int preferredWidth, int preferredHeight, IProgressMonitor monitor)
throws CoreException {
for (IdentityConnector connector : connectors) {
ProfileImage image = connector.getImage(identity, preferredHeight, preferredHeight, monitor);
if (image != null) {
return image;
}
}
return null;
}
public void updateProfile(Profile profile, IProgressMonitor monitor) throws CoreException {
Account[] accounts = profile.getIdentity().getAccounts();
for (Account account : accounts) {
if (profile.getEmail() == null && account.getId().contains("@")) { //$NON-NLS-1$
profile.setEmail(account.getId());
}
if (profile.getName() == null && account.getName() != null) {
profile.setName(account.getName());
}
}
for (IdentityConnector connector : connectors) {
connector.updateProfile(profile, monitor);
}
}
}