org.eclipse.skalli.nexus.internal.NexusResponseParser.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.skalli.nexus.internal.NexusResponseParser.java

Source

/*******************************************************************************
 * Copyright (c) 2010-2014 SAP AG and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.skalli.nexus.internal;

import java.net.URI;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.skalli.commons.URLUtils;
import org.eclipse.skalli.nexus.NexusClientException;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

class NexusResponseParser {

    static Node findNode(Element rootElement, String nodeName) throws NexusClientException {
        List<Node> nodes = new ArrayList<Node>();
        NodeList children = rootElement.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            Node node = children.item(i);
            if (nodeName.equals(node.getNodeName())) {
                nodes.add(node);
            }
        }

        if (nodes.size() == 0) {
            return null;
        } else if (nodes.size() > 1) {
            throw new NexusClientException(
                    MessageFormat.format("Root element ''{0}'' has {1} nodes with name ''{2}''",
                            rootElement.getNodeName(), nodes.size(), nodeName));
        }
        return nodes.get(0);
    }

    static String getNodeTextContent(Element rootElement, String nodeName) throws NexusClientException {
        Node versionNode = findNode(rootElement, nodeName);
        if (versionNode == null) {
            return null;
        }
        return versionNode.getTextContent();
    }

    static int getNodeTextContentAsInt(Element rootElement, String nodeName, int defaultValue)
            throws NexusClientException {
        int result;
        String fromStr = getNodeTextContent(rootElement, nodeName);
        if (StringUtils.isNotBlank(fromStr)) {
            try {
                result = Integer.parseInt(fromStr);
            } catch (NumberFormatException e) {
                throw new NexusClientException(MessageFormat.format(
                        "NodeContet ''{0}'' of node ''{1}'' from Root element ''{2}'' is not an integer", fromStr,
                        nodeName, rootElement.getNodeName()));
            }
        } else {
            result = defaultValue;
        }
        return result;
    }

    static boolean getNodeTextContentAsBoolean(Element rootElement, String nodeName) throws NexusClientException {
        return BooleanUtils.toBoolean(getNodeTextContent(rootElement, nodeName));
    }

    static URI getNodeTextContentAsURI(Element rootElement, String nodeName) throws NexusClientException {
        String textContent = getNodeTextContent(rootElement, nodeName);
        if (StringUtils.isBlank(textContent)) {
            return null;
        }
        try {
            return URLUtils.stringToURL(textContent).toURI();
        } catch (Exception e) {
            throw new NexusClientException(MessageFormat.format("''{0}'' is not a valid URL", textContent), e);
        }
    }

}