|
SerialAnalyserController |
|
1 /* 2 * Copyright (c) 1998-2001, The University of Sheffield. 3 * 4 * This file is part of GATE (see http://gate.ac.uk/), and is free 5 * software, licenced under the GNU Library General Public License, 6 * Version 2, June 1991 (in the distribution as file licence.html, 7 * and also available at http://gate.ac.uk/gate/licence.html). 8 * 9 * Valentin Tablan 08/10/2001 10 * 11 * $Id: SerialAnalyserController.java,v 1.6 2001/11/29 15:36:37 valyt Exp $ 12 * 13 */ 14 15 package gate.creole; 16 17 import gate.*; 18 import gate.util.*; 19 20 import java.util.*; 21 22 /** 23 * This class implements a SerialController that only contains 24 * {@link gate.LanguageAnalyser}s. 25 * It has a {@link gate.Corpus} and its execute method runs all the analysers in 26 * turn over each of the documents in the corpus. 27 */ 28 public class SerialAnalyserController extends SerialController { 29 30 public gate.Corpus getCorpus() { 31 return corpus; 32 } 33 34 public void setCorpus(gate.Corpus corpus) { 35 this.corpus = corpus; 36 } 37 38 /** Run the Processing Resources in sequence. */ 39 public void execute() throws ExecutionException{ 40 if(corpus == null) throw new ExecutionException( 41 "(SerialAnalyserController) \"" + getName() + "\":\n" + 42 "The corpus supplied for execution was null!"); 43 //iterate through the documents in the corpus 44 for(int i = 0; i < corpus.size(); i++){ 45 boolean docWasLoaded = corpus.isDocumentLoaded(i); 46 Document doc = (Document)corpus.get(i); 47 //run the system over this document 48 49 //set the doc and corpus 50 for(int j = 0; j < prList.size(); j++){ 51 ((LanguageAnalyser)prList.get(j)).setDocument(doc); 52 ((LanguageAnalyser)prList.get(j)).setCorpus(corpus); 53 } 54 55 super.execute(); 56 57 corpus.unloadDocument(doc); 58 if(!docWasLoaded) Factory.deleteResource(doc); 59 } 60 } 61 62 /** 63 * Overidden from {@link SerialController} to only allow 64 * {@link LanguageAnalyser}s as components. 65 */ 66 public void add(ProcessingResource pr){ 67 if(pr instanceof LanguageAnalyser){ 68 super.add(pr); 69 }else{ 70 throw new GateRuntimeException(getClass().getName() + 71 "only accepts " + 72 LanguageAnalyser.class.getName() + 73 "s as components\n" + 74 pr.getClass().getName() + 75 " is not!"); 76 } 77 } 78 /** 79 * Sets the current document to the memeber PRs 80 */ 81 protected void setDocToPrs(Document doc){ 82 Iterator prIter = getPRs().iterator(); 83 while(prIter.hasNext()){ 84 ((LanguageAnalyser)prIter.next()).setDocument(doc); 85 } 86 } 87 88 89 /** 90 * Checks whether all the contained PRs have all the required runtime 91 * parameters set. Ignores the corpus and document parameters as these will 92 * be set at run time. 93 * 94 * @return a {@link List} of {@link ProcessingResource}s that have required 95 * parameters with null values if they exist <tt>null</tt> otherwise. 96 * @throw {@link ResourceInstantiationException} if problems occur while 97 * inspecting the parameters for one of the resources. These will normally be 98 * introspection problems and are usually caused by the lack of a parameter 99 * or of the read accessor for a parameter. 100 */ 101 public List getOffendingPocessingResources() 102 throws ResourceInstantiationException{ 103 //take all the contained PRs 104 ArrayList badPRs = new ArrayList(getPRs()); 105 //remove the ones that no parameters problems 106 Iterator prIter = getPRs().iterator(); 107 while(prIter.hasNext()){ 108 ProcessingResource pr = (ProcessingResource)prIter.next(); 109 ResourceData rData = (ResourceData)Gate.getCreoleRegister(). 110 get(pr.getClass().getName()); 111 //this is a list of lists 112 List parameters = rData.getParameterList().getRuntimeParameters(); 113 //remove corpus and document 114 List newParameters = new ArrayList(); 115 Iterator pDisjIter = parameters.iterator(); 116 while(pDisjIter.hasNext()){ 117 List aDisjunction = (List)pDisjIter.next(); 118 List newDisjunction = new ArrayList(aDisjunction); 119 Iterator internalParIter = newDisjunction.iterator(); 120 while(internalParIter.hasNext()){ 121 Parameter parameter = (Parameter)internalParIter.next(); 122 if(parameter.getName().equals("corpus") || 123 parameter.getName().equals("document")) internalParIter.remove(); 124 } 125 if(!newDisjunction.isEmpty()) newParameters.add(newDisjunction); 126 } 127 128 if(AbstractResource.checkParameterValues(pr, newParameters)){ 129 badPRs.remove(pr); 130 } 131 } 132 return badPRs.isEmpty() ? null : badPRs; 133 } 134 135 136 private gate.Corpus corpus; 137 }
|
SerialAnalyserController |
|