/*
* File : Evaluator.java
* Created : 07-jun-2001 13:36
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details (see the LICENSE file).
*/
package edu.xtec.jclic.activities.text;
import edu.xtec.jclic.project.JClicProject;
import edu.xtec.util.Domable;
import edu.xtec.util.JDomUtility;
import java.text.Collator;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.09.10
*/
public abstract class Evaluator extends java.lang.Object implements Domable {
public static final byte FLAG_OK=0;
public static final byte FLAG_DEFAULT_ERROR=1;
Collator collator;
//Activity act;
protected boolean initiated=false;
/** Creates new Evaluator */
public Evaluator(JClicProject project) {
//act=activity;
if(project.getBridge()!=null)
collator=project.getBridge().getOptions().getMessages().getCollator();
else
collator=Collator.getInstance();
}
public static final String ELEMENT_NAME="evaluator";
public static final String BASE_CLASS="edu.xtec.jclic.activities.text.", BASE_CLASS_TAG="@";
public org.jdom.Element getJDomElement(){
org.jdom.Element e=new org.jdom.Element(ELEMENT_NAME);
String s=getClass().getName();
if(s.startsWith(BASE_CLASS))
s=BASE_CLASS_TAG+s.substring(BASE_CLASS.length());
e.setAttribute(JDomUtility.CLASS, s);
return e;
}
public static Evaluator getEvaluator(org.jdom.Element e, JClicProject project) throws Exception{
JDomUtility.checkName(e, ELEMENT_NAME);
String className=JDomUtility.getClassName(e);
if(className.startsWith(BASE_CLASS_TAG))
className=BASE_CLASS+className.substring(1);
String s;
Evaluator ev;
Class<?> evaluatorClass;
Class[] cparams={JClicProject.class};
Object[] initArgs={project};
evaluatorClass=Class.forName(className);
java.lang.reflect.Constructor con=evaluatorClass.getConstructor(cparams);
ev=(Evaluator)con.newInstance(initArgs);
ev.setProperties(e, null);
ev.init();
return ev;
}
public void setProperties(org.jdom.Element e, Object aux) throws Exception{
}
protected void init(){
initiated=true;
}
public boolean checkText(String text, String[] match){
for(String m : match){
if(checkText(text, m)) return true;
}
return false;
}
public abstract boolean checkText(String text, String match);
public abstract byte[] evalText(String text, String[] match);
public byte[] evalText(String text, String match){
return evalText(text, new String[]{match});
}
public static boolean isOk(byte[] flags){
for(int fl : flags)
if(fl!=FLAG_OK)
return false;
return true;
}
}