/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, version 2 as published by the Free Software * Foundation. * * You should have received a copy of the GNU General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details. * * * Copyright 2006 - 2013 Pentaho Corporation. All rights reserved. */ package org.pentaho.platform.engine.core.system.objfac.spring; import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.xml.BeanDefinitionDecorator; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * Reads the attributes added to a bean and sets them on the BeanDefinition's Attributes collection. * * {@code} <pen:attributes> <pen:attr key="key" value="value"/> </pen:attributes> {@code} * * User: nbaker Date: 1/16/13 */ public class BeanAttributeHandler implements BeanDefinitionDecorator { private static String ATTR = "attr"; @Override public BeanDefinitionHolder decorate( Node node, BeanDefinitionHolder beanDefinitionHolder, ParserContext parserContext ) { NodeList nodes = node.getChildNodes(); beanDefinitionHolder.getBeanDefinition().setAttribute( "id", beanDefinitionHolder.getBeanName() ); for ( int i = 0; i < nodes.getLength(); i++ ) { Node n = nodes.item( i ); if ( stripNamespace( n.getNodeName() ).equals( ATTR ) ) { beanDefinitionHolder.getBeanDefinition().setAttribute( n.getAttributes().getNamedItem( Const.KEY ).getNodeValue(), n.getAttributes().getNamedItem( Const.VALUE ).getNodeValue() ); } } return beanDefinitionHolder; } private static String stripNamespace( String s ) { if ( s.indexOf( ':' ) > 0 ) { return s.substring( s.indexOf( ':' ) + 1 ); } return s; } }