AbstractDocumentView.java
001 /*
002  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  AbstractDocumentView.java
011  *
012  *  Valentin Tablan, Mar 25, 2004
013  *
014  *  $Id: AbstractDocumentView.java 17606 2014-03-09 12:12:49Z markagreenwood $
015  */
016 
017 package gate.gui.docview;
018 
019 import gate.Document;
020 import gate.creole.AbstractResource;
021 import gate.gui.Handle;
022 import gate.gui.annedit.AnnotationData;
023 
024 import java.util.ArrayList;
025 import java.util.List;
026 
027 import javax.swing.Action;
028 
029 /**
030  * A convenience implementation of {@link gate.gui.docview.DocumentView} that
031  * can be extended by implementers of document views.
032  * An implementation of a document view that extends this class will need to 
033  * provide implementations for the three abstract methods:
034  {@link #initGUI()}{@link #registerHooks()} and {@link #unregisterHooks()}.
035  */
036 @SuppressWarnings("serial")
037 public abstract class AbstractDocumentView extends AbstractResource
038                                            implements DocumentView {
039 
040   /**
041    * Notifies this view that it has become active or inactive.
042    * This method will initialise the GUI the first time the view becomes active.
043    @param active a boolean value.
044    */
045   @Override
046   public void setActive(boolean active) {
047     this.active = active;
048     if(active){
049       if(!guiInitialised){
050         initGUI();
051         guiInitialised = true;
052       }
053       registerHooks();
054     }else{
055       unregisterHooks();
056     }
057   }
058 
059   /**
060    * Returns the active state of this view. 
061    @return a boolean value
062    */
063   @Override
064   public boolean isActive() {
065     return active;
066   }
067 
068   @Override
069   public void setSelectedAnnotations(List<AnnotationData> selectedAnnots){
070     //do nothing
071   }
072   
073   /* 
074    * By default return an empty list of actions.
075    * @return an empty list.
076    */
077   @Override
078   public List<Action> getActions() {
079     return new ArrayList<Action>();
080   }
081   
082   /* 
083    * By default store the handle in the {@link #handle} field. 
084    */
085   @Override
086   public void setHandle(Handle handle) {
087     this.handle = handle;
088   }
089   
090   /**
091    * Stores the target (which should always be a {@link Document}) into the 
092    * {@link #document} field.
093    */
094   @Override
095   public void setTarget(Object target) {
096     this.document = (Document)target;
097   }
098   
099   /**
100    * Gets the document this view displays.
101    @return a {@link Document}
102    */
103   public Document getDocument(){
104     return document;
105   }
106   
107   /**
108    * Stores the owner of this view into the {@link #owner} field. The owner is 
109    * the {@link DocumentEditor} this view is part of.
110    */
111   @Override
112   public void setOwner(DocumentEditor editor) {
113     this.owner = editor;
114   }
115   
116   /**
117    @return the handle
118    */
119   public Handle getHandle() {
120     return handle;
121   }
122 
123   /**
124    @return the owner
125    */
126   public DocumentEditor getOwner() {
127     return owner;
128   }
129 
130   /**
131    * Implementers should override this method and use it for populating the GUI. 
132    *
133    */
134   protected abstract void initGUI();
135   
136   /**
137    * This method will be called whenever the view becomes active. Implementers 
138    * should use this to add hooks (such as mouse listeners) to the other views
139    * as required by their functionality. 
140    */
141   protected abstract void registerHooks();
142 
143   /**
144    * This method will be called whenever this view becomes inactive. 
145    * Implementers should use it to unregister whatever hooks they registered
146    * in {@link #registerHooks()}.
147    *
148    */
149   protected abstract void unregisterHooks();
150   
151   /**
152    * Stores the active state of this view.
153    */
154   protected boolean active = false;
155   
156   /**
157    * Stores the handle of this view.
158    */
159   protected Handle handle;
160   
161   /**
162    * Has the UI been initialised yet?
163    */
164   protected boolean guiInitialised = false;
165   
166   /**
167    * The document this view displays.
168    */
169   protected Document document;
170   
171   /**
172    * The {@link DocumentEditor} this view is part of.
173    */
174   protected DocumentEditor owner;
175 }