/**
* (c) 2000-2011 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license.txt / License in license.txt
* File created: 02/04/2011 16:34:34
*/
package org.f2o.absurdum.puck.bsh;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.f2o.absurdum.puck.gui.graph.GraphEditingPanel;
import org.f2o.absurdum.puck.gui.graph.Node;
import org.f2o.absurdum.puck.gui.panels.EntityPanel;
import org.f2o.absurdum.puck.gui.panels.WorldPanel;
import org.f2o.absurdum.puck.i18n.UIMessages;
import bsh.EvalError;
import bsh.Interpreter;
import bsh.ParseException;
/**
* @author carlos
* Created 2011-04-02
*
*/
public class BeanShellCodeValidator
{
private GraphEditingPanel gep;
private Interpreter interp;
private StringBuffer errorText = new StringBuffer();
public BeanShellCodeValidator ( GraphEditingPanel gep )
{
this.gep = gep;
interp = new Interpreter();
}
/**
*
* @param code The code to validate.
* @param source The place where the code was taken from.
* @return
*/
public boolean validateCode ( String code , Object source )
{
try
{
interp.eval(code);
}
catch ( ParseException pe )
{
errorText.append(UIMessages.getInstance().getMessage("bsh.parse.error.in") + source.toString() + "\n");
errorText.append(pe.getMessage()+"\n");
return false;
}
catch ( EvalError ee )
{
; //other kinds of errors (non-parse errors)
}
return true;
}
public boolean validate ()
{
boolean ok = true;
errorText = new StringBuffer();
Collection nodes = gep.getNodes();
for ( Iterator it = nodes.iterator() ; it.hasNext() ; )
{
Node n = (Node) it.next();
EntityPanel ep = (EntityPanel) n.getAssociatedPanel();
if ( ep instanceof BeanShellCodeHolder )
{
BeanShellCodeHolder bsch = (BeanShellCodeHolder)ep;
boolean thisOneOk = validateCode(bsch.getBSHCode(),n);
ok = ok && thisOneOk;
}
}
BeanShellCodeHolder worldPanel = (WorldPanel)gep.getWorldNode().getAssociatedPanel();
boolean thisOneOk = validateCode(worldPanel.getBSHCode(),gep.getWorldNode());
ok = ok && thisOneOk;
return ok;
}
public String getErrorText()
{
return errorText.toString();
}
}