use of org.mozilla.javascript.NativeJavaObject in project convertigo by convertigo.
the class ElementStep method createStepNodeValue.
@Override
protected void createStepNodeValue(Document doc, Element stepNode) throws EngineException {
String nodeValue = nodeText;
if (evaluated != null) {
nodeValue = "";
if (evaluated instanceof NodeList) {
NodeList list = (NodeList) evaluated;
nodeValue = list.toString();
} else if (evaluated instanceof Collection) {
List<String> list = GenericUtils.toString((Collection<?>) evaluated);
nodeValue = list.toString();
} else if (evaluated instanceof NativeJavaArray) {
Object object = ((NativeJavaArray) evaluated).unwrap();
List<String> list = GenericUtils.toString(Arrays.asList((Object[]) object));
nodeValue = list.toString();
} else if (evaluated instanceof NativeArray) {
nodeValue = (String) ((NativeArray) evaluated).getDefaultValue(String.class);
} else if (evaluated instanceof NativeJavaObject) {
nodeValue = (String) ((NativeJavaObject) evaluated).getDefaultValue(String.class);
} else if (evaluated.getClass().isArray()) {
nodeValue = Arrays.toString((Object[]) evaluated);
} else
nodeValue = evaluated.toString();
}
Node text = doc.createTextNode(nodeValue);
stepNode.appendChild(text);
}
use of org.mozilla.javascript.NativeJavaObject in project convertigo by convertigo.
the class RequestableStep method getPostQuery.
protected String getPostQuery(Scriptable scope) throws EngineException {
StepVariable stepVariable;
String postQuery = "";
int len = numberOfVariables();
String variableName;
int variableVisibility;
for (int i = 0; i < len; i++) {
stepVariable = (StepVariable) getVariable(i);
variableName = stepVariable.getName();
variableVisibility = stepVariable.getVisibility();
try {
// Source value
Object variableValue = stepVariable.getSourceValue();
if (variableValue instanceof NodeList && ((NodeList) variableValue).getLength() == 0) {
if (getProject().isStrictMode() && !stepVariable.isMultiValued()) {
// override with null (fix #24)
variableValue = null;
}
}
if (variableValue != null) {
Engine.logBeans.trace("(RequestableStep) found value from source: " + Visibility.Logs.printValue(variableVisibility, variableValue));
}
// Otherwise Scope parameter
if (variableValue == null) {
Scriptable searchScope = scope;
while ((variableValue == null) && (searchScope != null)) {
variableValue = searchScope.get(variableName, searchScope);
Engine.logBeans.trace("(RequestableStep) found value from scope: " + Visibility.Logs.printValue(variableVisibility, variableValue));
if (variableValue instanceof Undefined) {
variableValue = null;
} else if (variableValue instanceof UniqueTag && ((UniqueTag) variableValue).equals(UniqueTag.NOT_FOUND)) {
variableValue = null;
} else if (variableValue instanceof NativeJavaObject) {
variableValue = ((NativeJavaObject) variableValue).unwrap();
}
if (variableValue == null) {
// looks up in parent's scope
searchScope = searchScope.getParentScope();
}
}
}
// Otherwise context parameter
if (variableValue == null) {
variableValue = (sequence.context.get(variableName) == null ? null : sequence.context.get(variableName));
if (variableValue != null)
Engine.logBeans.trace("(RequestableStep) found value from context: " + Visibility.Logs.printValue(variableVisibility, variableValue));
}
// Otherwise sequence step default value
if (variableValue == null) {
variableValue = getVariableValue(variableName);
if (variableValue != null)
Engine.logBeans.trace("(RequestableStep) found default value from step: " + Visibility.Logs.printValue(variableVisibility, variableValue));
}
// otherwise value not found
if (variableValue == null) {
Engine.logBeans.trace("(RequestableStep) Did not find any value for \"" + variableName + "\", ignore it");
} else {
if (bInternalInvoke) {
if (stepVariable.isMultiValued() && getProject().isStrictMode() && variableValue instanceof NodeList) {
String subXPath = ((StepMultiValuedVariable) stepVariable).getSubXPath();
if (subXPath.isEmpty()) {
variableValue = XMLUtils.toNodeArray((NodeList) variableValue);
} else {
TwsCachedXPathAPI xpathAPI = new TwsCachedXPathAPI(this.getProject());
NodeList nodeList = (NodeList) variableValue;
NodeList[] nodeLists = new NodeList[nodeList.getLength()];
for (int j = 0; j < nodeLists.length; j++) {
try {
nodeLists[j] = xpathAPI.selectNodeList(nodeList.item(j), subXPath);
} catch (TransformerException e) {
Engine.logBeans.debug("(RequestableStep) Failed to select subXpath", e);
}
}
variableValue = nodeLists;
}
}
request.put(variableName, variableValue);
} else {
String parameterValue;
if (variableValue instanceof NodeList) {
NodeList list = (NodeList) variableValue;
if (list != null) {
if (list.getLength() == 0) {
// Specifies here empty multivalued variable (HTTP invoque only)
postQuery = addParamToPostQuery(variableName, "_empty_array_", postQuery);
} else {
for (int j = 0; j < list.getLength(); j++) {
parameterValue = getNodeValue(list.item(j));
postQuery = addParamToPostQuery(variableName, parameterValue, postQuery);
}
}
}
} else if (variableValue instanceof NativeJavaArray) {
Object object = ((NativeJavaArray) variableValue).unwrap();
List<String> list = GenericUtils.toString(Arrays.asList((Object[]) object));
if (list.size() == 0) {
// Specifies here empty multivalued variable (HTTP invoque only)
postQuery = addParamToPostQuery(variableName, "_empty_array_", postQuery);
} else {
for (String value : list) {
postQuery = addParamToPostQuery(variableName, value, postQuery);
}
}
} else if (variableValue instanceof Collection<?>) {
List<String> list = GenericUtils.toString((Collection<?>) variableValue);
if (list.size() == 0) {
// Specifies here empty multivalued variable (HTTP invoque only)
postQuery = addParamToPostQuery(variableName, "_empty_array_", postQuery);
} else {
for (String value : list) {
postQuery = addParamToPostQuery(variableName, value, postQuery);
}
}
} else if (variableValue instanceof String) {
parameterValue = variableValue.toString();
postQuery = addParamToPostQuery(variableName, parameterValue, postQuery);
} else {
parameterValue = variableValue.toString();
postQuery = addParamToPostQuery(variableName, parameterValue, postQuery);
}
}
}
} catch (ClassCastException e) {
Engine.logBeans.warn("(RequestableStep) Ignoring parameter '" + variableName + "' because its value is not a string");
}
}
if (bInternalInvoke) {
return null;
} else {
if (Engine.logBeans.isTraceEnabled()) {
Engine.logBeans.trace("(RequestableStep) postQuery :" + Visibility.Logs.replaceVariables(getVariables(), postQuery));
}
return postQuery;
}
}
use of org.mozilla.javascript.NativeJavaObject in project convertigo by convertigo.
the class ParameterUtils method toStringList.
public static List<String> toStringList(Object ob) {
List<String> list;
if (ob != null) {
if (ob instanceof NativeJavaObject) {
NativeJavaObject nativeJavaObject = (NativeJavaObject) ob;
list = toStringList(nativeJavaObject.unwrap());
} else if (ob instanceof NativeJavaArray) {
Object object = ((NativeJavaArray) ob).unwrap();
list = toStringList(object);
} else if (ob.getClass().isArray()) {
list = toStringList(Arrays.asList((Object[]) ob));
} else if (ob instanceof NativeArray) {
NativeArray array = (NativeArray) ob;
list = new ArrayList<String>((int) array.getLength());
for (java.util.Iterator<?> i = array.iterator(); i.hasNext(); ) {
list.add(toString(i.next()));
}
} else if (ob instanceof Collection<?>) {
Collection<?> collection = GenericUtils.cast(ob);
list = new ArrayList<String>(collection.size());
for (Object o : collection) {
list.add(toString(o));
}
} else {
list = Arrays.asList(toString(ob));
}
} else {
list = Collections.emptyList();
}
return list;
}
use of org.mozilla.javascript.NativeJavaObject in project convertigo by convertigo.
the class ParameterUtils method toString.
public static String toString(Object ob) {
String parameterToString;
if (ob != null) {
if (ob instanceof NativeObject) {
NativeObject nativeObject = (NativeObject) ob;
parameterToString = nativeToString(nativeObject);
} else if (ob instanceof NativeJavaObject) {
NativeJavaObject nativeJavaObject = (NativeJavaObject) ob;
parameterToString = toString(nativeJavaObject.unwrap());
} else if (ob instanceof NativeJavaArray || ob instanceof NativeArray || ob.getClass().isArray() || ob instanceof Collection<?>) {
parameterToString = toStringList(ob).toString();
} else if (ob instanceof NodeList) {
parameterToString = "";
NodeList nl = (NodeList) ob;
for (int i = 0; i < nl.getLength(); i++) {
parameterToString += nodeToString(nl.item(i));
}
} else if (ob instanceof Node) {
parameterToString = nodeToString((Node) ob);
} else {
parameterToString = ob.toString();
}
} else {
parameterToString = null;
}
return parameterToString;
}
use of org.mozilla.javascript.NativeJavaObject in project kolmafia by kolmafia.
the class AshStub method call.
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
JavascriptRuntime.checkInterrupted();
ValueConverter coercer = new ValueConverter(cx, scope);
// Find library function matching arguments, in two stages.
// First, designate any arguments where we can't determine type from JS as ANY_TYPE.
List<Value> ashArgs = new ArrayList<>();
for (final Object original : args) {
Value coerced = coercer.fromJava(original);
if (coerced == null) {
coerced = new Value(DataTypes.ANY_TYPE);
}
ashArgs.add(coerced);
}
Function function = findMatchingFunction(ashArgs);
if (function == null) {
throw controller.runtimeException(Parser.undefinedFunctionMessage(ashFunctionName, ashArgs));
}
// Second, infer the type for any missing arguments from the closest function match.
for (int i = 0; i < ashArgs.size(); i++) {
Object original = args[i];
Value coerced = coercer.fromJava(original);
if (coerced == null) {
// Try again, this time with a type hint.
coerced = coercer.fromJava(original, function.getVariableReferences().get(i).getType());
if (coerced == null) {
throw controller.runtimeException("Could not coerce argument to valid ASH value.");
}
}
}
function = findMatchingFunction(ashArgs);
if (function == null) {
throw controller.runtimeException(Parser.undefinedFunctionMessage(ashFunctionName, ashArgs));
}
Value ashReturnValue = execute(function, ashArgs);
// value of those functions. In JavaScript we don't want this behaviour at all
if (!KoLmafia.refusesContinue() && ashReturnValue != null) {
this.controller.setState(ScriptRuntime.State.NORMAL);
KoLmafia.forceContinue();
}
Object returnValue = coercer.asJava(ashReturnValue);
JavascriptRuntime.checkInterrupted();
if (returnValue instanceof Value && ((Value) returnValue).asProxy() instanceof ProxyRecordValue) {
returnValue = EnumeratedWrapper.wrap(scope, returnValue.getClass(), (Value) returnValue);
} else if (!(returnValue instanceof Scriptable)) {
returnValue = Context.javaToJS(returnValue, scope);
}
if (returnValue instanceof NativeJavaObject) {
throw controller.runtimeException("ASH function returned native Java object.");
}
return returnValue;
}
Aggregations