/******************************************************************************* * 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 mmrnmhrm.ui.navigator; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Path; import melnorme.lang.ide.core.LangCore_Actual; import melnorme.lang.ide.core.project_model.view.DependenciesContainer; import melnorme.lang.ide.ui.navigator.AbstractNavigatorContentProvider; import melnorme.lang.ide.ui.navigator.NavigatorElementsSwitcher; import melnorme.lang.tooling.bundle.BundleInfo; import melnorme.utilbox.collections.ArrayList2; import mmrnmhrm.core.workspace.viewmodel.StdLibContainer; public class DeeNavigatorContentProvider extends AbstractNavigatorContentProvider { @Override protected LangNavigatorSwitcher_HasChildren hasChildren_switcher() { return new LangNavigatorSwitcher_HasChildren() { }; } @Override protected LangNavigatorSwitcher_GetChildren getChildren_switcher() { return new LangNavigatorSwitcher_GetChildren() { @Override public void addFirstProjectChildren(IProject project, ArrayList2<Object> projectChildren) { BundleInfo projectInfo = LangCore_Actual.getBundleModel().getBundleInfo(project); if(projectInfo != null) { DependenciesContainer dubContainer = new DependenciesContainer(projectInfo, project); projectChildren.add(dubContainer); projectChildren.add(new StdLibContainer(projectInfo.getCompilerInstall(), project)); } } }; } @Override protected LangNavigatorSwitcher_GetParent getParent_switcher() { return new LangNavigatorSwitcher_GetParent() { }; } /* ----------------- specific switcher ----------------- */ public static interface DeeNavigatorAllElementsSwitcher<RET> extends NavigatorElementsSwitcher<RET> { @Override default RET visitFolder(IFolder folder) { if(isDubCacheFolder(folder)) { return visitDubCacheFolder(folder); } if(isDubSourceFolder(folder)) { return visitDubSourceFolder(folder); } return null; } public abstract RET visitDubCacheFolder(IFolder element); public abstract RET visitDubSourceFolder(IFolder element); } public static boolean isDubCacheFolder(IFolder folder) { if(folder.getProjectRelativePath().equals(new Path(".dub"))) { return true; } return false; } public static boolean isDubSourceFolder(IFolder folder) { IProject project = folder.getProject(); BundleInfo projectInfo = LangCore_Actual.getBundleModel().getBundleInfo(project); if(projectInfo == null) { return false; } java.nio.file.Path[] sourceFolders = projectInfo.getMainBundle().getEffectiveSourceFolders(); for (java.nio.file.Path srcFolderPath : sourceFolders) { if(folder.getProjectRelativePath().toFile().toPath().equals(srcFolderPath)) { return true; } } return false; } }