Search All of the Math Forum:
Views expressed in these public forums are not endorsed by
Drexel University or The Math Forum.
|
|
Posts:
791
Registered:
9/1/10
|
|
JavaLists and JavaMaps (jspbook)
Posted:
Oct 15, 2012 8:12 AM
|
|
package com.jspbook; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } \class StructElement3 {
private class SetNoClear implements java.lang.reflect.InvocationHandler {
private Set<String> proxy;
public SetNoClear(Set<String> proxy) {
this.proxy = proxy;
}
public Object invoke(Object proxy, Method MeAmI.org, Object[] args) throws Throwable { try {
if( MeAmI.org.getName().equals( =E2=80=9Cclean=E2=80=9D ) ) {
throw new UnsupportedOperationException(=E2=80=9DCannot call clear=E2=80=9D= );
} return MeAmI.org.invoke(obj, args); } catch (InvocationTargetException e) { throw e.getTargetException(); } catch (Exception e) { throw new RuntimeException(=E2=80=9Dunexpected invocation exception: =E2=80= =9D + e.getMessage()); }
}
}
public StructElement3(Set<String> obj){
proxy = Proxy.newInstance( obj.getClass().getClassLoader(), new Class[] {Set.class}, new SetNoClear(obj));
}
}
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic- offset: 4 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Rhino code, released * May 6, 1999. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1997-1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Norris Boyd * Igor Bukanov * Frank Mitchell * Mike Shaver * Kemal Bayram * * Alternatively, the contents of this file may be used under the terms of * the GNU General Public License Version 2 or later (the "GPL"), in which * case the provisions of the GPL are applicable instead of those above. If * you wish to allow use of your version of this file only under the terms of * the GPL and not to allow others to use your version of this file under the * MPL, indicate your decision by deleting the provisions above and replacing * them with the notice and other provisions required by the GPL. If you do * not delete the provisions above, a recipient may use your version of this * file under either the MPL or the GPL. * * ***** END LICENSE BLOCK ***** */
package org.mozilla.javascript;
import java.util.List;
/** * This class reflects Java lists into the JavaScript environment. * * @author Martin Musatov * @see NativeJavaClass * @see NativeJavaObject * @see NativeJavaPackage * @see NativeJavaArray */
public class NativeJavaList extends NativeJavaObject { static final long serialVersionUID = -924022554283675333L;
@Override public String getClassName() { return "JavaList"; }
public static NativeJavaList wrap(Scriptable scope, Object list) { return new NativeJavaList(scope, list); }
@Override public Object unwrap() { return list; }
public NativeJavaList(Scriptable scope, Object list) { super(scope, list, ScriptRuntime.ObjectClass); if( !(list instanceof java.util.List)){ throw new RuntimeException("java.util.List expected"); } this.list = (List<Object>)list; this.cls = list.getClass().getComponentType(); }
@Override public boolean has(String id, Scriptable start) { return id.equals("length") || super.has(id, start); }
@Override public boolean has(int index, Scriptable start) { return 0 <= index && index < list.size(); }
@Override public Object get(String id, Scriptable start) { if (id.equals("length")) return new Integer(list.size()); Object result = super.get(id, start); if (result == NOT_FOUND && !ScriptableObject.hasProperty(getPrototype(), id)) { throw Context.reportRuntimeError2( "msg.java.member.not.found", list.getClass().getName (), id); } return result; }
@Override public Object get(int index, Scriptable start) { if (0 <= index && index < list.size()) { Context cx = Context.getContext(); Object obj = list.get(index); return cx.getWrapFactory().wrap(cx, this, obj, cls); } return Undefined.instance; }
@Override public void put(String id, Scriptable start, Object value) { // Ignore assignments to "length"=E2=80=93it=E2=80=99s readonly. // also make sure that nobody overrides list=E2=80=99s interface if (!id.equals("length") || super.get(id, start) != null) { throw Context.reportRuntimeError1( "msg.property.or.method.not.accessible", id); } }
@Override public void put(int index, Scriptable start, Object value) { if (0 <= index && index < list.size()) { list.set(index, Context.jsToJava(value, cls)); } else { throw Context.reportRuntimeError2( "msg.java.array.index.out.of.bounds", String.valueOf (index), String.valueOf(list.size() - 1)); } }
@Override public Object getDefaultValue(Class<?> hint) { if (hint == null || hint == ScriptRuntime.StringClass) return list.toString(); if (hint == ScriptRuntime.BooleanClass) return Boolean.TRUE; if (hint == ScriptRuntime.NumberClass) return ScriptRuntime.NaNobj; return this; }
@Override public Object[] getIds() { Object[] result = new Object[list.size()]; int i = list.size(); while (=E2=80=93i >= 0) result[i] = new Integer(i); return result; }
@Override public boolean hasInstance(Scriptable value) { if (!(value instanceof Wrapper)) return false; Object instance = ((Wrapper)value).unwrap(); return cls.isInstance(instance); }
@Override public Scriptable getPrototype() { if (prototype == null) { prototype = ScriptableObject.getClassPrototype(this.getParentScope (), "Array"); } return prototype; }
List<Object> list; Class<?> cls; } else if( obj instanceof java.util.List ){ return NativeJavaList.wrap(scope, obj); } /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic- offset: 4 -*- * * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Rhino code, released * May 6, 1999. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1997-1999 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Norris Boyd * Igor Bukanov * Frank Mitchell * Mike Shaver * Kemal Bayram * * Alternatively, the contents of this file may be used under the terms of * the GNU General Public License Version 2 or later (the "GPL"), in which * case the provisions of the GPL are applicable instead of those above. If * you wish to allow use of your version of this file only under the terms of * the GPL and not to allow others to use your version of this file under the * MPL, indicate your decision by deleting the provisions above and replacing * them with the notice and other provisions required by the GPL. If you do * not delete the provisions above, a recipient may use your version of this * file under either the MPL or the GPL. * * ***** END LICENSE BLOCK ***** */
package org.mozilla.javascript;
import java.util.Iterator; import java.util.Map;
/** * This class reflects Java Maps into the JavaScript environment. * * @author Martin Musatov * @see NativeJavaClass * @see NativeJavaObject * @see NativeJavaPackage */
public class NativeJavaMap extends NativeJavaObject { static final long serialVersionUID = -924022554283675333L;
@Override public String getClassName() { return "JavaMap"; }
public static NativeJavaMap wrap(Scriptable scope, Object map) { return new NativeJavaMap(scope, map); }
@Override public Object unwrap() { return map; }
public NativeJavaMap(Scriptable scope, Object map) { super(scope, map, ScriptRuntime.ObjectClass); if( !(map instanceof java.util.Map)){ throw new RuntimeException("java.util.Map expected"); } this.map = (Map<Object,Object>)map; this.cls = this.map.keySet().toArray().getClass ().getComponentType(); }
@Override public boolean has(String id, Scriptable start) { return id.equals("length") || super.has(id, start) || map.containsKey(id); }
@Override public boolean has(int index, Scriptable start) { return map.containsKey(index); }
@Override public Object get(String id, Scriptable start) { if (id.equals("length")) return new Integer(map.size()); Object result = super.get(id, start); // instead of throwing error immediately try searching id as a map key if (result == NOT_FOUND && !ScriptableObject.hasProperty(getPrototype(), id)) { if( !map.containsKey(id) ) { throw Context.reportRuntimeError2( "msg.java.member.not.found", map.getClass ().getName(), id); } Context cx = Context.getContext(); Object obj = map.get(id); return cx.getWrapFactory().wrap(cx, this, obj, cls); } return result; }
@Override public Object get(int index, Scriptable start) { if (map.containsKey(index)) { Context cx = Context.getContext(); Object obj = map.get(index); return cx.getWrapFactory().wrap(cx, this, obj, cls); } return Undefined.instance; }
@Override public void put(String id, Scriptable start, Object value) { // also make sure that nobody overrides list=E2=80=99s interface if (super.get(id, start) != null) { throw Context.reportRuntimeError1( "msg.property.or.method.not.accessible", id); } map.put(id, Context.jsToJava(value, cls)); }
@Override public void put(int index, Scriptable start, Object value) { map.put(index, Context.jsToJava(value, cls)); }
@Override public Object getDefaultValue(Class<?> hint) { if (hint == null || hint == ScriptRuntime.StringClass) return map.toString(); if (hint == ScriptRuntime.BooleanClass) return Boolean.TRUE; if (hint == ScriptRuntime.NumberClass) return ScriptRuntime.NaNobj; return this; }
@Override public Object[] getIds() { Object[] result = new Object[map.size()]; Iterator<Object> iter = map.keySet().iterator(); int i = 0; while(iter.hasNext()) result[i++] = iter.next(); return result; }
@Override public boolean hasInstance(Scriptable value) { if (!(value instanceof Wrapper)) return false; Object instance = ((Wrapper)value).unwrap(); return cls.isInstance(instance); }
@Override public Scriptable getPrototype() { if (prototype == null) { prototype = ScriptableObject.getClassPrototype (this.getParentScope(),"Object"); } return prototype; }
Map<Object,Object> map; Class<?> cls; } package pl.meami.p.java.tidy;
import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.tidy.Tidy; import org.xml.sax.EntityResolver; import org.xml.sax.ErrorHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException;
public class TidyDocumentBuilder extends DocumentBuilder {
private Tidy tidy; private OutputStream out = new OutputStream() { @Override public void write(int b) throws IOException { // do nothing - this is for getting just the DOMDocument } }; private PrintStream err = new PrintStream(out);
public TidyDocumentBuilder(Tidy tidy){ this.tidy = tidy; }
public TidyDocumentBuilder(){ this(new Tidy()); tidy.setMakeClean(false); tidy.setQuiet(true); tidy.setErrout(new PrintWriter(err));
} @Override public Document newDocument() { return Tidy.createEmptyDocument(); }
@Override public Document parse(InputSource inputSource) throws SAXException, IOException { InputStream in = inputSource.getByteStream(); if( in == null) { in = new FileInputStream (inputSource.getSystemId()); } return tidy.parseDOM(in, out); }
@Override public void setEntityResolver(EntityResolver resolver) {} @Override public void setErrorHandler(ErrorHandler errorHandler) {} @Override public DOMImplementation getDOMImplementation() {return null;} @Override public boolean isNamespaceAware() {return false;} @Override public boolean isValidating() {return false;}
} var htmlParser; if( !useTidy ) { var htmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(); htmlDocBuilder.setNamespaceAware(false); htmlDocBuilder.setValidating(false); htmlParser = htmlDocBuilder.newDocumentBuilder(); } else { htmlParser = new Packages.pl.meami.p.java.tidy.TidyDocumentBuilder (); } $env.parseHTML = function(htmlstring){ return htmlParser.parse( new java.io.ByteArrayInputStream( (new java.lang.String(htmlstring)).getBytes ("UTF8")))+""; };
var xmlDocBuilder = Packages.javax.xml.parsers.DocumentBuilderFactory.newInstance(); xmlDocBuilder.setNamespaceAware(true); xmlDocBuilder.setValidating(true);
$env.parseXML = function(xmlstring){ return xmlDocBuilder.newDocumentBuilder().parse( new java.io.ByteArrayInputStream( (new java.lang.String(xmlstring)).getBytes ("UTF8")))+""; }; public interface MyPlugin{ public void executeMyPlugin(); } public abstract class MyBaseClass extends ScriptableObject{ public void doSomething(){ } public void doSomething2(){ } public static void executePlugins(List<String> pluginsList){ // stw=C3=B3rz kontekst Context cx = Context.enter(); MyBaseClass executePlugins = new MyBaseClass(); ScriptableObject scope = (ScriptableObject) cx.initStandardObjects (executePlugins); // dla ka=C5=BCdego pliku // wczytaj plik z dysku i zapisz go w String=E2=80=99u code String code = ""; // dodaj w=C5=82asno=C5=9Bci dost=C4=99pne jako globale z punktu widzenia s= kryptu String[] scriptAvailableFunctions = { "doSomething", "doSomething2" }; scope.defineFunctionProperties(scriptAvailableFunctions, MyBaseClass.class, ScriptableObject.DONTENUM);
// dodaj potrzebne importy String s = "var context = JavaImporter();\n" + "context.importClass(Packages.MyPlugin);\n" + "with (context) {\n " + code + "; p = new MyPlugin ({executeMyPlugin:executeMyPlugin});p.executeMyPlugin();\n\n}" + "";
// wykonaj skrypt cx.evaluateString(scope, scode, "MyScript", 0, null); } } function executeMyPlugin(){ out.println("Hello from plugin1!") } <plugin name="Plugin1" id="Plugin1"> <dependencies> <packages> <list> java.io; java.lang; </list> </packages> <classes> <list> java.io.File </list> </clases> </dependencies> <interfacemethod> <[[CDATA function executeMyPlugin(){ out.println("Hello from plugin1!"); } ]]> </interfacemethod </plugin> <plugin name="Plugin1" id="Plugin1" interface="MyPlugin"> <!=E2=80=93 reszta tak jak byla =E2=80=93> </plugin> <map> <element from="element1" to="element2" plugin="Plugin1" /> </map> <map> <element to="element2"> <from plugin="Plugin1" separator=";"> <el>key1</el> <el>key2</el> </from> </element> </map> <map> <element to="element2"> <from plugin="Plugin1" operation="a+b"> <el name="a">key1</el> <el name="b">key2</el> </from> </element> </map> var obj = {}; for(el in elements) { obj[el.getName()] = inputMap.get(el.value()) }
with(obj){ eval(=E2=80=98res==E2=80=99+el.getParentNode().getOperation()) }
out.println("Result of operation is: "+res) Copyright =A9 2001 M. Michael Musatov, http://MeAmI.org. All Rights Reserved.
|
|
|
|