AbstractGazetteer.java
001 /*
002  * AbstractGazetteer.java
003  *
004  * Copyright (c) 2002, The University of Sheffield.
005  *
006  * This file is part of GATE (see http://gate.ac.uk/), and is free
007  * software, licenced under the GNU Library General Public License,
008  * Version 2, June1991.
009  *
010  * A copy of this licence is included in the distribution in the file
011  * licence.html, and is also available at http://gate.ac.uk/gate/licence.html.
012  *
013  * borislav popov 02/2002
014  *
015  */
016 package gate.creole.gazetteer;
017 
018 import gate.creole.AbstractLanguageAnalyser;
019 import gate.creole.ResourceInstantiationException;
020 import gate.creole.metadata.CreoleParameter;
021 import gate.creole.metadata.Optional;
022 import gate.creole.metadata.RunTime;
023 
024 import java.util.HashSet;
025 import java.util.Iterator;
026 import java.util.Set;
027 
028 /**AbstractGazetteer
029  * This class implements the common-for-all methods of the Gazetteer interface*/
030 public abstract class AbstractGazetteer
031   extends AbstractLanguageAnalyser implements Gazetteer {
032 
033   private static final long serialVersionUID = 223125105523762358L;
034 
035   /** the set of gazetteer listeners */
036   protected Set<GazetteerListener> listeners = new HashSet<GazetteerListener>();
037 
038   /** Used to store the annotation set currently being used for the newly
039    * generated annotations*/
040   protected String annotationSetName;
041 
042   /** the encoding of the gazetteer */
043   protected String encoding = "UTF-8";
044 
045   /**
046    * The value of this property is the URL that will be used for reading the
047    * lists that define this Gazetteer
048    */
049   protected java.net.URL listsURL;
050 
051   /**
052    * Should this gazetteer be case sensitive. The default value is true.
053    */
054   protected Boolean caseSensitive = new Boolean(true);
055 
056   /**
057    * Should this gazetteer only match whole words. The default value is
058    <tt>true</tt>.
059    */
060   protected Boolean wholeWordsOnly = new Boolean(true);
061 
062   /**
063    * Should this gazetteer only match the longest string starting from any 
064    * offset? This parameter is only relevant when the list of lookups contains
065    * proper prefixes of other entries (e.g when both &quot;Dell&quot; and 
066    * &quot;Dell Europe&quot; are in the lists). The default behaviour (when this
067    * parameter is set to <tt>true</tt>) is to only match the longest entry, 
068    * &quot;Dell Europe&quot; in this example. This is the default GATE gazetteer
069    * behaviour since version 2.0. Setting this parameter to <tt>false</tt> will 
070    * cause the gazetteer to match all possible prefixes.
071    */
072   protected Boolean longestMatchOnly = new Boolean(true);
073   
074   /** the linear definition of the gazetteer */
075   protected LinearDefinition definition;
076 
077   /** reference to mapping definition info
078    *  allows filling of Lookup.ontologyClass according to a list*/
079   protected MappingDefinition mappingDefinition;
080 
081 
082   /**
083    * Sets the AnnotationSet that will be used at the next run for the newly
084    * produced annotations.
085    */
086   @Override
087   @RunTime
088   @Optional
089   @CreoleParameter(comment="The annotation set to be used for the generated annotations")
090   public void setAnnotationSetName(String newAnnotationSetName) {
091     annotationSetName = newAnnotationSetName;
092   }
093 
094   /**
095    * Gets the AnnotationSet that will be used at the next run for the newly
096    * produced annotations.
097    */
098   @Override
099   public String getAnnotationSetName() {
100     return annotationSetName;
101   }
102 
103   @Override
104   @CreoleParameter(comment="The encoding used for reading the definitions", defaultValue="UTF-8")
105   public void setEncoding(String newEncoding) {
106     encoding = newEncoding;
107   }
108 
109   @Override
110   public String getEncoding() {
111     return encoding;
112   }
113 
114   @Override
115   public java.net.URL getListsURL() {
116     return listsURL;
117   }
118 
119   @Override
120   @CreoleParameter(comment="The URL to the file with list of lists", suffixes="def", defaultValue="resources/gazetteer/lists.def")
121   public void setListsURL(java.net.URL newListsURL) {
122     listsURL = newListsURL;
123   }
124 
125   @Override
126   @CreoleParameter(comment="Should this gazetteer diferentiate on case?", defaultValue="true")
127   public void setCaseSensitive(Boolean newCaseSensitive) {
128     caseSensitive = newCaseSensitive;
129   }
130 
131   @Override
132   public Boolean getCaseSensitive() {
133     return caseSensitive;
134   }
135 
136   @Override
137   public void setMappingDefinition(MappingDefinition mapping) {
138     mappingDefinition = mapping;
139   }
140 
141   @Override
142   public MappingDefinition getMappingDefinition(){
143     return mappingDefinition;
144   }
145   
146   /**
147    @return the longestMatchOnly
148    */
149   public Boolean getLongestMatchOnly() {
150     return longestMatchOnly;
151   }
152 
153   /**
154    @param longestMatchOnly the longestMatchOnly to set
155    */
156   @RunTime
157   @CreoleParameter(comment="Should this gazetteer only match the longest string starting from any offset?", defaultValue="true")
158   public void setLongestMatchOnly(Boolean longestMatchOnly) {
159     this.longestMatchOnly = longestMatchOnly;
160   }
161 
162   /**Gets the linear definition of this gazetteer. there is no parallel
163    * set method because the definition is loaded through the listsUrl
164    * on init().
165    @return the linear definition of the gazetteer */
166   @Override
167   public LinearDefinition getLinearDefinition() {
168     return definition;
169   }
170 
171   @Override
172   public void reInit() throws ResourceInstantiationException {
173     super.reInit();
174     fireGazetteerEvent(new GazetteerEvent(this,GazetteerEvent.REINIT));
175   }//reInit()
176 
177   /**
178    * fires a Gazetteer Event
179    @param ge Gazetteer Event to be fired
180    */
181   @Override
182   public void fireGazetteerEvent(GazetteerEvent ge) {
183     Iterator<GazetteerListener> li = listeners.iterator();
184     while li.hasNext()) {
185       GazetteerListener gl = li.next();
186       gl.processGazetteerEvent(ge);
187     }
188   }
189 
190   /**
191    * Registers a Gazetteer Listener
192    @param gl Gazetteer Listener to be registered
193    */
194   @Override
195   public void addGazetteerListener(GazetteerListener gl){
196     if null!=gl )
197       listeners.add(gl);
198   }
199 
200   /**
201    * Gets the value for the {@link #wholeWordsOnly} parameter.
202    @return a Boolean value.
203    */
204   public Boolean getWholeWordsOnly() {
205     return wholeWordsOnly;
206   }
207 
208   /**
209    * Sets the value for the {@link #wholeWordsOnly} parameter.
210    @param wholeWordsOnly a Boolean value.
211    */
212   @RunTime
213   @CreoleParameter(comment="Should this gazetteer only match whole words?", defaultValue="true")
214   public void setWholeWordsOnly(Boolean wholeWordsOnly) {
215     this.wholeWordsOnly = wholeWordsOnly;
216   }
217 
218 }//class AbstractGazetteer