All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jfree.xml.ParserUtil Maven / Gradle / Ivy

Go to download

jtstand-common is a library derived from jcommon, used by jtstand-chart, which is derived from jfreechart

There is a newer version: 1.5.9
Show newest version
/*
 * Copyright (c) 2009 Albert Kurucz. 
 *
 * This file, ParserUtil.java is part of JTStand.
 *
 * JTStand is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JTStand 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with GTStand.  If not, see .
 */
package org.jfree.xml;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Stroke;
import java.awt.geom.Rectangle2D;
import java.lang.reflect.Field;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

/**
 * Basic helper functions to ease up the process of parsing.
 *
 * @author Thomas Morgner
 */
public class ParserUtil {

    /**
     * Parses the string text into an int. If text is null or does not
     * contain a parsable value, the message given in message is used to
     * throw a SAXException.
     *
     * @param text  the text to parse.
     * @param message  the error message if parsing fails.
     *
     * @return the int value.
     *
     * @throws SAXException if there is a problem with the parsing.
     */
    public static int parseInt(final String text, final String message) throws SAXException {
        if (text == null) {
            throw new SAXException(message);
        }

        try {
            return Integer.parseInt(text);
        }
        catch (NumberFormatException nfe) {
            throw new SAXException("NumberFormatError: " + message);
        }
    }

    /**
     * Parses an integer.
     *
     * @param text  the text to parse.
     * @param defaultVal  the default value.
     *
     * @return the integer.
     */
    public static int parseInt(final String text, final int defaultVal) {
        if (text == null) {
            return defaultVal;
        }

        try {
            return Integer.parseInt(text);
        }
        catch (NumberFormatException nfe) {
            return defaultVal;
        }
    }

    /**
     * Parses the string text into an float. If text is null or does not
     * contain a parsable value, the message given in message is used to
     * throw a SAXException.
     *
     * @param text  the text to parse.
     * @param message  the error message if parsing fails.
     *
     * @return the float value.
     *
     * @throws SAXException if there is a problem with the parsing.
     */
    public static float parseFloat(final String text, final String message) throws SAXException {
        if (text == null) {
            throw new SAXException(message);
        }
        try {
            return Float.parseFloat(text);
        }
        catch (NumberFormatException nfe) {
            throw new SAXException("NumberFormatError: " + message);
        }
    }

    /**
     * Parses the string text into an float. If text is null or does not
     * contain a parsable value, the message given in message is used to
     * throw a SAXException.
     *
     * @param text  the text to parse.
     * @param defaultVal the defaultValue returned if parsing fails.
     *
     * @return the float value.
     */
    public static float parseFloat(final String text, final float defaultVal) {
        if (text == null) {
            return defaultVal;
        }
        try {
            return Float.parseFloat(text);
        }
        catch (NumberFormatException nfe) {
            return defaultVal;
        }
    }

    /**
     * Parses a boolean. If the string text contains the value of "true", the
     * true value is returned, else false is returned.
     *
     * @param text  the text to parse.
     * @param defaultVal  the default value.
     *
     * @return a boolean.
     */
    public static boolean parseBoolean(final String text, final boolean defaultVal) {
        if (text == null) {
            return defaultVal;
        }
        return text.equalsIgnoreCase("true");
    }

    /**
     * Parses a string. If the text is null, defaultval is returned.
     *
     * @param text  the text to parse.
     * @param defaultVal  the default value.
     *
     * @return a string.
     */
    public static String parseString(final String text, final String defaultVal) {
        if (text == null) {
            return defaultVal;
        }
        return text;
    }

    /**
     * Creates a basic stroke given the width contained as float in the given string.
     * If the string could not be parsed into a float, a basic stroke with the width of
     * 1 is returned.
     *
     * @param weight  a string containing a number (the stroke weight).
     *
     * @return the stroke.
     */
    public static Stroke parseStroke(final String weight) {
        try {
            if (weight != null) {
                final Float w = new Float(weight);
                return new BasicStroke(w.floatValue());
            }
        }
        catch (NumberFormatException nfe) {
            //Log.warn("Invalid weight for stroke", nfe);
        }
        return new BasicStroke(1);
    }

    /**
     * Parses a color entry. If the entry is in hexadecimal or ocal notation, the color is
     * created using Color.decode(). If the string denotes a constant name of on of the color
     * constants defined in java.awt.Color, this constant is used.
     * 

* As fallback the color black is returned if no color can be parsed. * * @param color the color (as a string). * * @return the paint. */ public static Color parseColor(final String color) { return parseColor(color, Color.black); } /** * Parses a color entry. If the entry is in hexadecimal or octal notation, the color is * created using Color.decode(). If the string denotes a constant name of one of the color * constants defined in java.awt.Color, this constant is used. *

* As fallback the supplied default value is returned if no color can be parsed. * * @param color the color (as a string). * @param defaultValue the default value (returned if no color can be parsed). * * @return the paint. */ public static Color parseColor(final String color, final Color defaultValue) { if (color == null) { return defaultValue; } try { // get color by hex or octal value return Color.decode(color); } catch (NumberFormatException nfe) { // if we can't decode lets try to get it by name try { // try to get a color by name using reflection // black is used for an instance and not for the color itselfs final Field f = Color.class.getField(color); return (Color) f.get(null); } catch (Exception ce) { //Log.warn("No such Color : " + color); // if we can't get any color return black return defaultValue; } } } /** * Parses a position of an element. If a relative postion is given, the returnvalue * is a negative number between 0 and -100. * * @param value the value. * @param exceptionMessage the exception message. * * @return the float value. * * @throws SAXException if there is a problem parsing the string. */ public static float parseRelativeFloat(final String value, final String exceptionMessage) throws SAXException { if (value == null) { throw new SAXException(exceptionMessage); } final String tvalue = value.trim(); if (tvalue.endsWith("%")) { final String number = tvalue.substring(0, tvalue.indexOf("%")); final float f = parseFloat(number, exceptionMessage) * -1.0f; return f; } else { return parseFloat(tvalue, exceptionMessage); } } /** * Parses an element position. The position is stored in the attributes "x", "y", "width" and * "height". The attributes are allowed to have relative notion. * * @param atts the attributes. * * @return the element position. * * @throws SAXException if there is a problem getting the element position. */ public static Rectangle2D getElementPosition(final Attributes atts) throws SAXException { final float x = ParserUtil.parseRelativeFloat(atts.getValue("x"), "Element x not specified"); final float y = ParserUtil.parseRelativeFloat(atts.getValue("y"), "Element y not specified"); final float w = ParserUtil.parseRelativeFloat(atts.getValue("width"), "Element width not specified"); final float h = ParserUtil.parseRelativeFloat(atts.getValue("height"), "Element height not specified"); final Rectangle2D.Float retval = new Rectangle2D.Float(x, y, w, h); return retval; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy