/*******************************************************************************
* Copyright (c) 2015 Bruno Medeiros and other Contributors.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Bruno Medeiros - initial API and implementation
*******************************************************************************/
package melnorme.lang.ide.ui.navigator;
import java.text.Collator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.ViewerSorter;
import melnorme.lang.ide.core.project_model.view.BundleErrorElement;
import melnorme.lang.ide.core.project_model.view.BundleModelElementKind.BundleModelElementsSwitcher;
import melnorme.lang.ide.core.project_model.view.DependenciesContainer;
import melnorme.lang.ide.core.project_model.view.IBundleModelElement;
import melnorme.lang.ide.core.project_model.view.RawDependencyElement;
// We need to use Viewer even though it's deprecated because the Navigator Extension Point still expects it.
// See: org.eclipse.ui.internal.navigator.sorters.CommonSorterDescriptor.createSorter()
@SuppressWarnings("deprecation")
public abstract class LangNavigatorSorter extends ViewerSorter {
public LangNavigatorSorter() {
super();
}
public LangNavigatorSorter(Collator collator) {
super(collator);
}
@Override
public int category(Object element) {
Integer result = switcher_Sorter().switchElement(element);
if(result == null) {
return 0;
}
return result;
}
protected abstract LangNavigatorSorter_Switcher switcher_Sorter();
protected static abstract class LangNavigatorSorter_Switcher implements NavigatorElementsSwitcher<Integer> {
@Override
public Integer visitProject(IProject project) {
return -2;
}
@Override
public Integer visitFolder(IFolder folder) {
return -2;
}
@Override
public Integer visitManifestFile(IFile element) {
return 0;
}
@Override
public Integer visitBundleElement(IBundleModelElement bundleElement) {
return new BundleModelElementsSorterSwitcher().switchBundleElement(bundleElement);
}
@Override
public Integer visitBuildTargetsElement(BuildTargetsContainer buildTargetsElement) {
return -8;
}
@Override
public Integer visitBuildTarget(BuildTargetElement buildTargetElement) {
return buildTargetElement.getOrder();
}
}
public static abstract class BundleModelElementsSorterSwitcher_Default
implements BundleModelElementsSwitcher<Integer> {
@Override
public Integer visitDepContainer(DependenciesContainer element) {
return -10;
}
@Override
public Integer visitRawDepElement(RawDependencyElement element) {
return 0;
}
@Override
public Integer visitErrorElement2(BundleErrorElement element) {
return -10;
}
}
}