/*******************************************************************************
* Copyright (c) 2007 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.seam.ui.views;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Display;
import org.jboss.tools.seam.core.ISeamProject;
import org.jboss.tools.seam.core.SeamCorePlugin;
/**
* This content provider is designed for stand-alone Seam Components view
* to build all the tree starting from the workspace root.
*
* @author Viacheslav Kabanovich
*/
public class RootContentProvider extends AbstractSeamContentProvider {
IWorkspaceRoot root;
public RootContentProvider() {}
/**
* Returns child nodes for the tree of stand alone Seam Components view.
* On the first level, array of ISeamProject objects for projects that are
* seam projects is returned.
*/
@Override
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof IWorkspaceRoot) {
IWorkspaceRoot root = (IWorkspaceRoot)parentElement;
IProject[] ps = root.getProjects();
List<IProject> children = new ArrayList<IProject>();
for (int i = 0; i < ps.length; i++) {
if(!ps[i].isAccessible()) continue;
ISeamProject p = SeamCorePlugin.getSeamProject(ps[i], false);
if(p != null) {
if(!processed.contains(p)) {
processed.add(p);
p.addSeamProjectListener(this);
}
children.add(p.getProject());
}
}
return children.toArray(new IProject[0]);
} else if(parentElement instanceof IProject) {
ISeamProject p = SeamCorePlugin.getSeamProject((IProject)parentElement, false);
if(p != null) {
return super.getChildren(p);
} else {
return new Object[0];
}
} else {
return super.getChildren(parentElement);
}
}
@Override
public Object getParent(Object element) {
if(element instanceof ISeamProject || element instanceof IProject) {
return root;
} else {
Object o = super.getParent(element);
if(o instanceof ISeamProject) {
return ((ISeamProject)o).getProject();
}
return o;
}
}
protected void handlePreDelete(IResource resource) {
if(resource instanceof IProject && viewer != null) {
final IProject p = (IProject)resource;
viewer.getControl().getDisplay().asyncExec(new Runnable() {
public void run() {
if(viewer != null) {
viewer.remove(p);
}
}
});
}
}
protected void handleProjectAdded(IProject project) {
refresh();
}
protected void handleProjectInfoChanged(IProject project) {
refresh();
}
protected Object getTreeObject(Object source) {
if(source instanceof ISeamProject) {
return ((ISeamProject)source).getProject();
}
return source;
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
super.inputChanged(viewer, oldInput, newInput);
if(newInput instanceof IWorkspaceRoot || newInput == null) {
root = (IWorkspaceRoot)newInput;
}
}
@Override
public void dispose() {
super.dispose();
root = null;
}
}