/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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. * * Copyright (c) 2001 - 2013 Object Refinery Ltd, Pentaho Corporation and Contributors.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core.modules.parser.base; import org.pentaho.reporting.engine.classic.core.util.beans.BeanPropertyLookupParser; import org.pentaho.reporting.libraries.xmlns.parser.RootXmlReadHandler; import org.xml.sax.Attributes; public class PropertyAttributes extends BeanPropertyLookupParser implements Attributes { private Attributes backend; private RootXmlReadHandler rootXmlReadHandler; public PropertyAttributes( final RootXmlReadHandler rootXmlReadHandler, final Attributes backend ) { this.rootXmlReadHandler = rootXmlReadHandler; this.backend = backend; } /** * Look up the index of an attribute by XML 1.0 qualified name. * * @param qName * The qualified (prefixed) name. * @return The index of the attribute, or -1 if it does not appear in the list. */ public int getIndex( final String qName ) { return backend.getIndex( qName ); } /** * Look up the index of an attribute by Namespace name. * * @param uri * The Namespace URI, or the empty string if the name has no Namespace URI. * @param localName * The attribute's local name. * @return The index of the attribute, or -1 if it does not appear in the list. */ public int getIndex( final String uri, final String localName ) { return backend.getIndex( uri, localName ); } /** * Return the number of attributes in the list. * <p/> * <p> * Once you know the number of attributes, you can iterate through the list. * </p> * * @return The number of attributes in the list. * @see #getURI(int) * @see #getLocalName(int) * @see #getQName(int) * @see #getType(int) * @see #getValue(int) */ public int getLength() { return backend.getLength(); } /** * Look up an attribute's local name by index. * * @param index * The attribute index (zero-based). * @return The local name, or the empty string if Namespace processing is not being performed, or null if the index is * out of range. * @see #getLength */ public String getLocalName( final int index ) { return backend.getLocalName( index ); } /** * Look up an attribute's XML 1.0 qualified name by index. * * @param index * The attribute index (zero-based). * @return The XML 1.0 qualified name, or the empty string if none is available, or null if the index is out of range. * @see #getLength */ public String getQName( final int index ) { return backend.getQName( index ); } /** * Look up an attribute's type by index. * <p/> * <p> * The attribute type is one of the strings "CDATA", "ID", "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY", * "ENTITIES", or "NOTATION" (always in upper case). * </p> * <p/> * <p> * If the parser has not read a declaration for the attribute, or if the parser does not report attribute types, then * it must return the value "CDATA" as stated in the XML 1.0 Recommentation (clause 3.3.3, "Attribute-Value * Normalization"). * </p> * <p/> * <p> * For an enumerated attribute that is not a notation, the parser will report the type as "NMTOKEN". * </p> * * @param index * The attribute index (zero-based). * @return The attribute's type as a string, or null if the index is out of range. * @see #getLength */ public String getType( final int index ) { return backend.getType( index ); } /** * Look up an attribute's type by XML 1.0 qualified name. * <p/> * <p> * See {@link #getType(int) getType(int)} for a description of the possible types. * </p> * * @param qName * The XML 1.0 qualified name. * @return The attribute type as a string, or null if the attribute is not in the list or if qualified names are not * available. */ public String getType( final String qName ) { return backend.getType( qName ); } /** * Look up an attribute's type by Namespace name. * <p/> * <p> * See {@link #getType(int) getType(int)} for a description of the possible types. * </p> * * @param uri * The Namespace URI, or the empty String if the name has no Namespace URI. * @param localName * The local name of the attribute. * @return The attribute type as a string, or null if the attribute is not in the list or if Namespace processing is * not being performed. */ public String getType( final String uri, final String localName ) { return backend.getType( uri, localName ); } /** * Look up an attribute's Namespace URI by index. * * @param index * The attribute index (zero-based). * @return The Namespace URI, or the empty string if none is available, or null if the index is out of range. * @see #getLength */ public String getURI( final int index ) { return backend.getURI( index ); } /** * Look up an attribute's value by index. * <p/> * <p> * If the attribute value is a list of tokens (IDREFS, ENTITIES, or NMTOKENS), the tokens will be concatenated into a * single string with each token separated by a single space. * </p> * * @param index * The attribute index (zero-based). * @return The attribute's value as a string, or null if the index is out of range. * @see #getLength */ public String getValue( final int index ) { return translateAndLookup( backend.getValue( index ) ); } /** * Look up an attribute's value by XML 1.0 qualified name. * <p/> * <p> * See {@link #getValue(int) getValue(int)} for a description of the possible values. * </p> * * @param qName * The XML 1.0 qualified name. * @return The attribute value as a string, or null if the attribute is not in the list or if qualified names are not * available. */ public String getValue( final String qName ) { return translateAndLookup( backend.getValue( qName ) ); } /** * Look up an attribute's value by Namespace name. * <p/> * <p> * See {@link #getValue(int) getValue(int)} for a description of the possible values. * </p> * * @param uri * The Namespace URI, or the empty String if the name has no Namespace URI. * @param localName * The local name of the attribute. * @return The attribute value as a string, or null if the attribute is not in the list. */ public String getValue( final String uri, final String localName ) { if ( Boolean.TRUE.equals( getRootXmlReadHandler().getHelperObject( "property-expansion" ) ) ) { return translateAndLookup( backend.getValue( uri, localName ) ); } return backend.getValue( uri, localName ); } protected RootXmlReadHandler getRootXmlReadHandler() { return rootXmlReadHandler; } protected Object performInitialLookup( final String name ) { return rootXmlReadHandler.getHelperObject( name ); } }