/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.openide.text; /** Classes which are capable of holding annotations must * extend this abstract class. The examples of these classes are * Line or Line.Part. It allows to add/remove * Annotation(s) to this class. There is also support for * listening on changes of the properties like deleted or * count of attached annotations. * * @author David Konecny, Jaroslav Tulach * @since 1.20 */ public abstract class Annotatable extends Object { /** Property name of the count of annotations */ public static final String PROP_ANNOTATION_COUNT = "annotationCount"; // NOI18N /** Property name for the deleted attribute */ public static final String PROP_DELETED = "deleted"; // NOI18N /** Property name for the content of the annotatable * @since 1.35 */ public static final String PROP_TEXT = "text"; // NOI18N /** Support for property change listeners*/ private java.beans.PropertyChangeSupport propertyChangeSupport; /** Count of all annotations attached to this instance. */ private int annotationCount; /** List of all annotations attached to this annotatable object */ private java.util.List attachedAnnotations; /** Whether the Annotatable object was deleted during * the editting of document or not. */ private boolean deleted; public Annotatable() { deleted = false; annotationCount = 0; propertyChangeSupport = new java.beans.PropertyChangeSupport(this); attachedAnnotations = new java.util.LinkedList(); } /** Add annotation to this Annotatable class * @param anno annotation which will be attached to this class */ protected void addAnnotation(Annotation anno) { annotationCount++; attachedAnnotations.add(anno); propertyChangeSupport.firePropertyChange (PROP_ANNOTATION_COUNT, annotationCount-1, annotationCount); } /** Remove annotation to this Annotatable class * @param anno annotation which will be detached from this class */ protected void removeAnnotation(Annotation anno) { annotationCount--; attachedAnnotations.remove(anno); propertyChangeSupport.firePropertyChange (PROP_ANNOTATION_COUNT, annotationCount+1, annotationCount); } /** Gets the list of all annotations attached to this annotatable object * @since 1.27 */ java.util.List getAnnotations() { return attachedAnnotations; } /** Add listeners on changes of annotatable properties * @param l change listener*/ final public void addPropertyChangeListener(java.beans.PropertyChangeListener l) { propertyChangeSupport.addPropertyChangeListener (l); } /** Remove listeners on changes of annotatable properties * @param l change listener*/ final public void removePropertyChangeListener(java.beans.PropertyChangeListener l) { propertyChangeSupport.removePropertyChangeListener (l); } /** Fire property change to registered listeners. */ final protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue); } /** Whether this Annotatable object was removed or not. * @return whether the Annotatable object was removed or not */ final public boolean isDeleted() { return deleted; } /** Get content of the annotatable. The listeners can listen * on changes of PROP_TEXT property to learn that content of Annotatable * is changing. * @return text representing the content of annotatable. The return value can be null, * what means that document is closed. * @since 1.35 */ abstract public String getText(); /** Setter for property deleted. * @param deleted New value of property deleted. */ void setDeleted(boolean deleted) { if (this.deleted != deleted) { this.deleted = deleted; propertyChangeSupport.firePropertyChange (PROP_DELETED, !deleted, deleted); } } /** The count of already attached annotations. Modules can use * this property to learn whether to this instance are * already attached some annotations or not. * @return count of attached annotations */ final public int getAnnotationCount() { return annotationCount; } }