/******************************************************************************* * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Innoopract Informationssysteme GmbH - initial API and implementation ******************************************************************************/ package com.w4t.webfileuploadkit; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; import org.eclipse.rwt.internal.lifecycle.HtmlResponseWriter; import org.eclipse.rwt.internal.service.ContextProvider; import org.eclipse.rwt.internal.util.HTML; import com.w4t.*; import com.w4t.engine.lifecycle.standard.EventQueue; import com.w4t.engine.requests.IFileUploadRequest; import com.w4t.event.WebFileUploadEvent; import com.w4t.internal.adaptable.IFileUploadAdapter; public abstract class WebFileUploadRenderer extends Renderer { public void readData( final WebComponent component ) { HttpServletRequest request = ContextProvider.getRequest(); String fileName = request.getParameter( component.getUniqueID() ); // don't ask for fileName == null; in this case there is actually an upload if( !"".equals( fileName ) ) { IFileUploadRequest uploadRequest = ( IFileUploadRequest )request; WebFileUpload upload = ( WebFileUpload )component; FileItem uploadedFile = uploadRequest.getFileItem( upload.getUniqueID() ); if( uploadedFile.getSize() != 0 ) { IFileUploadAdapter adapter = ( IFileUploadAdapter )upload.getAdapter( IFileUploadAdapter.class ); adapter.setFileItem( uploadedFile ); int id = WebFileUploadEvent.FILEUPLOADED; WebFileUploadEvent evt = new WebFileUploadEvent( upload, id ); EventQueue.getEventQueue().addToQueue( evt ); } } } public void render( final WebComponent component ) throws IOException { WebFileUpload fileUpload = ( WebFileUpload )component; WebForm webForm = fileUpload.getWebForm(); IFileUploadAdapter adapter = ( IFileUploadAdapter )webForm.getAdapter( IFileUploadAdapter.class ); adapter.setMultipartFormEncoding( true ); HtmlResponseWriter out = getResponseWriter(); out.startElement( HTML.INPUT, null ); out.writeAttribute( HTML.TYPE, HTML.FILE, null ); out.writeAttribute( HTML.NAME, fileUpload.getUniqueID(), null ); RenderUtil.writeUniversalAttributes( fileUpload ); createSizeAttribute( fileUpload ); appendFocusHandling( fileUpload ); out.endElement( HTML.INPUT ); } // Helping Methods ////////////////// abstract void appendFocusHandling( final WebFileUpload fileUpload ) throws IOException; private void createSizeAttribute( final WebFileUpload fileUpload ) throws IOException { int size = fileUpload.getSize(); if( size >= 0 ) { HtmlResponseWriter out = getResponseWriter(); out.writeAttribute( HTML.SIZE, String.valueOf( size ), null ); } } }