/** * Copyright 2010 The University of North Carolina at Chapel Hill * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package unc.lib.cdr.workbench.views; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Display; /** * Provides a tree of METS objects as organized in the DOM document. This supports a raw view of the data captured in * workbench METS projects. * * @author Gregory Jansen * */ public class MetsProjectContentProvider implements ITreeContentProvider, IResourceChangeListener { private static final Object[] NO_CHILDREN = {}; private Object input = null; Viewer viewer = null; public MetsProjectContentProvider() { ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override public void dispose() { ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface .viewers.Viewer, java.lang.Object, * java.lang.Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.viewer = viewer; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang. Object) */ @Override public Object[] getChildren(Object parent) { // System.out.println("getChildren called with parent: " + parent + " (" + parent.getClass() + ")"); if (parent instanceof WorkbenchWorkbenchRoot) { List<Object> results = new ArrayList<Object>(); for (IProject p : ResourcesPlugin.getWorkspace().getRoot().getProjects()) { // try { // if (p.isOpen() && p.hasNature(MetsProjectNature.NATURE_ID)) { results.add(p); // } // } catch (CoreException e) { // throw new Error("Unexpected"); // } } return results.toArray(); } /* * else if (parent instanceof IProject) { IProject p = (IProject) parent; MetsProjectNature n; try { n = * (MetsProjectNature) p.getNature(MetsProjectNature.NATURE_ID); return n.getProjectElements(); } catch * (CoreException e) { throw new Error("Unexpected"); } } */ return NO_CHILDREN; } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object ) */ @Override public Object getParent(Object element) { if (element instanceof IProject) { return input; } /* * else if(element instanceof ICustomProjectElement) { ICustomProjectElement e = * (ICustomProjectElement)element; return e.getParent(); } */else { return null; } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang. Object) */ @Override public boolean hasChildren(Object element) { if (element instanceof IProject) { return ((IProject) element).isOpen(); } else if (element instanceof WorkbenchWorkbenchRoot) { return true; } /* * else if(element instanceof ICustomProjectElement) { ICustomProjectElement e = * (ICustomProjectElement)element; return e.hasChildren(); } */else { return false; } } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java .lang.Object) */ @Override public Object[] getElements(Object inputElement) { return getChildren(inputElement); } /* * (non-Javadoc) * * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org * .eclipse.core.resources.IResourceChangeEvent) */ @Override public void resourceChanged(IResourceChangeEvent event) { Display.getDefault().asyncExec(new Runnable() { public void run() { if (!viewer.getControl().isDisposed()) { viewer.refresh(); } } }); } }