org.paxml.el.XpathFunctions.java Source code

Java tutorial

Introduction

Here is the source code for org.paxml.el.XpathFunctions.java

Source

/**
 * This file is part of PaxmlCore.
 *
 * PaxmlCore is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * PaxmlCore is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with PaxmlCore.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.paxml.el;

import java.util.Collection;

import org.apache.commons.jxpath.ExpressionContext;
import org.apache.commons.jxpath.Pointer;
import org.paxml.core.Context;
import org.paxml.util.ReflectUtils;

/**
 * The xpath functions.
 * 
 * @author Xuetao Niu
 * 
 */
public final class XpathFunctions {

    private XpathFunctions() {

    }

    /**
     * Check if a value matches a java class.
     * 
     * @param context
     *            the xpath context
     * @param className
     *            the class name
     * @param exact
     *            false to consider inheritance, true to only do exact class
     *            match.
     * @return true if matches, false if not match
     */
    public static boolean matchClass(ExpressionContext context, String className, boolean exact) {
        Pointer pointer = context.getContextNodePointer();
        if (pointer == null) {
            return false;
        }
        Object value = pointer.getValue();
        if (value == null) {
            return false;
        }
        if (exact) {
            return ReflectUtils.loadClassStrict(className, null).equals(value.getClass());
        } else {
            return ReflectUtils.loadClassStrict(className, null).isInstance(value);
        }
    }

    /**
     * Check if a value is in a collection.
     * 
     * @param context
     *            the xpath context
     * @param collection
     *            comma delimited string or collection
     * @return true if the comma delimited string is in
     */
    public static boolean in(ExpressionContext context, Object collection) {
        if (collection == null) {
            return false;
        }
        Pointer pointer = context.getContextNodePointer();
        if (pointer == null) {
            return false;
        }
        Object value = pointer.getValue();
        if (value == null) {
            return false;
        }

        if (collection instanceof Collection) {
            return UtilFunctions.in(value, (Collection) collection);
        } else {
            return UtilFunctions.in(value, UtilFunctions.breakString(collection.toString(), null));
        }
    }

    /**
     * Get the class of an object.
     * 
     * @param obj
     *            the obj
     * @return null if passed in null, otherwise, returns the class of the
     *         passed-in object.
     */
    public static Class getClass(Object obj) {
        if (obj == null) {
            return null;
        }
        return obj.getClass();
    }

    /**
     * Get the current node.
     * 
     * @param context
     *            the xpath context
     * @return the current node, null if no current node
     */
    public static Object current(ExpressionContext context) {
        Pointer pointer = context.getContextNodePointer();
        if (pointer == null) {
            return null;
        }
        return pointer.getValue();

    }

    /**
     * Get the id of the current node
     * 
     * @param obj
     * @return
     */
    public static String findId(ExpressionContext context) {

        Pointer pointer = context.getContextNodePointer();
        if (pointer == null) {
            return null;
        }
        Object obj = pointer.getValue();
        return Context.getCurrentContext().findConstId(obj, true, true);
    }
}