/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.languageserver.ide.editor; import elemental.dom.Element; import elemental.js.dom.JsElement; import org.eclipse.che.ide.api.editor.text.annotation.Annotation; import org.eclipse.che.ide.util.dom.Elements; import org.eclipse.che.plugin.languageserver.ide.LanguageServerResources; import org.eclipse.lsp4j.Diagnostic; import org.eclipse.lsp4j.DiagnosticSeverity; import org.vectomatic.dom.svg.ui.SVGImage; /** * @author Evgen Vidolob */ public class DiagnosticAnnotation extends Annotation { public static final String ERROR_ANNOTATION_TYPE = "org.eclipse.che.ls.error"; public static final String WARNING_ANNOTATION_TYPE = "org.eclipse.che.ls.warning"; public static final String INFO_ANNOTATION_TYPE = "org.eclipse.che.ls.info"; public static final String HINT_ANNOTATION_TYPE = "org.eclipse.che.ls.hint"; private static final int HINT_LAYER = 0; private static final int INFO_LAYER = 1; private static final int WARNING_LAYER = 2; private static final int ERROR_LAYER = 3; private static final LanguageServerResources RESOURCES = LanguageServerResources.INSTANCE; private static JsElement fgTaskElement = new SVGImage(RESOURCES.taskMark()).getElement().cast(); private static JsElement fgInfoElement = new SVGImage(RESOURCES.importItem()).getElement().cast(); private static JsElement fgWarningElement = new SVGImage(RESOURCES.markWarning()).getElement().cast(); private static JsElement fgErrorElement = new SVGImage(RESOURCES.markError()).getElement().cast(); private Diagnostic diagnostic; private Element imageElement = null; public DiagnosticAnnotation(Diagnostic diagnostic) { this.diagnostic = diagnostic; DiagnosticSeverity severity = diagnostic.getSeverity(); if (severity == null) { layer = ERROR_LAYER; setType(ERROR_ANNOTATION_TYPE); } else { switch (severity) { case Error: layer = ERROR_LAYER; setType(ERROR_ANNOTATION_TYPE); break; case Warning: layer = WARNING_LAYER; setType(WARNING_ANNOTATION_TYPE); break; case Information: layer = INFO_LAYER; setType(INFO_ANNOTATION_TYPE); break; case Hint: layer = HINT_LAYER; setType(HINT_ANNOTATION_TYPE); break; default: layer = ERROR_LAYER; setType(ERROR_ANNOTATION_TYPE); break; } } } public Diagnostic getDiagnostic() { return diagnostic; } @Override public String getText() { return diagnostic.getMessage(); } private void initializeImage() { imageElement = Elements.createDivElement(); imageElement.setClassName(RESOURCES.css().markElement()); final Element selectedImageElement = getSelectedImageElement(); if (selectedImageElement != null) { imageElement.appendChild(selectedImageElement.cloneNode(true)); } } private Element getSelectedImageElement() { final String type = getType(); switch (type) { case HINT_ANNOTATION_TYPE: return fgTaskElement; case INFO_ANNOTATION_TYPE: return fgInfoElement; case WARNING_ANNOTATION_TYPE: return fgWarningElement; case ERROR_ANNOTATION_TYPE: return fgErrorElement; default: return null; } } @Override public Element getImageElement() { if (imageElement == null) { initializeImage(); } return imageElement; } }