/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.datasource.xml; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import com.enonic.cms.framework.util.JDOMUtil; public final class DataSourceXmlFactory { private final XMLOutputter xmlOutputter; public DataSourceXmlFactory() { this.xmlOutputter = new XMLOutputter( Format.getCompactFormat() ); } public DataSourcesElement create( final Element root ) { final DataSourcesElement result = new DataSourcesElement(); if ( root != null ) { populate( result, root ); } return result; } private void populate( final DataSourcesElement result, final Element root ) { result.setResultElement( root.getAttributeValue( "result-element" ) ); for ( final Element child : JDOMUtil.getElements( root ) ) { result.add( createDataSource( child ) ); } } private DataSourceElement createDataSource( final Element root ) { final DataSourceElement result = new DataSourceElement( root.getAttributeValue( "name" ) ); result.setResultElement( root.getAttributeValue( "result-element" ) ); result.setCondition( root.getAttributeValue( "condition" ) ); final String cacheAttr = root.getAttributeValue( "cache" ); if ( cacheAttr == null ) { result.setCache( true ); } else { result.setCache( "true".equals( cacheAttr ) ); } for ( final Element child : JDOMUtil.getElements( root ) ) { addParameter( result, child ); } return result; } private void addParameter( final DataSourceElement result, final Element root ) { final String name = root.getAttributeValue( "name" ); String value = root.getTextNormalize(); if ( isXmlParameter( root ) ) { value = this.xmlOutputter.outputString( root.getContent() ); } result.addParameter( name, value ); } private boolean isXmlParameter( final Element elem ) { return !elem.getChildren().isEmpty(); } }