blob: c1d42ffb0f7f221e5953312e90ca8bf2da78825d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2005 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;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.wst.server.core.*;
import org.eclipse.wst.server.ui.internal.view.tree.ModuleResourceAdapter;
import org.eclipse.wst.server.ui.internal.view.tree.ServerElementAdapter;
import org.eclipse.wst.server.ui.internal.view.tree.TextResourceAdapter;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.model.IWorkbenchAdapter;
/**
* Provides tree contents for objects that have the IWorkbenchAdapter
* adapter registered.
*/
public class ServerTreeContentProvider implements ITreeContentProvider {
protected TreeViewer viewer;
// listeners
protected LifecycleListener listener;
//protected IServerListener serverListener;
protected IResourceChangeListener resourceChangeListener;
class LifecycleListener implements IServerLifecycleListener {
public void serverAdded(final IServer server) {
//server.addServerListener(serverListener);
Display.getDefault().syncExec(new Runnable() {
public void run() {
handleServerResourceAdded(server);
}
});
}
public void serverRemoved(final IServer server) {
//server.removeServerListener(serverListener);
Display.getDefault().syncExec(new Runnable() {
public void run() {
handleServerResourceRemoved(server);
}
});
}
public void serverChanged(final IServer server) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
handleServerResourceChanged(server);
}
});
}
}
/**
*
*/
public ServerTreeContentProvider() {
// add listeners
addServerResourceListener();
addServerListener();
}
public Object[] getServerTreeRoots(Object parent) {
/*looseConfig = getLooseConfigurations();
if (looseConfig.length == 0)
return new Object[] { new TextResourceAdapter(parent, TextResourceAdapter.STYLE_SERVERS) };
else*/
return new Object[] { new TextResourceAdapter(parent, TextResourceAdapter.STYLE_SERVERS) };
//new TextResourceAdapter(parent, TextResourceAdapter.STYLE_LOOSE_CONFIGURATIONS) };
}
/* (non-Javadoc)
* Method declared on IContentProvider.
*/
public void dispose() {
// remove listeners
/*IServer[] servers = ServerCore.getServers();
if (servers != null) {
int size = servers.length;
for (int i = 0; i < size; i++)
servers[i].removeServerListener(serverListener);
}*/
ServerCore.removeServerLifecycleListener(listener);
}
/**
* Returns the implementation of IWorkbenchAdapter for the given
* object. Returns null if the adapter is not defined or the
* object is not adaptable.
*/
protected IWorkbenchAdapter getAdapter(Object o) {
if (!(o instanceof IAdaptable))
return null;
return (IWorkbenchAdapter)((IAdaptable)o).getAdapter(IWorkbenchAdapter.class);
}
/* (non-Javadoc)
* Method declared on ITreeContentProvider.
*/
public Object[] getChildren(Object element) {
if (element instanceof TextResourceAdapter) {
TextResourceAdapter adapter = (TextResourceAdapter) element;
Object[] children = adapter.getChildren(null);
if (children != null) {
int size = children.length;
for (int i = 0; i < size; i++) {
if (children[i] instanceof ServerElementAdapter) {
ServerElementAdapter adapter2 = (ServerElementAdapter) children[i];
adapter2.setFlags((byte) 1);
}
}
}
return children;
} else if (element instanceof ModuleResourceAdapter) {
ModuleResourceAdapter adapter = (ModuleResourceAdapter) element;
return adapter.getChildren(null);
} else if (element instanceof ServerElementAdapter) {
ServerElementAdapter adapter = (ServerElementAdapter) element;
return adapter.getChildren();
}
IWorkbenchAdapter adapter = getAdapter(element);
if (adapter != null)
return adapter.getChildren(element);
return new Object[0];
}
/* (non-Javadoc)
* Method declared on IStructuredContentProvider.
*/
public Object[] getElements(Object element) {
return getChildren(element);
}
/* (non-Javadoc)
* Method declared on ITreeContentProvider.
*/
public Object getParent(Object element) {
IWorkbenchAdapter adapter = getAdapter(element);
if (adapter != null)
return adapter.getParent(element);
return null;
}
/* (non-Javadoc)
* Method declared on ITreeContentProvider.
*/
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
/* (non-Javadoc)
* Method declared on IContentProvider.
*/
public void inputChanged(Viewer newViewer, Object oldInput, Object newInput) {
if (newViewer instanceof TreeViewer)
this.viewer = (TreeViewer) newViewer;
}
/**
* Add listeners for resource changes.
*/
private void addServerListener() {
// add a listener for configuration child module changes
/*serverListener = new IServerListener() {
public void modulesChanged(final IServer server) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
handleServerModulesChanged(server);
}
});
}
};
IServer[] servers = ServerCore.getServers();
if (servers != null) {
int size = servers.length;
for (int i = 0; i < size; i++)
servers[i].addServerListener(serverListener);
}*/
}
/**
* Add listeners for server resource changes.
*/
private void addServerResourceListener() {
// add a listener for resources being added or removed
listener = new LifecycleListener();
ServerCore.addServerLifecycleListener(listener);
}
/**
* Updates a server in the tree.
*
* @param server2 a server
*/
protected void handleServerModulesChanged(IServer server2) {
if (viewer != null) {
viewer.refresh(new ServerElementAdapter(null, server2));
IServer[] servers = ServerCore.getServers();
if (servers != null) {
int size = servers.length;
for (int i = 0; i < size; i++) {
if (server2.equals(servers[i])) {
viewer.refresh(new ServerElementAdapter(null, servers[i]));
}
}
}
}
}
/**
* Handles the add of a new server resource.
*
* @param element
*/
protected void handleServerResourceAdded(Object element) {
//Trace.trace("add: " + element);
if (viewer == null)
return;
ServerElementAdapter adapter = new ServerElementAdapter(null, element);
adapter.setFlags((byte) 1);
if (element instanceof IServer) {
viewer.add(new TextResourceAdapter(null, TextResourceAdapter.STYLE_SERVERS), adapter);
}
}
/**
* Updates an element in the tree.
*
* @param element
*/
protected void handleServerResourceChanged(Object element) {
//Trace.trace("change: " + element);
if (viewer == null)
return;
if (element instanceof IServer) {
ServerElementAdapter adapter = new ServerElementAdapter(null, element);
adapter.setFlags((byte) 1);
viewer.refresh(adapter);
}
}
/**
* Handles the removal of a server resource.
*
* @param element
*/
protected void handleServerResourceRemoved(Object element) {
//Trace.trace("remove: " + element);
if (viewer == null)
return;
TextResourceAdapter.deleted = element;
if (element instanceof IServer) {
//IServer server = (IServer) element;
TextResourceAdapter adapter = new TextResourceAdapter(null, TextResourceAdapter.STYLE_SERVERS);
viewer.refresh(adapter);
/*IServerConfiguration configuration = Reference.getServerConfigurationByRef(server.getConfigurationRef());
boolean used = false;
Iterator iterator = ServerCore.getResourceManager().getServers().iterator();
while (iterator.hasNext()) {
IServer server2 = (IServer) iterator.next();
if (!server.equals(server2)) {
IServerConfiguration cfg = Reference.getServerConfigurationByRef(server2.getConfigurationRef());
if (cfg != null && cfg.equals(configuration)) {
used = true;
}
}
}
if (!used) {
ServerLifecycleAdapter adapter2 = new ServerLifecycleAdapter(null, configuration);
adapter2.setFlags((byte) 1);
viewer.add(new TextResourceAdapter(null, TextResourceAdapter.STYLE_LOOSE_CONFIGURATIONS), adapter2);
}*/
}
}
}