/*
* Transducer.java - transducer class
*
* Copyright (c) 1998-2001, The University of Sheffield.
*
* This file is part of GATE (see http://gate.ac.uk/), and is free
* software, licenced under the GNU Library General Public License,
* Version 2, June 1991 (in the distribution as file licence.html,
* and also available at http://gate.ac.uk/gate/licence.html).
*
* Hamish Cunningham, 24/07/98
*
* Minor modifications made by Luc Plamondon, Universit� de Montr�al, 27/11/03:
* - migrated original file from gate.jape to
* ca.umontreal.iro.rali.gate.jape package.
*
* $Id$
*/
package ca.umontreal.iro.rali.gate.jape;
import java.util.*;
import java.net.*;
import java.io.*;
import gate.annotation.*;
import gate.util.*;
import gate.event.*;
import gate.creole.*;
import gate.creole.ontology.Ontology;
import gate.*;
/**
* Represents a single or multiphase transducer.
*/
public abstract class Transducer implements Serializable
{
/** Debug flag */
private static final boolean DEBUG = false;
/** Name of this transducer. */
protected String name;
protected Ontology ontology = null;
/** Get the phase name of this transducer */
public String getName() { return name; }
/** Transduce a document. */
public abstract void transduce(Document doc, AnnotationSet inputAS,
AnnotationSet outputAS)
throws JapeException, ExecutionException;
/** Finish: replace dynamic data structures with Java arrays; called
* after parsing.
*/
public abstract void finish();
/** Clean up (delete action class files, for e.g.). */
public abstract void cleanUp();
/** Create a string representation of the object with padding. */
public abstract String toString(String pad);
/**
* Checks whether this PR has been interrupted since the lsat time its
* {@link ca.umontreal.iro.rali.gate.creole.MtlTransducer#execute() execute}
* method was called.
*/
public synchronized boolean isInterrupted(){
return interrupted;
}
/**
* Notifies this PR that it should stop its execution as soon as possible.
*/
public synchronized void interrupt(){
interrupted = true;
}
protected boolean interrupted = false;
public void setBaseURL(java.net.URL newBaseURL) {
baseURL = newBaseURL;
}
public java.net.URL getBaseURL() {
return baseURL;
}
public synchronized void removeProgressListener(ProgressListener l) {
if (progressListeners != null && progressListeners.contains(l)) {
Vector v = (Vector) progressListeners.clone();
v.removeElement(l);
progressListeners = v;
}
}
public synchronized void addProgressListener(ProgressListener l) {
Vector v = progressListeners == null ? new Vector(2) : (Vector) progressListeners.clone();
if (!v.contains(l)) {
v.addElement(l);
progressListeners = v;
}
}
public void setDebugMode(boolean debugMode) {
this.debugMode = debugMode;
}
public boolean isDebugMode() {
return debugMode;
}
private boolean debugMode = false;
private URL baseURL;
private transient Vector progressListeners;
private transient Vector statusListeners;
/**
* This property affects the Appelt style of rules application.
* If true then the longest match will be fired otherwise the shortest will
* be used. By default it is true.
*/
protected void fireProgressChanged(int e) {
if (progressListeners != null || progressListeners.isEmpty()) {
Vector listeners = progressListeners;
int count = listeners.size();
for (int i = 0; i < count; i++) {
((ProgressListener) listeners.elementAt(i)).progressChanged(e);
}
}
}
protected void fireProcessFinished() {
if (progressListeners != null) {
Vector listeners = progressListeners;
int count = listeners.size();
for (int i = 0; i < count; i++) {
((ProgressListener) listeners.elementAt(i)).processFinished();
}
}
}
public synchronized void removeStatusListener(StatusListener l) {
if (statusListeners != null && statusListeners.contains(l)) {
Vector v = (Vector) statusListeners.clone();
v.removeElement(l);
statusListeners = v;
}
}
public synchronized void addStatusListener(StatusListener l) {
Vector v = statusListeners == null ? new Vector(2) : (Vector) statusListeners.clone();
if (!v.contains(l)) {
v.addElement(l);
statusListeners = v;
}
}
protected void fireStatusChanged(String e) {
if (statusListeners != null) {
Vector listeners = statusListeners;
int count = listeners.size();
for (int i = 0; i < count; i++) {
((StatusListener) listeners.elementAt(i)).statusChanged(e);
}
}
}
/**
* Gets the ontology used by this transducer;
* @return an {@link gate.creole.ontology.Ontology} value;
*/
public Ontology getOntology() {
return ontology;
}
/**
* Sets the ontology used by this transducer;
* @param ontology an {@link gate.creole.ontology.Ontology} value;
*/
public void setOntology(Ontology ontology) {
this.ontology = ontology;
}
//ProcessProgressReporter implementation ends here
} // class Transducer