/******************************************************************************
* Copyright (c) 2008 Versant Corporation 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:
* Remy Chi Jian Suen (Versant Corporation) - initial API and implementation
******************************************************************************/
package org.eclipse.team.internal.ecf.ui.wizards;
import java.util.*;
import java.util.Map.Entry;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ecf.core.*;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.presence.IPresenceContainerAdapter;
import org.eclipse.ecf.presence.roster.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.team.internal.ecf.ui.Messages;
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
class RemotePeerSynchronizeWizardPage extends WizardPage {
private CheckboxTreeViewer resourcesViewer;
private TreeViewer peersViewer;
RemotePeerSynchronizeWizardPage() {
super(RemotePeerSynchronizeWizardPage.class.getName());
setTitle(Messages.RemotePeerSynchronizeWizardPage_Title);
setDescription(Messages.RemotePeerSynchronizeWizardPage_Description);
}
public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new FillLayout(SWT.HORIZONTAL));
createResourcesViewer(composite);
createPeersViewer(composite);
attachListeners();
Dialog.applyDialogFont(composite);
setControl(composite);
}
private void createResourcesViewer(Composite composite) {
resourcesViewer = new ContainerCheckedTreeViewer(composite);
resourcesViewer.setContentProvider(new WorkbenchContentProvider() {
public Object[] getChildren(Object element) {
if (element instanceof org.eclipse.core.resources.IContainer) {
try {
IResource[] members = ((org.eclipse.core.resources.IContainer) element).members();
List nonDerivedMembers = new ArrayList();
for (int i = 0; i < members.length; i++) {
if (!members[i].isDerived()) {
nonDerivedMembers.add(members[i]);
}
}
return nonDerivedMembers.toArray();
} catch (CoreException e) {
return new IResource[0];
}
}
return new IResource[0];
}
public boolean hasChildren(Object element) {
if (element instanceof org.eclipse.core.resources.IContainer) {
try {
IResource[] members = ((org.eclipse.core.resources.IContainer) element).members();
for (int i = 0; i < members.length; i++) {
if (!members[i].isDerived()) {
return true;
}
}
return false;
} catch (CoreException e) {
return false;
}
}
return false;
}
});
resourcesViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider());
resourcesViewer.setInput(ResourcesPlugin.getWorkspace().getRoot());
}
private void createPeersViewer(Composite composite) {
peersViewer = new TreeViewer(composite, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
peersViewer.setContentProvider(new ITreeContentProvider() {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof IRosterGroup) {
return ((IRosterGroup) parentElement).getEntries().toArray();
} else if (parentElement instanceof IRoster) {
return ((IRoster) parentElement).getItems().toArray();
} else {
return new Object[0];
}
}
public Object getParent(Object element) {
return ((IRosterItem) element).getParent();
}
public boolean hasChildren(Object element) {
if (element instanceof IRosterGroup) {
return !((IRosterGroup) element).getEntries().isEmpty();
} else if (element instanceof IRoster) {
return !((IRoster) element).getItems().isEmpty();
} else {
return false;
}
}
public Object[] getElements(Object inputElement) {
return (Object[]) inputElement;
}
public void dispose() {
// nothing to do
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// nothing to do
}
});
peersViewer.setLabelProvider(new LabelProvider() {
public String getText(Object element) {
Entry entry = (Entry) element;
IRosterItem item = (IRosterItem) entry.getValue();
return item.getName();
}
});
IContainerManager manager = (IContainerManager) ContainerFactory.getDefault();
IContainer[] containers = manager.getAllContainers();
Map presenceContainers = new HashMap();
for (int i = 0; i < containers.length; i++) {
IPresenceContainerAdapter adapter = (IPresenceContainerAdapter) containers[i].getAdapter(IPresenceContainerAdapter.class);
if (adapter != null) {
IRosterManager rosterManager = adapter.getRosterManager();
if (rosterManager != null) {
presenceContainers.put(containers[i], rosterManager.getRoster());
}
}
}
peersViewer.setInput(presenceContainers.entrySet().toArray());
}
private void attachListeners() {
resourcesViewer.addCheckStateListener(new ICheckStateListener() {
public void checkStateChanged(CheckStateChangedEvent event) {
verify();
}
});
peersViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
verify();
}
});
}
void verify() {
if (resourcesViewer.getCheckedElements().length == 0) {
setPageComplete(false);
return;
}
IStructuredSelection selection = (IStructuredSelection) peersViewer.getSelection();
if (!(selection.getFirstElement() instanceof IRosterEntry)) {
setErrorMessage(Messages.RemotePeerSynchronizeWizardPage_NoRemotePeerSelectedError);
setPageComplete(false);
return;
}
setErrorMessage(null);
setPageComplete(true);
}
private Entry getSelectedEntry() {
IStructuredSelection selection = (IStructuredSelection) peersViewer.getSelection();
return (Entry) selection.getFirstElement();
}
ID getContainerId() {
Entry entry = getSelectedEntry();
IContainer container = (IContainer) entry.getKey();
return container.getID();
}
IRosterEntry getRosterEntry() {
IStructuredSelection selection = (IStructuredSelection) peersViewer.getSelection();
return (IRosterEntry) selection.getFirstElement();
}
IResource[] getSelectedResources() {
IStructuredSelection selection = (IStructuredSelection) resourcesViewer.getSelection();
return (IResource[]) selection.toList().toArray(new IResource[selection.size()]);
}
}