/**************************************************************************** * Copyright (c) 2004 Composent, Inc. 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: * Composent, Inc. - initial API and implementation *****************************************************************************/ package org.eclipse.ecf.presence.roster; import java.util.*; import org.eclipse.core.runtime.Assert; import org.eclipse.ecf.core.user.IUser; import org.eclipse.ecf.presence.IPresence; /** * Roster entry base class implementing {@link IRosterEntry}. Subclasses may be * created as appropriate. * */ public class RosterEntry extends RosterItem implements IRosterEntry, IMultiResourceRosterEntry { protected IUser user; protected IPresence presence; protected List groups; /** * @since 2.1 */ protected List resources; public RosterEntry(IRosterItem parent, IUser user, IPresence presenceState) { Assert.isNotNull(parent); Assert.isNotNull(user); this.parent = parent; this.user = user; this.presence = presenceState; this.groups = Collections.synchronizedList(new ArrayList()); if (parent instanceof RosterGroup) { groups.add(parent); ((RosterGroup) parent).add(this); } this.resources = new ArrayList(); } public void setPresence(IPresence newPresence) { this.presence = newPresence; } public String getName() { return user.getName(); } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object obj) { if (obj == null) return false; if (this == obj) return true; if (obj instanceof RosterEntry) { RosterEntry re = (RosterEntry) obj; return re.getUser().getID().equals(getUser().getID()); } return false; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return getUser().getID().hashCode(); } /* * (non-Javadoc) * * @see org.eclipse.ecf.presence.roster.IRosterEntry#add(org.eclipse.ecf.presence.roster.IRosterGroup) */ public boolean add(IRosterGroup group) { if (group == null) return false; return groups.add(group); } /* * (non-Javadoc) * * @see org.eclipse.ecf.presence.roster.IRosterEntry#remove(org.eclipse.ecf.presence.roster.IRosterGroup) */ public boolean remove(IRosterGroup group) { if (group == null) return false; return groups.remove(group); } /* * (non-Javadoc) * * @see org.eclipse.ecf.presence.roster.IRosterEntry#getUser() */ public IUser getUser() { return user; } /* * (non-Javadoc) * * @see org.eclipse.ecf.ui.presence.IRosterEntry#getGroups() */ public Collection getGroups() { return groups; } /* * (non-Javadoc) * * @see org.eclipse.ecf.ui.presence.IRosterEntry#getPresenceState() */ public IPresence getPresence() { return presence; } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { StringBuffer sb = new StringBuffer("RosterEntry["); //$NON-NLS-1$ synchronized (sb) { sb.append("userid=" + getUser().getID().getName()).append(";"); //$NON-NLS-1$ //$NON-NLS-2$ sb.append("name=").append(getName()).append(';'); //$NON-NLS-1$ sb.append("presence=").append(presence).append(';'); //$NON-NLS-1$ sb.append("groups="); //$NON-NLS-1$ if (!groups.isEmpty()) { for (int i = 0; i < groups.size(); i++) { sb.append(((IRosterGroup) groups.get(i)).getName()); if (i < (groups.size() - 1)) sb.append(','); } } sb.append(']'); } return sb.toString(); } /** * @since 2.1 */ public boolean updateResource(String resourceName, IPresence p) { if (resourceName == null) return false; synchronized (resources) { for (Iterator i = resources.iterator(); i.hasNext();) { RosterResource r = (RosterResource) i.next(); if (r.getName().equals(resourceName)) { r.setPresence(p); return true; } } resources.add(new RosterResource(this, resourceName, p)); return false; } } /** * @since 2.1 */ public RosterResource removeResource(String resourceName) { if (resourceName == null) return null; RosterResource result = null; synchronized (resources) { for (Iterator i = resources.iterator(); i.hasNext();) { RosterResource r = (RosterResource) i.next(); if (r.getName().equals(resourceName)) { i.remove(); result = r; } } } return result; } /** * @since 2.1 */ public IRosterResource[] getResources() { List result = null; synchronized (resources) { result = new ArrayList(resources); } return (IRosterResource[]) result.toArray(new IRosterResource[result.size()]); } }