/**
*
*/
package de.hannesniederhausen.storynotes.ui.internal.navigation.widgets;
import java.util.ArrayList;
import java.util.Collections;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import de.hannesniederhausen.storynotes.model.Category;
import de.hannesniederhausen.storynotes.model.File;
import de.hannesniederhausen.storynotes.model.Project;
/**
* A {@link IContentProvider} used by the navigation bar, which
* creates the content based on an Storynotes model element.
*
* It iterates through the eContainer attirbutes to create the
* list for the navigation.
*
* @author Hannes Niederhausen
*
*/
public class StoryNotesModelContentProvider implements ITreeContentProvider{
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
ArrayList<EObject> parents = new ArrayList<EObject>(5);
EObject currObject = (EObject) inputElement;
do {
parents.add(currObject);
currObject = currObject.eContainer();
} while (currObject!=null);
Collections.reverse(parents);
return parents.toArray();
}
@Override
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof File) {
File file = (File) parentElement;
return file.getProjects().toArray();
}
if (parentElement instanceof Category) {
Category c = (Category) parentElement;
return c.getNotes().toArray();
}
if (parentElement instanceof Project) {
Project p = (Project) parentElement;
return p.getCategories().toArray();
}
return new Object[0];
}
@Override
public Object getParent(Object element) {
if ((element instanceof File) || (element==null))
return null;
else
return ((EObject)element).eContainer();
}
@Override
public boolean hasChildren(Object element) {
if ((element instanceof File) || (element==null))
return false;
return true;
}
}