/******************************************************************************* * 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 org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import melnorme.lang.ide.core.LangCore; import melnorme.lang.ide.core.project_model.view.IBundleModelElement; interface NavigatorElementsSwitcher_Default<RET> { default RET switchElement(Object element) { if(element instanceof IResource) { IResource resource = (IResource) element; return visitResource(resource); } else if(element instanceof BuildTargetsContainer) { return visitBuildTargetsElement((BuildTargetsContainer) element); } else if(element instanceof BuildTargetElement) { return visitBuildTarget((BuildTargetElement) element); } else if(element instanceof IBundleModelElement) { return visitBundleElement((IBundleModelElement) element); } return visitOther2(element); } default RET visitResource(IResource resource) { int type = resource.getType(); if(type == IResource.PROJECT) { return visitProject((IProject) resource); } if(type == IResource.FOLDER) { return visitFolder((IFolder) resource); } if(type == IResource.FILE) { return visitFile((IFile) resource); } return visitWorkspaceRoot((IWorkspaceRoot) resource); } default RET visitProject(IProject project) { return visitOther2(project); } default RET visitFolder(IFolder folder) { return visitOther2(folder); } default RET visitFile(IFile file){ if(LangCore.getBundleModelManager().resourceIsManifest(file)) { return visitManifestFile(file); } return visitOther2(file); } default RET visitWorkspaceRoot(@SuppressWarnings("unused") IWorkspaceRoot workspaceRoot) { return null; } public abstract RET visitManifestFile(IFile element); public abstract RET visitBundleElement(IBundleModelElement bundleElement); public abstract RET visitBuildTargetsElement(BuildTargetsContainer buildTargetsContainer); public abstract RET visitBuildTarget(BuildTargetElement buildTarget); default RET visitOther2(@SuppressWarnings("unused") Object element) { return null; } }