blob: 2588b10569ccaf18fa42b6fa3fda468d93303701 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2007 IBM 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:
* IBM Corporation - Initial API and implementation
*******************************************************************************/
package org.eclipse.wst.server.ui.internal.viewers;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.dialogs.FilteredTree;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.ui.internal.Messages;
import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
import org.eclipse.wst.server.ui.internal.view.servers.ServerTableLabelProvider;
/**
*
*/
public class ServerComposite extends AbstractTreeComposite {
protected IServer selection;
protected ServerSelectionListener listener;
protected ServerTreeContentProvider contentProvider;
protected boolean initialSelection = true;
protected IModule module;
protected String launchMode;
protected boolean includeIncompatibleVersions;
public interface ServerSelectionListener {
public void serverSelected(IServer server);
}
public ServerComposite(Composite parent, ServerSelectionListener listener2, IModule module, String launchMode) {
super(parent);
this.module = module;
this.launchMode = launchMode;
this.listener = listener2;
Tree tree2 = treeViewer.getTree();
TreeColumn column = new TreeColumn(tree2, SWT.SINGLE);
column.setText(Messages.viewServer);
column.setWidth(325);
TreeColumn column2 = new TreeColumn(tree2, SWT.SINGLE);
column2.setText(Messages.viewState);
column2.setWidth(100);
contentProvider = new ServerTreeContentProvider(module, launchMode);
treeViewer.setContentProvider(contentProvider);
//ILabelProvider labelProvider = new ServerTreeLabelProvider();
ILabelProvider labelProvider = new ServerTableLabelProvider();
labelProvider.addListener(new ILabelProviderListener() {
public void labelProviderChanged(LabelProviderChangedEvent event) {
Object[] obj = event.getElements();
if (obj == null)
treeViewer.refresh(true);
else {
obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
int size = obj.length;
for (int i = 0; i < size; i++)
treeViewer.refresh(obj[i], true);
}
}
});
treeViewer.setLabelProvider(labelProvider);
treeViewer.setInput(AbstractTreeContentProvider.ROOT);
treeViewer.expandToLevel(1);
treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
Object obj = getSelection(event.getSelection());
if (obj instanceof IServer) {
selection = (IServer) obj;
setDescription(selection.getServerType().getRuntimeType().getDescription());
} else {
selection = null;
setDescription("");
}
listener.serverSelected(selection);
}
});
}
protected void createTree() {
tree = new FilteredTree(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION, new ServerPatternFilter());
}
public void setIncludeIncompatibleVersions(boolean b) {
includeIncompatibleVersions = b;
ISelection sel = treeViewer.getSelection();
contentProvider.setIncludeIncompatibleVersions(b);
treeViewer.refresh();
treeViewer.setSelection(sel, true);
}
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible && initialSelection) {
initialSelection = false;
deferInitialization();
}
}
public void refreshAll() {
ISelection sel = treeViewer.getSelection();
contentProvider = new ServerTreeContentProvider(module, launchMode);
contentProvider.setIncludeIncompatibleVersions(includeIncompatibleVersions);
treeViewer.setContentProvider(contentProvider);
treeViewer.setSelection(sel);
}
protected String getDescriptionLabel() {
return null;
}
protected String getTitleLabel() {
return Messages.wizNewServerSelectExisting;
}
public IServer getSelectedServer() {
return selection;
}
public void setSelection(IServer server) {
if (server != null)
treeViewer.setSelection(new StructuredSelection(server), true);
else
treeViewer.setSelection(null);
}
protected void deferInitialization() {
Job job = new Job(Messages.jobInitializingServersView) {
public IStatus run(IProgressMonitor monitor) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {
if (contentProvider.getInitialSelection(module.getProject()) != null)
treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection(module.getProject())), true);
} catch (Exception e) {
// ignore - wizard has already been closed
}
}
});
return Status.OK_STATUS;
}
};
job.setSystem(true);
job.setPriority(Job.SHORT);
job.schedule();
}
}