package net.sf.eclipsefp.haskell.ui.internal.views.projectexplorer; import net.sf.eclipsefp.haskell.core.util.ResourceUtil; import net.sf.eclipsefp.haskell.ui.internal.views.projectexplorer.model.GHCSystemLibrary; import net.sf.eclipsefp.haskell.util.FileUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.jface.viewers.Viewer; import org.eclipse.ui.views.navigator.ResourceSorter; public class HaskellResourceExtensionSorter extends ResourceSorter { public HaskellResourceExtensionSorter() { super(ResourceSorter.NAME); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ @Override public int compare( final Viewer viewer, final Object e1, final Object e2 ) { if (isCabal(e1) && isCabal(e2)) { return super.compare( viewer, e1, e2 ); } else if (isCabal(e1)) { return -1; } else if (isCabal(e2)) { return 1; } else if (isSourceFolder(e1) && isSourceFolder(e2)) { return super.compare( viewer, e1, e2 ); } else if (isSourceFolder(e1)) { return -1; } else if (isSourceFolder(e2)) { return 1; } else if (e1 instanceof GHCSystemLibrary && e2 instanceof GHCSystemLibrary) { return super.compare( viewer, e1, e2 ); } else if (e1 instanceof GHCSystemLibrary) { return -1; } else if (e2 instanceof GHCSystemLibrary) { return 1; } else { return super.compare( viewer, e1, e2 ); } } public boolean isCabal(final Object o) { if (o instanceof IFile) { IFile f = (IFile)o; if (FileUtil.hasCabalExtension( f )) { return true; } } return false; } public boolean isSourceFolder(final Object o) { if (o instanceof IFolder) { IFolder f = (IFolder)o; if (ResourceUtil.isSourceFolder( f )) { return true; } } return false; } }