Java Javascript Mozilla Library objArg(Object[] args, int pos, Class type, boolean required)

Here you can find the source of objArg(Object[] args, int pos, Class type, boolean required)

Description

Return the argument at "pos" as a member of the specified Java class, and throw an exception if "required" and the list is too short.

License

Open Source License

Declaration

public static <T> T objArg(Object[] args, int pos, Class<T> type, boolean required) 

Method Source Code

//package com.java2s;
/**//from   w w  w .ja  v  a2  s  .  c o m
 * Copyright 2013 Apigee Corporation.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

import org.mozilla.javascript.EvaluatorException;

public class Main {
    /**
     * Return the argument at "pos" as a member of the specified Java class, and throw an exception
     * if "required" and the list is too short. This is handy when passing Java objects back to JavaScript,
     * then getting them back and turning them back in to Java objects.
     */
    public static <T> T objArg(Object[] args, int pos, Class<T> type, boolean required) {
        if (required) {
            ensureArg(args, pos);
        }
        if (pos < args.length) {
            if (type.isInstance(args[pos])) {
                return type.cast(args[pos]);
            } else {
                Object arg = args[pos];
                while (arg instanceof org.mozilla.javascript.Wrapper) {
                    arg = ((org.mozilla.javascript.Wrapper) arg).unwrap();
                    if (type.isInstance(arg)) {
                        return type.cast(arg);
                    }
                }
                if (required) {
                    throw new EvaluatorException("Object of type " + type + " expected");
                } else {
                    return null;
                }
            }
        } else {
            return null;
        }
    }

    /**
     * Throw an execption if the argument list isn't long enough for argument "pos".
     */
    public static void ensureArg(Object[] args, int pos) {
        if (pos >= args.length) {
            throw new EvaluatorException("Not enough arguments.");
        }
    }
}

Related

  1. mapJSToJava(final Object jsObject)
  2. mapToNativeObject(Map map)
  3. nativeArrayToString(Object scriptObject)
  4. newObject()
  5. numberArg(Object[] args, int pos)
  6. objectToXMLString(Object xml)
  7. omitLineBreak(AstNode node)
  8. oneLineStringOf(AstNode node)
  9. parentOfAnyTypes(AstNode node, Set types, boolean isStrict)