// Copyright 2009 Google Inc. All Rights Reserved.

package org.unicode.cldr.icu;

import org.unicode.cldr.util.CLDRFile;
import org.unicode.cldr.util.XPathParts;

// Notes:
// - xpp.set (currently) resets the entire state of the xpp, so there are no side effects
// of these calls.
// - This is not used in a multi-threaded environment, so a static instance is ok.  If
// this turns out not to be true, make thread-local.

public class XPPUtil {
    public static String getXpathName(String xpath) {
        xpp.set(xpath);
        return xpp.getElement(-1);
    }

    public static String getXpathName(String xpath, int pos) {
        xpp.set(xpath);
        return xpp.getElement(pos);
    }

    public static String getAttributeValue(String xpath, String element, String attribute) {
        xpp.set(xpath);
        int el = xpp.findElement(element);
        if (el == -1) {
            return null;
        }
        return xpp.getAttributeValue(el, attribute);
    }

    public static String getAttributeValue(String xpath, String attribute) {
        xpp.set(xpath);
        return xpp.getAttributeValue(-1, attribute);
    }

    public static String getBasicAttributeValue(CLDRFile whichFile, String xpath, String attribute) {
        String fullPath = whichFile.getFullXPath(xpath);
        if (fullPath == null) {
            return null;
        }
        return getAttributeValue(fullPath, attribute);
    }

    public static String findAttributeValue(CLDRFile file, String xpath, String attribute) {
        String fullPath = file.getFullXPath(xpath);
        xpp.set(fullPath);
        for (int j = 1; j <= xpp.size(); j++) {
            String v = xpp.getAttributeValue(0 - j, attribute);
            if (v != null)
                return v;
        }
        return null;
    }

    private static final XPathParts xpp = new XPathParts(null, null);
}