Package ariba.ui.groovy

Source Code of ariba.ui.groovy.AWGPathClassExtensions$NodeChild_FieldValue

/*
    Copyright 1996-2008 Ariba, Inc.

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

    $$
*/
package ariba.ui.groovy;

import ariba.util.fieldvalue.FieldValue_Object;
import ariba.util.fieldvalue.FieldPath;
import ariba.util.fieldvalue.FieldValue;
import ariba.util.fieldvalue.OrderedList;
import ariba.util.core.Assert;
import groovy.util.slurpersupport.GPathResult;
import groovy.util.slurpersupport.NodeChild;
import java.util.ArrayList;

/**
    FieldValue support for Groovy GPath (e.g. XMLSlurper) results.
    Makes working with GPath results in AW bindings consistent with
    binding to XML DOM Nodes
  */
public class AWGPathClassExtensions
{
    static {
        // register class extensions
        FieldValue.registerClassExtension(GPathResult.class, new GPath_FieldValue());
        FieldValue.registerClassExtension(NodeChild.class, new NodeChild_FieldValue());
        OrderedList.registerClassExtension(GPathResult.class, new GPathResult_OrderedList());
    }

    static void initialize () {}
   
    static class GPath_FieldValue extends FieldValue_Object
    {
        public Object getFieldValuePrimitive (Object receiver, FieldPath keyPath)
        {
            GPathResult node = (GPathResult)receiver;
            String key = keyPath.car();

            // magic keys...
            if (key.equals("tagName")) {
                return node.name();
            }

            if (key.equals("children")) {
                return node.children();
            }

            if (key.equals("text")) {
                return node.text();
            }

            if (key.endsWith("[]")) {
                key = key.substring(0, key.length()-2);
                return node.getProperty(key);
            }

            // Expect single value
            Object val = node.getProperty(key);

            if (val instanceof GPathResult) {
                int size = ((GPathResult)val).size();
                val = size > 0 ? ((GPathResult)val).getAt(0) : null;
            }

            return val;
        }
    }

    static class NodeChild_FieldValue extends GPath_FieldValue
    {
        public Object getFieldValuePrimitive (Object receiver, FieldPath keyPath)
        {
            NodeChild node = (NodeChild)receiver;
            String key = keyPath.car();

            // try a string value
            Object attrValue = node.attributes().get(key);
            if (attrValue != null) return attrValue;

            return super.getFieldValuePrimitive(receiver, keyPath);
        }
    }

    static class GPathResult_OrderedList extends OrderedList
    {
        public int size(Object receiver)
        {
            return ((GPathResult)receiver).size();
        }

        public Object elementAt(Object receiver, int elementIndex) {
            return ((GPathResult)receiver).getAt(elementIndex);
        }

        public java.util.Iterator elements (Object receiver)
        {
            return ((GPathResult)receiver).iterator();
        }

        public Object mutableInstance(Object receiver) {
            return new ArrayList();
        }

        public void setElementAt(Object receiver, Object element, int elementIndex) {
            Assert.that(false, "Not supported");
        }

        public void addElement(Object receiver, Object element) {
            Assert.that(false, "Not supported");
        }

        public void insertElementAt(Object receiver, Object element, int elementIndex) {
            Assert.that(false, "Not supported");
        }
    }
}
TOP

Related Classes of ariba.ui.groovy.AWGPathClassExtensions$NodeChild_FieldValue

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.