javascripthandler.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 158 行

JAVA
158
字号
/*
 * Created on 2005-6-10
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package org.mindswap.swoop.utils;

/**
 * @author Zhao Bin
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import javax.swing.JLabel;
import javax.swing.JComponent;
import com.holub.ui.HTML.TagHandler;
import com.holub.ui.HTML.HTMLPane;
import java.util.Properties;
import java.util.Enumeration;
import java.util.List;
import java.util.ArrayList;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.Function;

public class JavaScriptHandler implements TagHandler {
    public static final String VERIFY_FUN_NAME = "verify";
    public static final String GEN_N3_FUN_NAME = "generateN3";
    public static final String N3_PREFIX = "n3_";
    public static final String ERR_MSG = "errorMessage";
    public static final String NUM_OF_N3 = "numberOfN3";
    public static final int MAX_N3 = 30;
    Context cx = null;
    Scriptable scope = null;
    
	public JComponent handleTag( HTMLPane source, final Properties attributes ){
	    //System.out.println("Javascript code is [" + attributes.get("code") + "]");
	
	    cx = Context.enter();
	    // Initialize the standard objects (Object, Function, etc.)
	    // This must be done before scripts can be executed. Returns
	    // a scope object that we use in later calls.
	    scope = cx.initStandardObjects();
	    
	    // Now evaluate the string we've colected.
	     
	    cx.evaluateString(scope, (String)attributes.get("code"), "<cmd>", 1, null);

	    return new JLabel("<javascript>");
	}
	
	public void clear(){
	    cx = null;
	    scope = null;
	}
	
	public boolean verify(String formName, Properties formData){
	    
	    if (scope == null){
	        return true;
	    }
	    
	    Enumeration e = formData.propertyNames();
	    String result = null;
	    while(e.hasMoreElements()) {
	        String dataName = (String)e.nextElement();
	        System.out.println(formName + "_" + dataName);
	        if (formName != null){
	            // don't put the formName in fron of the data name
	          //scope.put(formName + "_" + dataName, scope, formData.getProperty(dataName));
	            scope.put(dataName, scope, formData.getProperty(dataName));
	        } else {
              scope.put(dataName, scope, formData.getProperty(dataName));
	        }
	     }
	
	    Object verifyObj = scope.get(VERIFY_FUN_NAME, scope);
	
	    if (! (verifyObj instanceof Function)){
	      System.out.println("verify function is not found");
	    } else {
	      Function verifyFun = (Function)verifyObj;
	      result = Context.toString(verifyFun.call(cx, scope, scope, null));
	    }
	    
         //  result can be null,
	    if (result == null){
	        return true;
	    }
	    
	    // result can be "undefined", "true", "false"
	    if (result.equalsIgnoreCase("true") || result.equalsIgnoreCase("false")){
	        return Boolean.valueOf(result).booleanValue();
	    } else {
	        return true;
	    }
	}
	
	public String[] generateN3(){
	    if (scope == null){
	        return new String[0];
	    }
	    List n3List = new ArrayList();
	    Object genObj = scope.get(GEN_N3_FUN_NAME, scope);
	    
	    if (! (genObj instanceof Function)){
	      System.out.println("generateN3 function is not found");
	    } else {
	      Function genFun = (Function)genObj;
	      Object result = genFun.call(cx, scope, scope, null);
	      System.out.println("genN3 result: " + Context.toString(result));
	      for (int i=0;i<getNumberOfN3();i++){
	        String genN3 = N3_PREFIX + i;
	        Object n3 = scope.get(genN3, scope);
	        if (n3 == Scriptable.NOT_FOUND){
	          System.out.println(genN3 + " is not defined");
	        } else {
	          System.out.println(genN3 + " is " + Context.toString(n3));
	          n3List.add(Context.toString(n3));
	        }
	      }
	    }
	    return (String[]) n3List.toArray(new String[0]);
	}
	
	public String getErrorMsg(){
	  if (scope == null){
	      return "Not error message is defined";
	  } else {
	      Object msg = scope.get(ERR_MSG, scope);
	      if (msg == Scriptable.NOT_FOUND){
	          return "Not error message is defined";
	      } else {
	          return Context.toString(msg);
	      }
	  }
	}
	
	private int getNumberOfN3(){
	    if (scope == null){
		      return MAX_N3;
		  } else {
		      Object msg = scope.get(NUM_OF_N3, scope);
		      if (msg == Scriptable.NOT_FOUND){
		          return MAX_N3;
		      } else {
		          String s = Context.toString(msg);
		          try{
		              return Integer.parseInt(s);
		          } catch (Exception e){
		              return MAX_N3;
		          }
		      }
		  }
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?