/******************************************************************************* * 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.ide.api.editor.text.annotation; import elemental.dom.Element; import com.google.gwt.resources.client.ImageResource; import org.vectomatic.dom.svg.ui.SVGResource; /** * Annotation managed by an{@link AnnotationModel}. * <p> * Annotations are typed, can have an associated text and can be marked as persistent and * deleted. Annotations which are not explicitly initialized with an annotation * type are of type <code>"org.eclipse.che.ide.api.editor.text.annotation.unknown"</code>. * </p> */ public class Annotation { /** * Constant for unknown annotation types.<p> * Value: <code>"org.eclipse.che.ide.api.editor.text.annotation.unknown"</code> */ public final static String TYPE_UNKNOWN = "org.eclipse.che.ide.api.editor.text.annotation.unknown"; //$NON-NLS-1$ /** The type of this annotation. */ private String type; /** Indicates whether this annotation is persistent or not. */ private boolean isPersistent = false; /** Indicates whether this annotation is marked as deleted or not. */ private boolean markedAsDeleted = false; /** The text associated with this annotation. */ private String text; /** Annotation drawing layer. */ protected int layer; /** Image associated with this annotation */ protected ImageResource image; /** Image associated with this annotation */ protected SVGResource imageSVG; /** Element associated with this annotation */ protected Element imageElement; /** Creates a new annotation that is not persistent and type less. */ protected Annotation() { this(null, false, null); } /** * Creates a new annotation with the given properties. * * @param type * the unique name of this annotation type * @param isPersistent * <code>true</code> if this annotation is * persistent, <code>false</code> otherwise * @param text * the text associated with this annotation */ public Annotation(String type, boolean isPersistent, String text) { this.type = type; this.isPersistent = isPersistent; this.text = text; } /** * Creates a new annotation with the given persistence state. * * @param isPersistent * <code>true</code> if persistent, <code>false</code> otherwise */ public Annotation(boolean isPersistent) { this(null, isPersistent, null, 0, null, null); } /** * Creates a new annotation with the given properties. * * @param type * the unique name of this annotation type * @param isPersistent * <code>true</code> if this annotation is * persistent, <code>false</code> otherwise * @param text * the text associated with this annotation * @param layer * annotation draw layer * @param image * image associated with this annotation */ public Annotation(String type, boolean isPersistent, String text, int layer, ImageResource image) { this(type, isPersistent, text, layer, image, null); } /** * Creates a new annotation with the given properties. * * @param type * the unique name of this annotation type * @param isPersistent * <code>true</code> if this annotation is * persistent, <code>false</code> otherwise * @param text * the text associated with this annotation * @param layer * annotation draw layer * @param imageSVG * image associated with this annotation */ public Annotation(String type, boolean isPersistent, String text, int layer, SVGResource imageSVG) { this(type, isPersistent, text, layer, null, imageSVG); } /** * Creates a new annotation with the given properties. * * @param type * the unique name of this annotation type * @param isPersistent * <code>true</code> if this annotation is * persistent, <code>false</code> otherwise * @param text * the text associated with this annotation * @param layer * annotation draw layer * @param image * image associated with this annotation * @param imageSVG * image associated with this annotation */ public Annotation(String type, boolean isPersistent, String text, int layer, ImageResource image, SVGResource imageSVG) { this.type = type; this.isPersistent = isPersistent; this.text = text; this.layer = layer; this.image = image; this.imageSVG = imageSVG; } /** * Returns whether this annotation is persistent. * * @return <code>true</code> if this annotation is persistent, <code>false</code> * otherwise */ public boolean isPersistent() { return isPersistent; } /** * Sets the type of this annotation. * * @param type * the annotation type */ public void setType(String type) { this.type = type; } /** * Returns the type of the annotation. * * @return the type of the annotation */ public String getType() { return type == null ? TYPE_UNKNOWN : type; } /** * Marks this annotation deleted according to the value of the * <code>deleted</code> parameter. * * @param deleted * <code>true</code> if annotation should be marked as deleted */ public void markDeleted(boolean deleted) { markedAsDeleted = deleted; } /** * Returns whether this annotation is marked as deleted. * * @return <code>true</code> if annotation is marked as deleted, <code>false</code> * otherwise */ public boolean isMarkedDeleted() { return markedAsDeleted; } /** * Sets the text associated with this annotation. * * @param text * the text associated with this annotation */ public void setText(String text) { this.text = text; } /** * Returns the text associated with this annotation. * * @return the text associated with this annotation or <code>null</code> */ public String getText() { return text; } /** * Return element resource for this annotation. * Note: if this method return <code>null</code>, this annotation not draw in left gutter * * @return */ public Element getImageElement() { return imageElement; } /** * Return the annotations drawing layer. * * @return int starting from 0 */ public int getLayer() { return layer; } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append("Annotation [type=").append(type) .append(", text=").append(text) .append(", layer=").append(layer) .append("]"); return builder.toString(); } }