зеркало из https://github.com/mozilla/pjs.git
XML no longer implements Wrapper interface. Instead getXmlObject method
is added to access the implementation. In this way all functionality of Java API in XmlObject is available to scripts if they need it.
This commit is contained in:
Родитель
f935a248be
Коммит
d41bf7368b
|
@ -50,7 +50,7 @@ import org.apache.xmlbeans.XmlException;
|
||||||
import org.apache.xmlbeans.XmlObject;
|
import org.apache.xmlbeans.XmlObject;
|
||||||
import org.apache.xmlbeans.XmlOptions;
|
import org.apache.xmlbeans.XmlOptions;
|
||||||
|
|
||||||
class XML extends XMLObjectImpl implements Wrapper
|
class XML extends XMLObjectImpl
|
||||||
{
|
{
|
||||||
final static class XScriptAnnotation extends XmlBookmark
|
final static class XScriptAnnotation extends XmlBookmark
|
||||||
{
|
{
|
||||||
|
@ -256,8 +256,6 @@ class XML extends XMLObjectImpl implements Wrapper
|
||||||
frag = ((XMLObjectImpl) inputObject).toXMLString(0);
|
frag = ((XMLObjectImpl) inputObject).toXMLString(0);
|
||||||
} else {
|
} else {
|
||||||
if (inputObject instanceof Wrapper) {
|
if (inputObject instanceof Wrapper) {
|
||||||
// Note: the check has to be done after the check for
|
|
||||||
// XMLObjectImpl as XML also implements Wrapper
|
|
||||||
Object wrapped = ((Wrapper)inputObject).unwrap();
|
Object wrapped = ((Wrapper)inputObject).unwrap();
|
||||||
if (wrapped instanceof XmlObject) {
|
if (wrapped instanceof XmlObject) {
|
||||||
return createFromXmlObject(lib, (XmlObject)wrapped);
|
return createFromXmlObject(lib, (XmlObject)wrapped);
|
||||||
|
@ -3065,11 +3063,7 @@ todo need to handle namespace prefix not found in XML look for namespace type in
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
XmlObject getXmlObject()
|
||||||
// Implementation of Wrapper
|
|
||||||
//
|
|
||||||
|
|
||||||
public Object unwrap()
|
|
||||||
{
|
{
|
||||||
XmlObject xo;
|
XmlObject xo;
|
||||||
XmlCursor cursor = newCursor();
|
XmlCursor cursor = newCursor();
|
||||||
|
@ -3080,5 +3074,4 @@ todo need to handle namespace prefix not found in XML look for namespace type in
|
||||||
}
|
}
|
||||||
return xo;
|
return xo;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1563,6 +1563,15 @@ class XMLList extends XMLObjectImpl implements Function
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
org.apache.xmlbeans.XmlObject getXmlObject()
|
||||||
|
{
|
||||||
|
if (length() == 1) {
|
||||||
|
return getXmlFromAnnotation(0).getXmlObject();
|
||||||
|
} else {
|
||||||
|
throw ScriptRuntime.typeError("getXmlObject method works only on lists containing one item");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See ECMA 357, 11_2_2_1, Semantics, 3_e.
|
* See ECMA 357, 11_2_2_1, Semantics, 3_e.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -131,6 +131,11 @@ abstract class XMLObjectImpl extends XMLObject
|
||||||
abstract String toXMLString(int indent);
|
abstract String toXMLString(int indent);
|
||||||
abstract Object valueOf();
|
abstract Object valueOf();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension to access native implementation from scripts
|
||||||
|
*/
|
||||||
|
abstract org.apache.xmlbeans.XmlObject getXmlObject();
|
||||||
|
|
||||||
protected abstract Object jsConstructor(Context cx, boolean inNewExpr,
|
protected abstract Object jsConstructor(Context cx, boolean inNewExpr,
|
||||||
Object[] args);
|
Object[] args);
|
||||||
|
|
||||||
|
@ -373,12 +378,14 @@ abstract class XMLObjectImpl extends XMLObject
|
||||||
Id_toXMLString = 39,
|
Id_toXMLString = 39,
|
||||||
Id_valueOf = 40,
|
Id_valueOf = 40,
|
||||||
|
|
||||||
MAX_PROTOTYPE_ID = 40;
|
Id_getXmlObject = 41,
|
||||||
|
|
||||||
|
MAX_PROTOTYPE_ID = 41;
|
||||||
|
|
||||||
protected int findPrototypeId(String s)
|
protected int findPrototypeId(String s)
|
||||||
{
|
{
|
||||||
int id;
|
int id;
|
||||||
// #generated# Last update: 2004-08-21 11:02:57 CEST
|
// #generated# Last update: 2004-11-10 15:38:11 CET
|
||||||
L0: { id = 0; String X = null; int c;
|
L0: { id = 0; String X = null; int c;
|
||||||
L: switch (s.length()) {
|
L: switch (s.length()) {
|
||||||
case 4: c=s.charAt(0);
|
case 4: c=s.charAt(0);
|
||||||
|
@ -421,15 +428,15 @@ abstract class XMLObjectImpl extends XMLObject
|
||||||
case 's': X="setChildren";id=Id_setChildren; break L;
|
case 's': X="setChildren";id=Id_setChildren; break L;
|
||||||
case 't': X="toXMLString";id=Id_toXMLString; break L;
|
case 't': X="toXMLString";id=Id_toXMLString; break L;
|
||||||
} break L;
|
} break L;
|
||||||
case 12: c=s.charAt(0);
|
case 12: switch (s.charAt(0)) {
|
||||||
if (c=='a') { X="addNamespace";id=Id_addNamespace; }
|
case 'a': X="addNamespace";id=Id_addNamespace; break L;
|
||||||
else if (c=='p') { X="prependChild";id=Id_prependChild; }
|
case 'g': X="getXmlObject";id=Id_getXmlObject; break L;
|
||||||
else if (c=='s') {
|
case 'p': X="prependChild";id=Id_prependChild; break L;
|
||||||
c=s.charAt(3);
|
case 's': c=s.charAt(3);
|
||||||
if (c=='L') { X="setLocalName";id=Id_setLocalName; }
|
if (c=='L') { X="setLocalName";id=Id_setLocalName; }
|
||||||
else if (c=='N') { X="setNamespace";id=Id_setNamespace; }
|
else if (c=='N') { X="setNamespace";id=Id_setNamespace; }
|
||||||
}
|
|
||||||
break L;
|
break L;
|
||||||
|
} break L;
|
||||||
case 14: X="hasOwnProperty";id=Id_hasOwnProperty; break L;
|
case 14: X="hasOwnProperty";id=Id_hasOwnProperty; break L;
|
||||||
case 15: X="removeNamespace";id=Id_removeNamespace; break L;
|
case 15: X="removeNamespace";id=Id_removeNamespace; break L;
|
||||||
case 16: c=s.charAt(0);
|
case 16: c=s.charAt(0);
|
||||||
|
@ -510,6 +517,8 @@ abstract class XMLObjectImpl extends XMLObject
|
||||||
case Id_toSource: arity=1; s="toSource"; break;
|
case Id_toSource: arity=1; s="toSource"; break;
|
||||||
case Id_toXMLString: arity=1; s="toXMLString"; break;
|
case Id_toXMLString: arity=1; s="toXMLString"; break;
|
||||||
case Id_valueOf: arity=0; s="valueOf"; break;
|
case Id_valueOf: arity=0; s="valueOf"; break;
|
||||||
|
|
||||||
|
case Id_getXmlObject: arity=0; s="getXmlObject"; break;
|
||||||
default: throw new IllegalArgumentException(String.valueOf(id));
|
default: throw new IllegalArgumentException(String.valueOf(id));
|
||||||
}
|
}
|
||||||
initPrototypeMethod(XMLOBJECT_TAG, id, s, arity);
|
initPrototypeMethod(XMLOBJECT_TAG, id, s, arity);
|
||||||
|
@ -693,6 +702,11 @@ abstract class XMLObjectImpl extends XMLObject
|
||||||
}
|
}
|
||||||
case Id_valueOf:
|
case Id_valueOf:
|
||||||
return realThis.valueOf();
|
return realThis.valueOf();
|
||||||
|
|
||||||
|
case Id_getXmlObject: {
|
||||||
|
org.apache.xmlbeans.XmlObject xmlObject = realThis.getXmlObject();
|
||||||
|
return Context.javaToJS(xmlObject, scope);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException(String.valueOf(id));
|
throw new IllegalArgumentException(String.valueOf(id));
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче