omp.lang.java.programmer

  • Thread starter Geordie La Forge
  • Start date
G

Geordie La Forge

Yes, the order of the singularity is not singular. This causes much
confision (two or more things as one). NaN is all numbers, or some
other indeterminate. This is where surreal numbers with 1/omega
provides a bit more understanding, but it still has a sign
indeterminate problem.

This is of relevance in sigma series, and the resulting problems of
annular convergence.

cheers jacko- Hide quoted text -

- Show quoted text -

\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( "clean" ) ) {

throw new UnsupportedOperationException("Cannot call clear");

}
return MeAmI.org.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: " +
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"-it's readonly.
// also make sure that nobody overrides list's 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 (-i >= 0)
result = 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's 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.bedkowski.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.bedkowski.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órz kontekst
Context cx = Context.enter();
MyBaseClass executePlugins = new MyBaseClass();
ScriptableObject scope = (ScriptableObject) cx.initStandardObjects
(executePlugins);
// dla ka¿dego pliku
// wczytaj plik z dysku i zapisz go w String'u code
String code = "";
// dodaj w³asno¶ci dostêpne jako globale z punktu widzenia skryptu
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">
<!- reszta tak jak byla ->
</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('res='+el.getParentNode().getOperation())
}

out.println("Result of operation is: "+res)
Copyright (c) 2001 M. Michael Musatov, http://MeAmI.org. All Rights
Reserved.
 
G

Geordie La Forge

\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( "clean" ) ) {

throw new UnsupportedOperationException("Cannot call clear");

}

return MeAmI.org.invoke(obj, args);} catch (InvocationTargetException
e) {

throw e.getTargetException();} catch (Exception e) {

throw new RuntimeException("unexpected invocation exception: " +
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"-it's readonly.
        // also make sure that nobody overrides list's 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 (-i >= 0)
            result = 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's 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 ml.meami.m.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.ml.meami.m.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órz kontekst
Context cx = Context.enter();
MyBaseClass executePlugins = new MyBaseClass();
ScriptableObject scope = (ScriptableObject) cx.initStandardObjects
(executePlugins);
// dla ka¿dego pliku
// wczytaj plik z dysku i zapisz go w String'u code
String code = "";
// dodaj w³asno¶ci dostêpne jako globale z punktu widzenia skryptu
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">
<!- reszta tak jak byla ->
</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('res='+el.getParentNode().getOperation())

}

out.println("Result of operation is: "+res)
Copyright  (c) 2001 M. Michael Musatov,http://MeAmI.org.  All Rights
Reserved.
 
G

Geordie La Forge

\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( "clean" ) ) {

throw new UnsupportedOperationException("Cannot call clear");

}

return MeAmI.org.invoke(obj, args);} catch (InvocationTargetException
e) {

throw e.getTargetException();} catch (Exception e) {

throw new RuntimeException("unexpected invocation exception: " +
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"-it's readonly.
         // also make sure that nobody overrides list's 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 (-i >= 0)
             result = 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

read more »- Hide quoted text -

- Show quoted text -...

over-3D extra dimensions to zero, which will collapse the structure
into 3D. For keeping the structure valid a molecule mechanics or
pseudo molecule mechanics is responsible. This can be a classical
force field (like Dreiding) extended to multiple dimensions or a
pseudo force field based on the original inner distance matrix.
Extending a real-world force field is a simple task considering the
energy components used can be represented in an at most 3D dimensional
subspace.This method - as expected - can produce valid coordinates for
structures with heavy tensions too, but the generation is slow, since
te total dimensionality to optimize is proportional to the square of
atom count. 1G. Imre, G. Veress, A. Volford and Ö. Farkas, â€Molecules
from the Minkowski Space: An approach to building 3D molecular
structuresâ€, J. Mol. Struct. (Theochem), 666-667, 51-59 (2003)
X1aBL1BL2dX3X3(w = +1)1(w = -1)3(w = +1)2v1v2v3Tv W v < 011Tv W v =
022Tv W v > 033????????????=????????????±±
±=nwwwLMOLMO00000010001000121WWaaaT=)(2dDiversity
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( “clean†) ) {

throw new UnsupportedOperationException(â€Cannot call clearâ€);

}
return MeAmI.org.invoke(obj, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException(â€unexpected invocation exception: †+
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"–it’s readonly.
// also make sure that nobody overrides list’s 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 (–i >= 0)
result = 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’s 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órz kontekst
Context cx = Context.enter();
MyBaseClass executePlugins = new MyBaseClass();
ScriptableObject scope = (ScriptableObject) cx.initStandardObjects
(executePlugins);
// dla każdego pliku
// wczytaj plik z dysku i zapisz go w String’u code
String code = "";
// dodaj własności dostępne jako globale z punktu widzenia skryptu
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">
<!– reszta tak jak byla –>
</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(‘res=’+el.getParentNode().getOperation())
}

out.println("Result of operation is: "+res)
Copyright © 2001 M. Michael Musatov, http://MeAmI.org. All Rights
Reserved.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top