Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 192778
Collapse All | Expand All

(-)src/org/eclipse/ecf/internal/ui/IImageFiles.java (-1 / +4 lines)
Lines 1-5 Link Here
1
/****************************************************************************
1
/****************************************************************************
2
 * Copyright (c) 2004 Composent, Inc. and others.
2
 * Copyright (c) 2004, 2007 Composent, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 44-47 Link Here
44
	public static final String CHAT_WIZARD = "icons/wizards/chat_wizard.png"; //$NON_NLS-$1
44
	public static final String CHAT_WIZARD = "icons/wizards/chat_wizard.png"; //$NON_NLS-$1
45
	
45
	
46
	public static final String COLLABORATION_WIZARD = "icons/wizards/collaboration_wizard.png"; //$NON_NLS-$1
46
	public static final String COLLABORATION_WIZARD = "icons/wizards/collaboration_wizard.png"; //$NON_NLS-$1
47
	
48
	public static final String COMMUNICATIONS = "icons/enabled/communications.gif"; //$NON_NLS-$1
49
47
}
50
}
(-)src/org/eclipse/ecf/internal/ui/Activator.java (-1 / +5 lines)
Lines 1-5 Link Here
1
/****************************************************************************
1
/****************************************************************************
2
 * Copyright (c) 2004 Composent, Inc. and others.
2
 * Copyright (c) 2004, 2007 Composent, Inc. and others.
3
 * All rights reserved. This program and the accompanying materials
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
5
 * which accompanies this distribution, and is available at
Lines 159-164 Link Here
159
		registry.put(SharedImages.IMG_IDENTITY, AbstractUIPlugin
159
		registry.put(SharedImages.IMG_IDENTITY, AbstractUIPlugin
160
				.imageDescriptorFromPlugin(PLUGIN_ID, IImageFiles.IDENTITY)
160
				.imageDescriptorFromPlugin(PLUGIN_ID, IImageFiles.IDENTITY)
161
				.createImage());
161
				.createImage());
162
		
163
		registry.put(SharedImages.IMG_COMMUNICATIONS, AbstractUIPlugin
164
				.imageDescriptorFromPlugin(PLUGIN_ID, IImageFiles.COMMUNICATIONS)
165
				.createImage());
162
166
163
		return registry;
167
		return registry;
164
	}
168
	}
(-)META-INF/MANIFEST.MF (-5 / +5 lines)
Lines 25-36 Link Here
25
Eclipse-BuddyPolicy: dependent
25
Eclipse-BuddyPolicy: dependent
26
Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
26
Bundle-RequiredExecutionEnvironment: CDC-1.1/Foundation-1.1,
27
 J2SE-1.4
27
 J2SE-1.4
28
Require-Bundle: org.eclipse.ecf,
28
Require-Bundle: org.eclipse.core.runtime,
29
 org.eclipse.ecf.presence,
30
 org.eclipse.jface.text,
29
 org.eclipse.jface.text,
31
 org.eclipse.ui,
30
 org.eclipse.ui,
32
 org.eclipse.core.runtime,
33
 org.eclipse.ecf.filetransfer,
34
 org.eclipse.ui.editors,
31
 org.eclipse.ui.editors,
35
 org.eclipse.ecf.sharedobject
32
 org.eclipse.ecf,
33
 org.eclipse.ecf.filetransfer,
34
 org.eclipse.ecf.sharedobject,
35
 org.eclipse.ecf.presence
36
36
(-)src/org/eclipse/ecf/ui/SharedImages.java (+2 lines)
Lines 53-58 Link Here
53
	
53
	
54
	public static final String IMG_COLLABORATION_WIZARD = "IMG_COLLABORATION_WIZARD"; //$NON-NLS-1$
54
	public static final String IMG_COLLABORATION_WIZARD = "IMG_COLLABORATION_WIZARD"; //$NON-NLS-1$
55
	
55
	
56
	public static final String IMG_COMMUNICATIONS = "IMG_COMMUNICATIONS"; //$NON-NLS-1$
57
	
56
	public static ImageDescriptor getImageDescriptor(String key) {
58
	public static ImageDescriptor getImageDescriptor(String key) {
57
		return Activator.getDefault().getImageRegistry().getDescriptor(key);
59
		return Activator.getDefault().getImageRegistry().getDescriptor(key);
58
	}
60
	}
(-)plugin.xml (+7 lines)
Lines 43-46 Link Here
43
            name="%perspective.name">
43
            name="%perspective.name">
44
      </perspective>
44
      </perspective>
45
   </extension>
45
   </extension>
46
   <extension
47
         point="org.eclipse.ui.commands">
48
      <category
49
            id="org.eclipse.ecf.ui.commands.category"
50
            name="Communications">
51
      </category>
52
   </extension>
46
</plugin>
53
</plugin>
(-)src/org/eclipse/ecf/internal/presence/ui/Activator.java (+15 lines)
Lines 11-16 Link Here
11
package org.eclipse.ecf.internal.presence.ui;
11
package org.eclipse.ecf.internal.presence.ui;
12
12
13
import org.eclipse.core.runtime.IExtensionRegistry;
13
import org.eclipse.core.runtime.IExtensionRegistry;
14
import org.eclipse.ecf.core.IContainerManager;
14
import org.eclipse.ecf.presence.service.IPresenceService;
15
import org.eclipse.ecf.presence.service.IPresenceService;
15
import org.eclipse.ui.plugin.AbstractUIPlugin;
16
import org.eclipse.ui.plugin.AbstractUIPlugin;
16
import org.osgi.framework.BundleContext;
17
import org.osgi.framework.BundleContext;
Lines 32-37 Link Here
32
33
33
	private ServiceTracker extensionRegistryTracker = null;
34
	private ServiceTracker extensionRegistryTracker = null;
34
	
35
	
36
	private ServiceTracker containerManagerTracker = null;
37
	
35
	private BundleContext context;
38
	private BundleContext context;
36
	
39
	
37
	/**
40
	/**
Lines 78-83 Link Here
78
			extensionRegistryTracker.close();
81
			extensionRegistryTracker.close();
79
			extensionRegistryTracker = null;
82
			extensionRegistryTracker = null;
80
		}
83
		}
84
		if (containerManagerTracker != null) {
85
			containerManagerTracker.close();
86
			containerManagerTracker = null;
87
		}
81
		this.context = null;
88
		this.context = null;
82
		super.stop(context);
89
		super.stop(context);
83
	}
90
	}
Lines 100-104 Link Here
100
		return (IExtensionRegistry) extensionRegistryTracker.getService();
107
		return (IExtensionRegistry) extensionRegistryTracker.getService();
101
	}
108
	}
102
	
109
	
110
	public IContainerManager getContainerManager() {
111
		if (containerManagerTracker == null) {
112
			containerManagerTracker = new ServiceTracker(context,
113
					IContainerManager.class.getName(), null);
114
			containerManagerTracker.open();
115
		}
116
		return (IContainerManager) containerManagerTracker.getService();
117
	}
103
118
104
}
119
}
(-)plugin.xml (+24 lines)
Lines 109-113 Link Here
109
         </view>
109
         </view>
110
      </perspectiveExtension>
110
      </perspectiveExtension>
111
   </extension>
111
   </extension>
112
    <extension
113
         point="org.eclipse.ui.commands">
114
      <command
115
            categoryId="org.eclipse.ecf.ui.commands.category"
116
            id="org.eclipse.ecf.presence.ui.commands.browse"
117
            name="Browse Rosters">
118
      </command>
119
   </extension>
120
   <extension
121
         point="org.eclipse.ui.handlers">
122
      <handler
123
            class="org.eclipse.ecf.presence.ui.handlers.BrowseHandler"
124
            commandId="org.eclipse.ecf.presence.ui.commands.browse">
125
      </handler>
126
   </extension>
127
   <extension
128
         point="org.eclipse.ui.bindings">
129
      <key
130
            commandId="org.eclipse.ecf.presence.ui.commands.browse"
131
            contextId="org.eclipse.ui.contexts.window"
132
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
133
            sequence="M1+M2+P">
134
      </key>
135
   </extension>
112
136
113
</plugin>
137
</plugin>
(-)src/org/eclipse/ecf/presence/ui/handlers/BrowseHandler.java (+76 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Chris Aniszczyk, and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Chris Aniszczyk <caniszczyk@gmail.com> - initial API and implementation
10
 ******************************************************************************/
11
package org.eclipse.ecf.presence.ui.handlers;
12
13
import org.eclipse.core.commands.AbstractHandler;
14
import org.eclipse.core.commands.ExecutionEvent;
15
import org.eclipse.core.commands.ExecutionException;
16
import org.eclipse.ecf.core.IContainer;
17
import org.eclipse.ecf.core.IContainerManager;
18
import org.eclipse.ecf.internal.presence.ui.Activator;
19
import org.eclipse.ecf.presence.im.IChatManager;
20
import org.eclipse.ecf.presence.im.IChatMessageSender;
21
import org.eclipse.ecf.presence.im.ITypingMessageSender;
22
import org.eclipse.ecf.presence.roster.IRoster;
23
import org.eclipse.ecf.presence.roster.IRosterEntry;
24
import org.eclipse.ecf.presence.ui.MessagesView;
25
import org.eclipse.jface.window.Window;
26
import org.eclipse.ui.IWorkbenchWindow;
27
import org.eclipse.ui.PartInitException;
28
import org.eclipse.ui.handlers.HandlerUtil;
29
30
/**
31
 * Our sample handler extends AbstractHandler, an IHandler base class.
32
 * @see org.eclipse.core.commands.IHandler
33
 * @see org.eclipse.core.commands.AbstractHandler
34
 */
35
public class BrowseHandler extends AbstractHandler {
36
	/**
37
	 * The constructor.
38
	 */
39
	public BrowseHandler() {}
40
41
	/**
42
	 * the command has been executed, so extract extract the needed information
43
	 * from the application context.
44
	 */
45
	public Object execute(ExecutionEvent event) throws ExecutionException {
46
		IWorkbenchWindow window = 
47
			HandlerUtil.getActiveWorkbenchWindowChecked(event);
48
		
49
		IContainerManager containerManager = Activator.getDefault().getContainerManager();
50
		IContainer[] containers = containerManager.getAllContainers();
51
		
52
		BrowseDialog dialog = new BrowseDialog(window.getShell(), containers);
53
		int status = dialog.open();
54
		if(status == Window.OK) {
55
			Object[] object = dialog.getResult();
56
			IRosterEntry entry = (IRosterEntry) object[0];
57
			IRoster roster = entry.getRoster();
58
			if (roster != null) {
59
				IChatManager manager = 
60
					roster.getPresenceContainerAdapter().getChatManager();
61
				IChatMessageSender icms = manager.getChatMessageSender();
62
				ITypingMessageSender itms = manager.getTypingMessageSender();
63
				try {
64
					MessagesView view = 
65
						(MessagesView) window.getActivePage().showView(MessagesView.VIEW_ID);
66
					view.selectTab(icms, itms, roster.getUser().getID(), entry
67
							.getUser().getID());
68
				} catch (PartInitException e) {
69
					e.printStackTrace();
70
				}
71
			}
72
		}
73
		
74
		return null;
75
	}
76
}
(-)src/org/eclipse/ecf/presence/ui/handlers/BrowseDialog.java (+288 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Chris Aniszczyk, and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *    Chris Aniszczyk <caniszczyk@gmail.com> - initial API and implementation
10
 ******************************************************************************/
11
package org.eclipse.ecf.presence.ui.handlers;
12
13
import java.text.Collator;
14
import java.util.Collection;
15
import java.util.Comparator;
16
import java.util.HashMap;
17
import java.util.Iterator;
18
import java.util.Map;
19
20
import org.eclipse.core.runtime.CoreException;
21
import org.eclipse.core.runtime.IAdaptable;
22
import org.eclipse.core.runtime.IProgressMonitor;
23
import org.eclipse.core.runtime.IStatus;
24
import org.eclipse.core.runtime.Platform;
25
import org.eclipse.core.runtime.Status;
26
import org.eclipse.ecf.core.IContainer;
27
import org.eclipse.ecf.internal.presence.ui.Activator;
28
import org.eclipse.ecf.presence.IPresenceContainerAdapter;
29
import org.eclipse.ecf.presence.roster.IRoster;
30
import org.eclipse.ecf.presence.roster.IRosterItem;
31
import org.eclipse.jface.dialogs.IDialogSettings;
32
import org.eclipse.jface.resource.ImageDescriptor;
33
import org.eclipse.jface.viewers.LabelProvider;
34
import org.eclipse.swt.graphics.Image;
35
import org.eclipse.swt.widgets.Composite;
36
import org.eclipse.swt.widgets.Control;
37
import org.eclipse.swt.widgets.Shell;
38
import org.eclipse.ui.IMemento;
39
import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
40
import org.eclipse.ui.model.IWorkbenchAdapter;
41
42
/**
43
 * @author zx
44
 */
45
public class BrowseDialog extends FilteredItemsSelectionDialog {
46
47
	private static final String DIALOG_SETTINGS = 
48
		"org.eclipse.ecf.ui.dialogs.BrowseDialog"; //$NON-NLS-1$
49
	
50
	private IContainer[] containers = null;
51
	private RosterItemLabelProvider rosterItemLabelProvider;
52
	private RosterItemDetailsLabelProvider rosterItemDetailsLabelProvider;
53
	
54
	public BrowseDialog(Shell shell, IContainer[] containers) {
55
		super(shell, false);
56
		this.containers = containers;
57
		
58
		setSelectionHistory(new RosterItemSelectionHistory());
59
		setTitle("Talk to...");
60
		
61
		rosterItemLabelProvider = new RosterItemLabelProvider();
62
		setListLabelProvider(rosterItemLabelProvider);
63
		
64
		rosterItemDetailsLabelProvider = new RosterItemDetailsLabelProvider();
65
		setDetailsLabelProvider(rosterItemDetailsLabelProvider);
66
	}
67
68
	/* (non-Javadoc)
69
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createExtendedContentArea(org.eclipse.swt.widgets.Composite)
70
	 */
71
	protected Control createExtendedContentArea(Composite parent) {
72
		return null;
73
	}
74
75
	/* (non-Javadoc)
76
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#createFilter()
77
	 */
78
	protected ItemsFilter createFilter() {
79
		return new RosterItemsFilter();
80
	}
81
82
	/* (non-Javadoc)
83
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
84
	 */
85
	protected void fillContentProvider(AbstractContentProvider contentProvider,
86
			ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
87
			throws CoreException {
88
		
89
		progressMonitor.beginTask("Scanning containers...", containers.length);
90
		
91
		// cycle through all the containers and grab entries 
92
		for(int i = 0; i < containers.length; i++) {
93
			IContainer container = containers[i];
94
			IPresenceContainerAdapter presenceContainer = 
95
				(IPresenceContainerAdapter) container.getAdapter(IPresenceContainerAdapter.class);
96
			if (presenceContainer != null) {
97
				Collection items = 
98
						presenceContainer.getRosterManager().getRoster().getItems();
99
				for(Iterator it = items.iterator(); it.hasNext(); ) {
100
					contentProvider.add(it.next(), itemsFilter);
101
				}
102
			}
103
			progressMonitor.worked(1);
104
		}
105
		if (progressMonitor != null)
106
			progressMonitor.done();
107
	}
108
109
	/* (non-Javadoc)
110
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getDialogSettings()
111
	 */
112
	protected IDialogSettings getDialogSettings() {
113
		IDialogSettings settings = 
114
			Activator.getDefault().getDialogSettings().getSection(
115
					DIALOG_SETTINGS);
116
117
		if (settings == null) {
118
			settings = 
119
				Activator.getDefault().getDialogSettings().addNewSection(
120
						DIALOG_SETTINGS);
121
		}
122
		
123
		return settings;
124
	}
125
126
	/* (non-Javadoc)
127
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getElementName(java.lang.Object)
128
	 */
129
	public String getElementName(Object item) {
130
		IRosterItem rosterItem = (IRosterItem) item;
131
		return rosterItem.getName();
132
	}
133
134
	/* (non-Javadoc)
135
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#getItemsComparator()
136
	 */
137
	protected Comparator getItemsComparator() {
138
		return new RosterItemsComparator();
139
	}
140
141
	/* (non-Javadoc)
142
	 * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog#validateItem(java.lang.Object)
143
	 */
144
	protected IStatus validateItem(Object item) {
145
		return new Status(IStatus.OK, "org.eclipse.ecf.ui", 0, "", null); //$NON-NLS-1$
146
	}
147
	
148
	public class RosterItemDetailsLabelProvider extends LabelProvider {
149
150
		private Map imageTable = new HashMap(7);
151
		
152
		public Image getImage(Object element) {
153
			IRosterItem item = (IRosterItem) element;
154
			IRoster roster = item.getRoster();
155
			IWorkbenchAdapter adapter = getAdapter(roster);
156
			if (adapter == null)
157
				return null;
158
			ImageDescriptor descriptor = adapter.getImageDescriptor(roster);
159
			if (descriptor == null)
160
				return null;
161
			Image image = (Image) imageTable.get(descriptor);
162
			if (image == null) {
163
				image = descriptor.createImage();
164
				imageTable.put(descriptor, image);
165
			}
166
			return image;
167
		}
168
169
		public String getText(Object element) {
170
			IRosterItem item = (IRosterItem) element;
171
			return item.getRoster().getName(); //$NON-NLS-1$
172
		}
173
		
174
	}
175
	
176
	public class RosterItemLabelProvider extends LabelProvider {
177
178
		private Map imageTable = new HashMap(7);
179
180
181
		/*
182
		 * (non-Javadoc)
183
		 * 
184
		 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
185
		 */
186
		public Image getImage(Object element) {
187
			IWorkbenchAdapter adapter = getAdapter(element);
188
			if (adapter == null)
189
				return null;
190
			ImageDescriptor descriptor = adapter.getImageDescriptor(element);
191
			if (descriptor == null)
192
				return null;
193
			Image image = (Image) imageTable.get(descriptor);
194
			if (image == null) {
195
				image = descriptor.createImage();
196
				imageTable.put(descriptor, image);
197
			}
198
			return image;
199
		}
200
201
		/*
202
		 * (non-Javadoc)
203
		 * 
204
		 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
205
		 */
206
		public String getText(Object element) {
207
			IRosterItem item = (IRosterItem) element;
208
			if(item == null)
209
				return ""; //$NON-NLS-1$
210
			IRoster roster = item.getRoster();
211
			return roster != null ? item.getName() + " - " + roster.getName() : "" ; //$NON-NLS-1$ //$NON-NLS-2$
212
			
213
		}
214
215
		/*
216
		 * (non-Javadoc)
217
		 * 
218
		 * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
219
		 */
220
		public void dispose() {
221
			if (imageTable != null) {
222
				for (Iterator i = imageTable.values().iterator(); i.hasNext();) {
223
					((Image) i.next()).dispose();
224
				}
225
				imageTable = null;
226
			}
227
		}
228
	}
229
	
230
	private class RosterItemSelectionHistory extends SelectionHistory {
231
232
		protected Object restoreItemFromMemento(IMemento memento) {
233
			// TODO Auto-generated method stub
234
			return null;
235
		}
236
237
		protected void storeItemToMemento(Object item, IMemento memento) {
238
			// TODO Auto-generated method stub
239
			
240
		}
241
		
242
	}
243
	
244
	private class RosterItemsFilter extends ItemsFilter {
245
246
		public boolean isConsistentItem(Object item) {
247
			return false;
248
		}
249
250
		public boolean matchItem(Object item) {
251
			if (!(item instanceof IRosterItem)) {
252
				return false;
253
			}
254
			IRosterItem rosterItem = (IRosterItem) item;
255
			return matches(rosterItem.getName());
256
		}
257
		
258
	}
259
	
260
	private class RosterItemsComparator implements Comparator {
261
262
		public int compare(Object o1, Object o2) {
263
			Collator collator = Collator.getInstance();
264
			IRosterItem item1 = (IRosterItem) o1;
265
			IRosterItem item2 = (IRosterItem) o2;
266
			String s1 = item1.getName();
267
			String s2 = item2.getName();
268
			int comparability = collator.compare(s1, s2);
269
			if (comparability == 0) {
270
				// TODO more here
271
			}
272
			return comparability;
273
		}
274
		
275
	}
276
	
277
	protected IWorkbenchAdapter getAdapter(Object element) {
278
		IWorkbenchAdapter adapter = null;
279
		if (element instanceof IAdaptable)
280
			adapter = (IWorkbenchAdapter) ((IAdaptable) element)
281
					.getAdapter(IWorkbenchAdapter.class);
282
		if (element != null && adapter == null)
283
			adapter = (IWorkbenchAdapter) Platform.getAdapterManager()
284
					.loadAdapter(element, IWorkbenchAdapter.class.getName());
285
		return adapter;
286
	}
287
288
}

Return to bug 192778