/**************************************************************************** * 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.ui; import java.util.Collection; import java.util.Iterator; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.ecf.core.user.IUser; import org.eclipse.ecf.internal.presence.ui.Messages; import org.eclipse.ecf.presence.IPresence; import org.eclipse.ecf.presence.roster.*; import org.eclipse.ecf.ui.SharedImages; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.model.IWorkbenchAdapter; /** * Adapter factory for adapter to IWorkbenchAdapter (labels and images). * Subclasses may override as desired and appropriate. The adapter factory is to * be used with the <code>org.eclipse.core.runtime.adapters</code> extension * point. Here is example markup for the * * <pre> * <extension point="org.eclipse.core.runtime.adapters" > * <factory adaptableType="org.eclipse.ecf.presence.roster.Roster" * class="org.eclipse.ecf.presence.ui.RosterWorkbenchAdapterFactory"> * <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"> * </adapter> * </factory> * </extension> * </pre> */ public class RosterWorkbenchAdapterFactory implements IAdapterFactory { protected ImageDescriptor getImageDescriptor(String iconFile) { return SharedImages.getImageDescriptor(iconFile); } protected String getRosterLabel(IRoster roster) { IUser user = roster.getUser(); return user == null ? Messages.RosterWorkbenchAdapterFactory_Disconnected : user.getName(); } protected ImageDescriptor getRosterImageDescriptor(IRoster roster) { IUser user = roster.getUser(); if (user == null) return getImageDescriptor(SharedImages.IMG_USER_UNAVAILABLE); return getImageDescriptor(SharedImages.IMG_IDENTITY); } private IWorkbenchAdapter rosterAdapter = new IWorkbenchAdapter() { public Object[] getChildren(Object o) { IRoster roster = (IRoster) o; return roster.getItems().toArray(); } public ImageDescriptor getImageDescriptor(Object object) { return getRosterImageDescriptor((IRoster) object); } public String getLabel(Object o) { return getRosterLabel((IRoster) o); } public Object getParent(Object o) { return null; } }; protected int getEntriesAvailableCount(Collection entries) { int count = 0; synchronized (entries) { for (Iterator i = entries.iterator(); i.hasNext();) { Object o = i.next(); if (o instanceof IRosterEntry) { IRosterEntry entry = (IRosterEntry) o; if (entry.getPresence().getType().equals(IPresence.Type.AVAILABLE)) count++; } } } return count; } protected int getEntriesTotalCount(Collection entries) { int count = 0; synchronized (entries) { for (Iterator i = entries.iterator(); i.hasNext();) { Object o = i.next(); if (o instanceof IRosterEntry) count++; } } return count; } protected String getRosterGroupLabel(IRosterGroup group) { Collection entries = group.getEntries(); return NLS.bind(Messages.RosterWorkbenchAdapterFactory_GroupLabel, new Object[] {group.getName(), Integer.toString(getEntriesAvailableCount(entries)), Integer.toString(getEntriesTotalCount(entries))}); } protected ImageDescriptor getRosterGroupImageDescriptor(IRosterGroup group) { return getImageDescriptor(SharedImages.IMG_GROUP); } private IWorkbenchAdapter rosterGroupAdapter = new IWorkbenchAdapter() { public Object[] getChildren(Object o) { return ((IRosterGroup) o).getEntries().toArray(); } public ImageDescriptor getImageDescriptor(Object object) { return getRosterGroupImageDescriptor((IRosterGroup) object); } public String getLabel(Object o) { return getRosterGroupLabel((IRosterGroup) o); } public Object getParent(Object o) { return ((IRosterGroup) o).getParent(); } }; protected String getRosterItemLabel(IRosterItem item) { return item.getName(); } protected ImageDescriptor getRosterItemImageDescriptor(IRosterItem item) { return null; } private IWorkbenchAdapter rosterItemAdapter = new IWorkbenchAdapter() { public Object[] getChildren(Object o) { return new Object[0]; } public ImageDescriptor getImageDescriptor(Object object) { return getRosterItemImageDescriptor((IRosterItem) object); } public String getLabel(Object o) { return getRosterItemLabel((IRosterItem) o); } public Object getParent(Object o) { return ((IRosterItem) o).getParent(); } }; protected String getRosterEntryLabel(IRosterEntry entry) { return entry.getName(); } protected ImageDescriptor getRosterEntryImageDescriptor(IRosterEntry entry) { IPresence p = entry.getPresence(); if (p != null) { IPresence.Type pType = p.getType(); IPresence.Mode pMode = p.getMode(); // If type is unavailable then we're unavailable if (pType.equals(IPresence.Type.AVAILABLE)) { // if type and mode are both 'available' then we're actually // available if (pMode.equals(IPresence.Mode.AVAILABLE)) return getImageDescriptor(SharedImages.IMG_USER_AVAILABLE); // If mode is away then we're away else if (pMode.equals(IPresence.Mode.AWAY) || pMode.equals(IPresence.Mode.EXTENDED_AWAY)) return getImageDescriptor(SharedImages.IMG_USER_AWAY); else if (pMode.equals(IPresence.Mode.DND)) return getImageDescriptor(SharedImages.IMG_USER_DND); } } return getImageDescriptor(SharedImages.IMG_USER_UNAVAILABLE); } private IWorkbenchAdapter rosterEntryAdapter = new IWorkbenchAdapter() { public Object[] getChildren(Object o) { return new Object[0]; } public ImageDescriptor getImageDescriptor(Object object) { return getRosterEntryImageDescriptor((IRosterEntry) object); } public String getLabel(Object o) { return getRosterEntryLabel((IRosterEntry) o); } public Object getParent(Object o) { return ((IRosterEntry) o).getParent(); } }; /* * (non-Javadoc) * * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, * java.lang.Class) */ public Object getAdapter(Object adaptableObject, Class adapterType) { if (adapterType.equals(IWorkbenchAdapter.class)) { if (adaptableObject instanceof IRoster) return rosterAdapter; if (adaptableObject instanceof IRosterGroup) return rosterGroupAdapter; if (adaptableObject instanceof IRosterEntry) return rosterEntryAdapter; if (adaptableObject instanceof IRosterItem) return rosterItemAdapter; } return null; } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() */ public Class[] getAdapterList() { return new Class[] {IWorkbenchAdapter.class}; } }