Package org.newdawn.slick.svg

Source Code of org.newdawn.slick.svg.NonGeometricData

package org.newdawn.slick.svg;

import java.util.Properties;

import org.newdawn.slick.Color;

/**
* A set of data about a shape that doesn't fit into it's geometric
* configuration.
*
* @author kevin
*/
public class NonGeometricData {
  /** The ID of the figure */
  public static final String ID = "id";
  /** The fill type */
  public static final String FILL = "fill";
  /** The stroke type */
  public static final String STROKE = "stroke";
  /** The alpha value for filling */
  public static final String OPACITY = "opacity";
  /** The width of the line to draw */
  public static final String STROKE_WIDTH = "stroke-width";
  /** The mitre of the line to draw */
  public static final String STROKE_MITERLIMIT = "stroke-miterlimit";
  /** The dash definition of the line to draw */
  public static final String STROKE_DASHARRAY = "stroke-dasharray";
  /** The offset into the dash definition of the line to draw */
  public static final String STROKE_DASHOFFSET = "stroke-dashoffset";
  /** The alpha value for drawing */
  public static final String STROKE_OPACITY = "stroke-opacity";
 
  /** Value indicating that no settings has been specified */
  public static final String NONE = "none";
 
  /** The meta data stored for the figure */
  private String metaData = "";
  /** The attributes stored for the figure */
  private Properties props = new Properties();
 
  /**
   * Create a set of non-geometric data for a figure
   *
   * @param metaData The meta data (either label or id) for the figure
   */
  public NonGeometricData(String metaData) {
    this.metaData = metaData;
    addAttribute(STROKE_WIDTH, "1");
  }
 
  /**
   * Morph the color from a string
   *
   * @param str The string to morph
   * @return The new color string
   */
  private String morphColor(String str) {
    if (str.equals("")) {
      return "#000000";
    }
    if (str.equals("white")) {
      return "#ffffff";
    }
    if (str.equals("black")) {
      return "#000000";
    }
   
    return str;
  }
 
  /**
   * Add a configured style attribute into the data set
   *
   * @param attribute The attribute to add 
   * @param value The value to assign
   */
  public void addAttribute(String attribute, String value) {
    if (value == null) {
      value = "";
    }
   
    if (attribute.equals(FILL) ) {
      value = morphColor(value);
    }
    if (attribute.equals(STROKE_OPACITY)) {
      if (value.equals("0")) {
        props.setProperty(STROKE, "none");
      }
    }
    if (attribute.equals(STROKE_WIDTH)) {
      if (value.equals("")) {
        value = "1";
      }
      if (value.endsWith("px")) {
        value = value.substring(0,value.length()-2);
      }
    }
    if (attribute.equals(STROKE)) {
      if ("none".equals(props.getProperty(STROKE))) {
        return;
      }
      value = morphColor(value);
    }
   
    props.setProperty(attribute, value);
  }

  /**
   * Check if a given attribute is in colour format
   *
   * @param attribute The attribute to check
   * @return True if the attirbute value is in colour format
   */
  public boolean isColor(String attribute) {
    return getAttribute(attribute).startsWith("#");
  }
 
  /**
   * Get the meta data assigned to the figure. Either the label or
   * the id value.
   *
   * @return The meta data assigned to the figure
   */
  public String getMetaData() {
    return metaData;
  }
 
  /**
   * Get the attribtue value for a given attribute
   *
   * @param attribute The attribute whose value should be obtained
   * @return The value for the given attribute
   */
  public String getAttribute(String attribute) {
    return props.getProperty(attribute);
  }
 
  /**
   * Get an attribute value converted to a color. isColor should first be checked
   *
   * @param attribute The attribute whose value should be interpreted as a color
   * @return The color based on the attribute
   */
  public Color getAsColor(String attribute) {
    if (!isColor(attribute)) {
      throw new RuntimeException("Attribute "+attribute+" is not specified as a color:"+getAttribute(attribute));
    }
   
    int col = Integer.parseInt(getAttribute(attribute).substring(1), 16);
   
    return new Color(col);
  }
 
  /**
   * Get the attribute value as a reference to another entity
   *
   * @param attribute The name of the attribute to retrieve
   * @return The reference part of the attribute value
   */
  public String getAsReference(String attribute) {
    String value = getAttribute(attribute);
    if (value.length() < 7) {
      return "";
    }
   
    value = value.substring(5, value.length()-1);
   
    return value;
  }
 
  /**
   * Get an attribute converted to a float value
   *
   * @param attribute The attribute to retrieve
   * @return The float value derived from the attribute
   */
  public float getAsFloat(String attribute) {
    String value = getAttribute(attribute);
    if (value == null) {
      return 0;
    }
   
    try {
      return Float.parseFloat(value);
    } catch (NumberFormatException e) {
      throw new RuntimeException("Attribute "+attribute+" is not specified as a float:"+getAttribute(attribute));     
    }
  }
}
TOP

Related Classes of org.newdawn.slick.svg.NonGeometricData

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.