Package helma.scripting.rhino

Source Code of helma.scripting.rhino.PathWrapper

/*
* Helma License Notice
*
* The contents of this file are subject to the Helma License
* Version 2.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://adele.helma.org/download/helma/license.txt
*
* Copyright 1998-2003 Helma Software. All Rights Reserved.
*
* $RCSfile$
* $Author: lehni $
* $Revision: 9849 $
* $Date: 2009-08-12 13:02:06 +0200 (Mit, 12. Aug 2009) $
*/

package helma.scripting.rhino;

import helma.framework.core.RequestPath;
import org.mozilla.javascript.*;

import java.io.UnsupportedEncodingException;

/**
* This class wraps around instances of helma.framework.core.RequestPath and
* exposes them in an array-like fashion to the JavaScript runtime.
*
* @see helma.framework.core.RequestPath
*/
public class PathWrapper extends ScriptableObject {

    RequestPath path;
    RhinoCore core;

    /**
     * Zero arg constructor for creating the PathWrapper prototype.
     */
    public PathWrapper (RhinoCore core) throws PropertyException, NoSuchMethodException {
        this.core = core;
        // create a dummy path object
        this.path = new RequestPath(core.app);

        // initialize properties and functions
        setParentScope(core.getScope());
        setPrototype(null);
        defineProperty("length", PathWrapper.class, DONTENUM | READONLY | PERMANENT);
        defineFunctionProperties(new String[] {"href", "contains"},
                                 PathWrapper.class, DONTENUM | PERMANENT);
    }

    /**
     * Creates a new PathWrapper around a RequestPath.
     */
    PathWrapper(RequestPath path, RhinoCore core) {
        this.path = path;
        this.core = core;
    }


    /**
     * Returns a path object in the wrapped path by property name.
     */
    public Object get(String name, Scriptable start) {
        Object obj = path.getByPrototypeName(name);

        if (obj != null) {
            return Context.toObject(obj, core.getScope());
        }

        return super.get(name, start);
    }

    /**
     * Returns a path object in the wrapped path by property name.
     */
    public Object get(int idx, Scriptable start) {
        Object obj = path.get(idx);

        if (obj != null) {
            return Context.toObject(obj, core.getScope());
        }

        return null;
    }

    /**
     * Checks if an object with the given name is contained in the path.
     */
    public boolean has(String name, Scriptable start) {
        return path.getByPrototypeName(name) != null;
    }

    /**
     * Checks if an object with the given index is contained in the path.
     */
    public boolean has(int index, Scriptable start) {
        return index >= 0 && index < path.size();
    }

    /**
     * Returns a list of array indices 0..length-1.
     */
    public Object[] getIds() {
        Object[] ids = new Object[path.size()];

        for (int i=0; i<ids.length; i++) {
            ids[i] = new Integer(i);
        }

        return ids;
    }

    /**
     * Getter for length property.
     */
    public long getLength() {
        return path.size();
    }

    /**
     * Returns the wrapped path rendered as URL path.
     */
    public String href(Object action) throws UnsupportedEncodingException {
        if (action != null && action != Undefined.instance) {
            return path.href(action.toString());
        }

        return path.href(null);
    }
   
    /**
     * Checks if the given object is contained in the request path
     *
     * @param obj the element to check
     * @return the index of the element, or -1 if it isn't contained
     */
    public int contains(Object obj) {
        if (obj instanceof Wrapper)
            obj = ((Wrapper) obj).unwrap();
        return path.contains(obj);
    }

    public String getClassName() {
        return "[PathWrapper]";
    }

    public String toString() {
        return "PathWrapper["+path.toString()+"]";
    }
   
    /**
     * Return a primitive representation for this object.
     * FIXME: We always return a string representation.
     *
     * @param hint the type hint
     * @return the default value for the object
     */
    public Object getDefaultValue(Class hint) {
        return toString();
    }
}
TOP

Related Classes of helma.scripting.rhino.PathWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.