package org.andengine.extension.svg.adt; import org.andengine.extension.svg.util.SAXHelper; import org.andengine.extension.svg.util.SVGParserUtils; import org.andengine.extension.svg.util.constants.ISVGConstants; import org.xml.sax.Attributes; import org.xml.sax.helpers.AttributesImpl; /** * @author Larva Labs, LLC * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 16:49:55 - 21.05.2011 */ public class SVGProperties implements ISVGConstants { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final SVGStyleSet mSVGStyleSet; private final Attributes mAttributes; private final SVGProperties mParentSVGProperties; // =========================================================== // Constructors // ===========================================================# public SVGProperties(final SVGProperties pParentSVGProperties, final Attributes pAttributes, final boolean pAttributesDeepCopy) { this.mAttributes = (pAttributesDeepCopy) ? new AttributesImpl(pAttributes) : pAttributes; this.mParentSVGProperties = pParentSVGProperties; final String styleAttr = SAXHelper.getStringAttribute(pAttributes, ATTRIBUTE_STYLE); if (styleAttr != null) { this.mSVGStyleSet = new SVGStyleSet(styleAttr); } else { this.mSVGStyleSet = null; } } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== public String getStringProperty(final String pPropertyName, final String pDefaultValue) { final String s = this.getStringProperty(pPropertyName); if (s == null) { return pDefaultValue; } else { return s; } } public String getStringProperty(final String pPropertyName) { // TODO Remove this method and make all others take 'pAllowParentSVGProperties' too. return this.getStringProperty(pPropertyName, true); } public String getStringProperty(final String pPropertyName, final boolean pAllowParentSVGProperties) { String s = null; if (this.mSVGStyleSet != null) { s = this.mSVGStyleSet.getStyle(pPropertyName); } if (s == null) { s = SAXHelper.getStringAttribute(this.mAttributes, pPropertyName); } if(s == null && pAllowParentSVGProperties) { if(this.mParentSVGProperties == null) { return null; } else { return this.mParentSVGProperties.getStringProperty(pPropertyName); } } else { return s; } } public Float getFloatProperty(final String pPropertyName) { return SVGParserUtils.extractFloatAttribute(this.getStringProperty(pPropertyName)); } public Float getFloatProperty(final String pPropertyName, final float pDefaultValue) { final Float f = this.getFloatProperty(pPropertyName); if (f == null) { return pDefaultValue; } else { return f; } } public String getStringAttribute(final String pAttributeName) { return SAXHelper.getStringAttribute(this.mAttributes, pAttributeName); } public String getStringAttribute(final String pAttributeName, final String pDefaultValue) { return SAXHelper.getStringAttribute(this.mAttributes, pAttributeName, pDefaultValue); } public Float getFloatAttribute(final String pAttributeName) { return SAXHelper.getFloatAttribute(this.mAttributes, pAttributeName); } public float getFloatAttribute(final String pAttributeName, final float pDefaultValue) { return SAXHelper.getFloatAttribute(this.mAttributes, pAttributeName, pDefaultValue); } // =========================================================== // Property-Testing-Methods // =========================================================== public static boolean isURLProperty(final String pProperty) { return pProperty.startsWith("url(#"); } public static boolean isRGBProperty(final String pProperty) { return pProperty.startsWith("rgb("); } public static boolean isHexProperty(final String pProperty) { return pProperty.startsWith("#"); } // =========================================================== // Inner and Anonymous Classes // =========================================================== }