package net.sf.eclipsefp.haskell.ui.internal.views.outline; import java.util.List; import net.sf.eclipsefp.haskell.buildwrapper.types.OutlineDef; import net.sf.eclipsefp.haskell.buildwrapper.types.OutlineDef.OutlineDefType; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; /** * <p>Manages a list of OutlineDef for Outline view</p> * * @author JP Moresmau */ public class OutlineCP implements ITreeContentProvider{ //private Map<String,List<OutlineDef>> input; // private List<OutlineDef> input; /** * For elements that expand into an identically-named single element with an obvious * type, we could just expand directly into that child element's children. */ public boolean hasSingularChild( final Object o ){ if( !((OutlineDef)o).getTypes().contains( OutlineDefType.DATA )) { return false; } Object[] children = getRawChildren( o ); if( children.length != 1 ) { return false; } return ((OutlineDef)children[0]).getTypes().contains( OutlineDefType.CONSTRUCTOR) && ((OutlineDef)children[0]).getName().equals( ((OutlineDef)o).getName() ); } @Override public Object[] getChildren( final Object parentElement ) { Object[] result = getRawChildren( parentElement ); if( hasSingularChild( parentElement ) ) { return getChildren( result[0] ); } else { return result; } } public Object[] getRawChildren( final Object parentElement ) { //List<OutlineDef> l=input.get(((OutlineDef )parentElement).getID()); if (parentElement instanceof OutlineDef){ List<OutlineDef> l=((OutlineDef)parentElement).getChildren(); if (l!=null){ return l.toArray(); } } return new Object[0]; } @Override public Object getParent( final Object element ) { return null; } @Override public boolean hasChildren( final Object element ) { if (element instanceof OutlineDef){ List<OutlineDef> l=((OutlineDef)element).getChildren(); return l!=null && l.size()>0; } return true; } @Override public Object[] getElements( final Object inputElement ) { //return input.toArray(); //List<OutlineDef> l=input.get( null ); if (inputElement instanceof OutlineDef){ List<OutlineDef> l=((OutlineDef)inputElement).getChildren(); if (l!=null){ return l.toArray(); } } else if (inputElement instanceof List){ return ((List<?>)inputElement).toArray(); } return new Object[0]; } @Override public void dispose() { // input=null; } @Override public void inputChanged( final Viewer viewer, final Object oldInput, final Object newInput ) { // if (newInput instanceof List<?>){ // input=(List<OutlineDef>)newInput; // /* new HashMap<String, List<OutlineDef>>(); // for (Object o:(List<?>)newInput){ // OutlineDef od=(OutlineDef)o; // List<OutlineDef> l=input.get( od.getParentID() ); // if(l==null){ // l=new ArrayList<OutlineDef>(); // input.put( od.getParentID(), l ); // } // l.add( od ); // }*/ // } else { // input=Collections.emptyList(); // } } }