/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb.handlers.fieldtypes; import java.util.List; import java.util.Map; import org.w3c.dom.Element; import org.w3c.dom.Node; import com.enonic.esl.containers.MultiValueMap; import com.enonic.esl.xml.XMLTool; public class RelatedContent extends Field { private boolean multiple; public RelatedContent( Element inputElem ) { super( inputElem ); this.multiple = !"false".equals( inputElem.getAttribute( "multiple" ) ); } public void XMLToMultiValueMap( String name, Node dataNode, MultiValueMap fields, int groupCounter ) { if ( getRelationMap() != null ) { Map relationMap = getRelationMap(); String key = XMLTool.getNodeText( dataNode ); if ( key != null ) { key = key.toLowerCase(); } if ( relationMap.containsKey( key ) ) { fields.put( name, relationMap.get( key ) ); if ( fields.containsKey( name + "_counter" ) ) { List valueList = fields.getValueList( name + "_counter" ); if ( valueList.size() > groupCounter ) { int counter = ( (Integer) valueList.get( groupCounter ) ).intValue() + 1; valueList.set( groupCounter, new Integer( counter ) ); fields.remove( name + "_counter" ); fields.put( name + "_counter", valueList ); } else { fields.put( name + "_counter", 1 ); } } else { fields.put( name + "_counter", 1 ); } } else { fields.put( name + "_counter", 0 ); } } else if ( dataNode instanceof Element ) { Element dataElem = (Element) dataNode; if ( multiple ) { Element[] contentElems = XMLTool.getElements( dataElem, "content" ); if ( contentElems.length == 0 ) { fields.put( name, null ); } else { for ( int i = 0; i < contentElems.length; i++ ) { String key = contentElems[i].getAttribute( "key" ); fields.put( name, key ); } } fields.put( name + "_counter", contentElems.length ); } else { String value = dataElem.getAttribute( "key" ); if ( value != null && value.length() > 0 ) { fields.put( name, value ); } else { fields.put( name, null ); } } } } public void setData( Element elem, String data ) { if ( getRelationMap() != null ) { XMLTool.createTextNode( elem.getOwnerDocument(), elem, data ); } else if ( multiple ) { XMLTool.createElement( elem.getOwnerDocument(), elem, "content" ).setAttribute( "key", data ); } else { elem.setAttribute( "key", data ); } } }