/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb.handlers.fieldtypes; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import com.enonic.esl.containers.MultiValueMap; import com.enonic.esl.xml.XMLTool; public final class Block { private String xPath; private int index; private ArrayList<Field> inputFields = new ArrayList<Field>(); public Block( Element groupElem, HashMap fieldMapping ) { if ( fieldMapping == null ) { // regular content create, no import xPath = groupElem.getAttribute( "group" ); if ( xPath.startsWith( "contentdata/" ) ) { xPath = xPath.substring( "contentdata/".length() ); } } else if ( fieldMapping.containsKey( "_block_" + groupElem.getAttribute( "name" ) ) ) { xPath = (String) fieldMapping.get( "_block_" + groupElem.getAttribute( "name" ) ); } else { xPath = ""; } index = XMLTool.getElementIndex( groupElem ) + 1; Element[] inputElems = XMLTool.getElements( groupElem, "input" ); for ( int i = 0; i < inputElems.length; i++ ) { Field field = FieldFactory.getField( inputElems[i] ); String fieldName = field.getName(); if ( fieldMapping != null && fieldMapping.containsKey( fieldName ) ) { String fieldXPath = (String) fieldMapping.get( fieldName ); field.setXPath( fieldXPath ); } else if ( fieldMapping != null ) { field.setXPath( null ); } if ( fieldMapping != null && fieldMapping.containsKey( fieldName + "_relationMap" ) ) { Map relationMap = (Map) fieldMapping.get( fieldName + "_relationMap" ); field.setRelationMap( relationMap ); } inputFields.add( field ); } } public final void XMLToMultiValueMap( Element contentDataElem, MultiValueMap fields ) { if ( xPath.length() > 0 ) { Element[] groupElems = XMLTool.selectElements( contentDataElem, xPath ); for ( int i = 0; i < groupElems.length; i++ ) { fields.put( "group" + index + "_counter", "" ); for ( int j = 0; j < inputFields.size(); j++ ) { Field inputField = inputFields.get( j ); String xPath = inputField.getXPath(); if ( xPath != null ) { NodeList dataNodes = XMLTool.selectNodes( groupElems[i], xPath ); if ( dataNodes != null && dataNodes.getLength() > 0 ) { for ( int k = 0; k < dataNodes.getLength(); k++ ) { Node dataNode = dataNodes.item( k ); inputField.XMLToMultiValueMap( inputField.getName(), dataNode, fields, i ); } } else { inputField.XMLToMultiValueMap( inputField.getName(), fields ); } } } } } else { for ( int i = 0; i < inputFields.size(); i++ ) { Field inputField = inputFields.get( i ); String xPath = inputField.getXPath(); if ( xPath != null ) { NodeList dataNodes = XMLTool.selectNodes( contentDataElem, xPath ); if ( dataNodes != null && dataNodes.getLength() > 0 ) { for ( int k = 0; k < dataNodes.getLength(); k++ ) { Node dataNode = dataNodes.item( k ); inputField.XMLToMultiValueMap( inputField.getName(), dataNode, fields, 1 ); } } else { inputField.XMLToMultiValueMap( inputField.getName(), fields ); } } } } } }