/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package org.absmodels.abs.plugin.wizards.composites;
import static org.absmodels.abs.plugin.util.Constants.EMPTY_OBJECT_ARRAY;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.absmodels.abs.plugin.util.Constants;
import org.absmodels.abs.plugin.util.UtilityFunctions;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
/**
* ContentProvider for the Resource group composite. Lists all projects of the workspace and
* their member files.
* @author cseise
*
*/
public class ResourceGroupContentProvider implements ITreeContentProvider {
@Override
public void dispose() {
//no-op
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
//no-op
}
@Override
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
@Override
public Object[] getChildren(Object element) {
if (element instanceof IWorkspace) {
return getChildrenOf((IWorkspace) element);
} else if (element instanceof IContainer) {
return getChildenOf((IContainer) element);
}
return EMPTY_OBJECT_ARRAY;
}
private static Object[] getChildenOf(IContainer container) {
if (container.isAccessible()) {
List<Object> children = new ArrayList<Object>();
try {
for (IResource res : container.members()) {
if (res.isAccessible()) {
if (res instanceof IFile){
IFile file = (IFile) res;
if (UtilityFunctions.hasABSFileExtension(file)){
children.add(res);
}
}else{
children.add(res);
}
}
}
} catch (CoreException ce) {
}
return children.toArray();
}
return EMPTY_OBJECT_ARRAY;
}
private static Object[] getChildrenOf(IWorkspace workspace) {
List<IProject> projects = new ArrayList<IProject>();
Collections.addAll(projects, workspace.getRoot().getProjects());
List<IProject> projectsToRemove = new ArrayList<IProject>();
// filter out all projects that do not have an ABSNature
for (IProject p : projects) {
try {
if (p.isAccessible() && !p.hasNature(Constants.NATURE_ID)) {
projectsToRemove.add(p);
}
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
projects.removeAll(projectsToRemove);
return projects.toArray();
}
@Override
public Object getParent(Object element) {
if (element instanceof IResource) {
return ((IResource) element).getParent();
}
return null;
}
@Override
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
}