/*******************************************************************************
* Copyright (c) 2014 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 com.github.rustdt.ide.ui.navigator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import melnorme.lang.ide.core.LangCore_Actual;
import melnorme.lang.ide.core.project_model.view.IBundleModelElement;
import melnorme.lang.ide.ui.LangImages;
import melnorme.lang.ide.ui.navigator.LangNavigatorLabelProvider;
import melnorme.lang.ide.ui.navigator.NavigatorElementsSwitcher;
import melnorme.lang.tooling.bundle.BundleInfo;
public class RustNavigatorLabelProvider extends LangNavigatorLabelProvider implements IStyledLabelProvider {
public static interface RustNavigatorLabelElementsSwitcher<RET> extends NavigatorElementsSwitcher<RET> {
@Override
default RET visitFolder(IFolder folder) {
if(folder.getProjectRelativePath().equals(new Path("src"))) {
return visitSourceFolder(folder);
}
if(folder.getProjectRelativePath().equals(new Path("tests"))) {
return visitTestsSourceFolder(folder);
}
if(folder.getProjectRelativePath().equals(new Path("target"))) {
return visitBuildOutpuFolder(folder);
}
return visitOther2(folder);
}
@Override
public abstract RET visitManifestFile(IFile element);
public abstract RET visitSourceFolder(IFolder element);
public abstract RET visitTestsSourceFolder(IFolder element);
public abstract RET visitBuildOutpuFolder(IFolder element);
}
@Override
protected DefaultGetStyledStringSwitcher getStyledString_switcher() {
return new RustNavigatorStyledStringSwitcher();
}
@Override
protected DefaultGetImageSwitcher getBaseImage_switcher() {
return new RustNavigatorImageSwitcher();
}
protected class RustNavigatorStyledStringSwitcher extends DefaultGetStyledStringSwitcher
implements RustNavigatorLabelElementsSwitcher<StyledString> {
@Override
public StyledString visitManifestFile(IFile element) {
BundleInfo bundleInfo = LangCore_Actual.getBundleModel().getBundleInfo(element.getProject());
if(bundleInfo == null) {
return null;
}
String bundleVersion = bundleInfo.getManifest().getVersion();
StyledString baseString = new StyledString(element.getName());
return appendBundleRef(baseString, bundleInfo.getCrateName(), bundleVersion);
}
@Override
public StyledString visitSourceFolder(IFolder element) {
return null;
}
@Override
public StyledString visitTestsSourceFolder(IFolder element) {
return null;
}
@Override
public StyledString visitBuildOutpuFolder(IFolder element) {
return null;
}
@Override
public StyledString visitBundleElement(IBundleModelElement bundleElement) {
return new BundleModelGetStyledStringSwitcher() {
}.switchBundleElement(bundleElement);
}
}
protected class RustNavigatorImageSwitcher extends DefaultGetImageSwitcher
implements RustNavigatorLabelElementsSwitcher<ImageDescriptor> {
@Override
public ImageDescriptor visitManifestFile(IFile element) {
return LangImages.NAV_PackageManifest;
}
@Override
public ImageDescriptor visitSourceFolder(IFolder element) {
return LangImages.NAV_SourceFolder;
}
@Override
public ImageDescriptor visitTestsSourceFolder(IFolder element) {
return LangImages.NAV_SourceFolderTests;
}
@Override
public ImageDescriptor visitBuildOutpuFolder(IFolder element) {
return LangImages.NAV_OutputFolder;
}
@Override
public ImageDescriptor visitBundleElement(IBundleModelElement bundleElement) {
return new BundleModelGetImageSwitcher() {
}.switchBundleElement(bundleElement);
}
}
}