AnalyserRunningStrategy.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  *  Valentin Tablan 11 Apr 2002
011  *
012  *  $Id: AnalyserRunningStrategy.java 17530 2014-03-04 15:57:43Z markagreenwood $
013  */
014 package gate.creole;
015 
016 import gate.*;
017 import gate.util.GateRuntimeException;
018 
019 /**
020  * A type running strategy that decides whether the associated PR needs to be
021  * run based on the value of a specified feature on the document that the PR
022  * needs to be run on.
023  * It can only be used for {@link LanguageAnalyser}s because it needs the
024  * document the PR will run on.
025  */
026 
027 public class AnalyserRunningStrategy implements RunningStrategy{
028 
029   public AnalyserRunningStrategy(LanguageAnalyser pr, int runMode,
030                                  String featureName, String featureValue){
031     this.pr = pr;
032     this.runMode = runMode;
033     this.featureName = featureName;
034     this.featureValue = featureValue;
035   }
036 
037   /**
038    * If the runMode is {@link #RUN_ALWAYS} returns true.
039    * If the runMode is {@link #RUN_NEVER} returns false.
040    * If the runMode is {@link #RUN_CONDITIONAL}:
041    <ul>
042    <li>if the document is null returns false</li>
043    <li>if the document features are null
044    *  <ul>
045    *  <li>if {@link #featureName} is null returns true</li>
046    *  <li>if {@link #featureName} is not null returns false</li>
047    *  </ul></li>
048    <li>if the document features are not null
049    <ul>
050    *  <li>if {@link #featureName} is null returns true</li>
051    *  <li>if {@link #featureName} is not null and the document features contain
052    *  such a feature returns true if the value of the feature is
053    *  {@link #featureValue} and false otherwise.</li>
054    </ul></li>
055    </ul>
056    @return <tt>boolean</tt> value.
057    */
058   @Override
059   public boolean shouldRun() {
060     if(runMode == RUN_ALWAYSreturn true;
061     if(runMode == RUN_NEVERreturn false;
062     if(runMode == RUN_CONDITIONAL){
063       if(featureName == null || featureName.length() == 0return true;
064       Document doc = pr.getDocument();
065       if(doc != null){
066         FeatureMap fm = doc.getFeatures();
067         if(fm != null){
068           Object actualValue = fm.get(featureName);
069           return (actualValue == null && featureValue == null)
070                   ||
071                  (actualValue != null && actualValue.equals(featureValue));
072         }else return featureName == null;
073       }else return false;
074     }
075     throw new GateRuntimeException("Unknown run mode!");
076   }
077 
078   @Override
079   public int getRunMode() {
080     return runMode;
081   }
082 
083   public void setRunMode(int mode){
084     this.runMode = mode;
085   }
086 
087   public void setFeatureName(String name){
088     this.featureName = name;
089   }
090 
091   public void setFeatureValue(String value){
092     this.featureValue = value;
093   }
094 
095   public String getFeatureName() {
096     return featureName;
097   }
098 
099   public String getFeatureValue() {
100     return featureValue;
101   }
102 
103   @Override
104   public ProcessingResource getPR() {
105     return pr;
106   }
107 
108   public void setProcessingResource(ProcessingResource pr){
109     if(pr instanceof LanguageAnalyser){
110       this.pr = (LanguageAnalyser)pr;
111     }else throw new GateRuntimeException(
112       getClass().getName() " can only be used for " +
113       LanguageAnalyser.class.getName() "!\n" +
114       pr.getClass().getName() " is not a " +
115       LanguageAnalyser.class.getName() "!");
116   }
117 
118   protected LanguageAnalyser pr;
119   protected int runMode = RUN_ALWAYS;
120   protected String featureName;
121   protected String featureValue;
122 }