/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb.handlers.fieldtypes; import java.io.IOException; import java.util.Map; import javax.annotation.PostConstruct; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.springframework.beans.factory.annotation.Value; import org.w3c.dom.Element; import org.w3c.dom.Node; import com.enonic.esl.containers.MultiValueMap; import com.enonic.esl.xml.XMLTool; public abstract class Field { private String xPath; private String name; private Map relationMap = null; private static final FileUploadBase fileUpload; @Value("${cms.admin.binaryUploadMaxSize}") private static String multiPartRequestMaxSize; static { fileUpload = new FileUpload( new DiskFileItemFactory() ); fileUpload.setHeaderEncoding( "UTF-8" ); } public Field( Element inputElem ) { xPath = XMLTool.getElementText( XMLTool.getElement( inputElem, "xpath" ) ); if ( xPath.startsWith( "contentdata/" ) ) { xPath = xPath.substring( "contentdata/".length() ); } name = inputElem.getAttribute( "name" ); } @PostConstruct public void init() { fileUpload.setSizeMax( Long.parseLong( multiPartRequestMaxSize ) ); } public void XMLToMultiValueMap( String name, Node dataNode, MultiValueMap fields, int groupCounter ) { String value; if ( dataNode instanceof Element ) { value = XMLTool.getElementText( (Element) dataNode ); } else { value = XMLTool.getNodeText( dataNode ); } fields.put( name, value ); } public void XMLToMultiValueMap( String name, MultiValueMap fields ) { fields.put( name, (Object) null ); } public final String getXPath() { return xPath; } public final void setXPath( String xPath ) { this.xPath = xPath; } public final String getName() { return name; } public void setData( Element elem, String data ) { XMLTool.createTextNode( elem.getOwnerDocument(), elem, data ); } public String getPrimaryFormKey() { return name; } public String[] getFormKeys() { return new String[]{name}; } public FileItem createFileItem( String fileName, byte[] data ) { FileItem binary = null; try { binary = fileUpload.getFileItemFactory().createItem( name, null, false, fileName ); binary.getOutputStream().write( data ); } catch ( IOException ioe ) { throw new RuntimeException( ioe ); } return binary; } public Map getRelationMap() { return relationMap; } public void setRelationMap( Map relationMap ) { this.relationMap = relationMap; } }