/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.project.editor.variables; import static com.google.common.collect.Iterables.transform; import java.util.List; import org.eclipse.core.runtime.Path; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.jface.viewers.Stylers; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.TextStyle; import org.rf.ide.core.project.RobotProjectConfig.ReferencedVariableFile; import org.robotframework.ide.eclipse.main.plugin.RedImages; import org.robotframework.ide.eclipse.main.plugin.RedTheme; import org.robotframework.ide.eclipse.main.plugin.project.editor.RedProjectEditorInput; import org.robotframework.ide.eclipse.main.plugin.project.editor.RedProjectEditorInput.RedXmlProblem; import org.robotframework.red.graphics.ImagesManager; import org.robotframework.red.viewers.ElementAddingToken; import org.robotframework.red.viewers.RedCommonLabelProvider; import com.google.common.base.Joiner; class VariableFilesLabelProvider extends RedCommonLabelProvider { private final RedProjectEditorInput editorInput; public VariableFilesLabelProvider(final RedProjectEditorInput editorInput) { this.editorInput = editorInput; } @Override public StyledString getStyledText(final Object element) { if (element instanceof ReferencedVariableFile) { final ReferencedVariableFile varFile = (ReferencedVariableFile) element; return getStyledText(varFile, editorInput.getProblemsFor(varFile)); } else if (element instanceof ElementAddingToken) { return ((ElementAddingToken) element).getStyledText(); } else { return new StyledString(); } } private StyledString getStyledText(final ReferencedVariableFile element, final List<RedXmlProblem> problems) { final ReferencedVariableFile varFile = element; final StyledString label = new StyledString(); final boolean hasProblems = !problems.isEmpty(); final boolean hasErrors = RedXmlProblem.hasErrors(problems); final Styler styler = hasProblems ? (hasErrors ? Stylers.Common.ERROR_STYLER : Stylers.Common.WARNING_STYLER) : Stylers.Common.EMPTY_STYLER; label.append(Path.fromPortableString(varFile.getPath()).lastSegment(), styler); label.append(' '); label.append("- " + new Path(varFile.getPath()), new Styler() { @Override public void applyStyles(final TextStyle textStyle) { textStyle.foreground = RedTheme.getEclipseDecorationColor(); } }); return label; } @Override public Image getImage(final Object element) { if (element instanceof ElementAddingToken) { return ((ElementAddingToken) element).getImage(); } else { final ReferencedVariableFile varFile = (ReferencedVariableFile) element; final List<RedXmlProblem> problems = editorInput.getProblemsFor(varFile); if (RedXmlProblem.hasErrors(problems)) { return ImagesManager.getImage(RedImages.getRobotUnknownVariableImage()); } else if (!problems.isEmpty()) { return ImagesManager.getImage(RedImages.getRobotWarnedVariableImage()); } else { return ImagesManager.getImage(RedImages.getRobotScalarVariableImage()); } } } @Override public String getToolTipText(final Object element) { if (element instanceof ReferencedVariableFile) { final ReferencedVariableFile varFile = (ReferencedVariableFile) element; final List<RedXmlProblem> problems = editorInput.getProblemsFor(varFile); final String descriptions = Joiner.on('\n').join(transform(problems, RedXmlProblem.toDescriptions())); return descriptions.isEmpty() ? null : descriptions; } return null; } @Override public Image getToolTipImage(final Object element) { if (element instanceof ReferencedVariableFile) { final ReferencedVariableFile varFile = (ReferencedVariableFile) element; final List<RedXmlProblem> problems = editorInput.getProblemsFor(varFile); if (RedXmlProblem.hasErrors(problems)) { return ImagesManager.getImage(RedImages.getErrorImage()); } else if (!problems.isEmpty()) { return ImagesManager.getImage(RedImages.getWarningImage()); } } return null; } }