Guest User

Untitled

a guest
Jun 28th, 2013
536
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.io.IOException;
  2.  
  3. import javax.faces.component.UIComponent;
  4. import javax.faces.context.FacesContext;
  5. import javax.faces.context.ResponseWriter;
  6. import javax.faces.convert.ConverterException;
  7. import javax.servlet.ServletRequestWrapper;
  8. import <YourPackage>.MultipartRequest;
  9.  
  10. import org.apache.commons.fileupload.FileItem;
  11. import org.primefaces.component.fileupload.FileUpload;
  12. import org.primefaces.event.FileUploadEvent;
  13. import org.primefaces.model.DefaultUploadedFile;
  14. import org.primefaces.renderkit.CoreRenderer;
  15. import org.primefaces.util.ComponentUtils;
  16. import org.primefaces.util.HTML;
  17. import org.primefaces.util.WidgetBuilder;
  18.  
  19. public class FileUploadRenderer extends CoreRenderer {
  20.  
  21.     @Override
  22.     public void decode(FacesContext context, UIComponent component) {
  23.         FileUpload fileUpload = (FileUpload) component;
  24.         String clientId = fileUpload.getClientId(context);
  25.         MultipartRequest multipartRequest = getMultiPartRequestInChain(context);
  26.        
  27.         if(multipartRequest != null) {
  28.             FileItem file = multipartRequest.getFileItem(clientId);
  29.  
  30.             if(fileUpload.getMode().equals("simple")) {
  31.                 decodeSimple(context, fileUpload, file);
  32.             }
  33.             else {
  34.                 decodeAdvanced(context, fileUpload, file);
  35.             }
  36.         }
  37.     }
  38.    
  39.     public void decodeSimple(FacesContext context, FileUpload fileUpload, FileItem file) {
  40.         if(file.getName().equals(""))
  41.             fileUpload.setSubmittedValue("");
  42.         else
  43.             fileUpload.setSubmittedValue(new DefaultUploadedFile(file));
  44.     }
  45.    
  46.     public void decodeAdvanced(FacesContext context, FileUpload fileUpload, FileItem file) {
  47.         if(file != null) {
  48.             fileUpload.queueEvent(new FileUploadEvent(fileUpload, new DefaultUploadedFile(file)));
  49.         }
  50.     }
  51.    
  52.     /**
  53.      * Finds our MultipartRequestServletWrapper in case application contains other RequestWrappers
  54.      */
  55.     private MultipartRequest getMultiPartRequestInChain(FacesContext facesContext) {
  56.         Object request = facesContext.getExternalContext().getRequest();
  57.        
  58.         while(request instanceof ServletRequestWrapper) {
  59.             if(request instanceof MultipartRequest) {
  60.                 return (MultipartRequest) request;
  61.             }
  62.             else {
  63.                 request = ((ServletRequestWrapper) request).getRequest();
  64.             }
  65.         }
  66.        
  67.         return null;
  68.     }
  69.  
  70.     @Override
  71.     public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
  72.         FileUpload fileUpload = (FileUpload) component;
  73.        
  74.         encodeMarkup(context, fileUpload);
  75.         encodeScript(context, fileUpload);
  76.     }
  77.  
  78.     protected void encodeScript(FacesContext context, FileUpload fileUpload) throws IOException {
  79.         ResponseWriter writer = context.getResponseWriter();
  80.         String clientId = fileUpload.getClientId(context);
  81.         String mode = fileUpload.getMode();
  82.         WidgetBuilder wb = getWidgetBuilder(context);
  83.         wb.widget("FileUpload", fileUpload.resolveWidgetVar(), clientId, "fileupload", true)
  84.             .attr("mode", mode);
  85.        
  86.         if(!mode.equals("simple")) {
  87.             String update = fileUpload.getUpdate();
  88.             String process = fileUpload.getProcess();
  89.            
  90.             wb.attr("autoUpload", fileUpload.isAuto())
  91.                 .attr("dnd", fileUpload.isDragDropSupport())
  92.                 .attr("update", ComponentUtils.findClientIds(context, fileUpload, update), null)
  93.                 .attr("process", ComponentUtils.findClientIds(context, fileUpload, process), null)
  94.                 .attr("maxFileSize", fileUpload.getSizeLimit(), Integer.MAX_VALUE)
  95.                 .attr("invalidFileMessage", fileUpload.getInvalidFileMessage(), null)
  96.                 .attr("invalidSizeMessage", fileUpload.getInvalidSizeMessage(), null)
  97.                 .callback("onstart", "function()", fileUpload.getOnstart())
  98.                 .callback("oncomplete", "function()", fileUpload.getOncomplete());
  99.            
  100.             if(fileUpload.getAllowTypes() != null) {
  101.                 wb.append(",acceptFileTypes:").append(fileUpload.getAllowTypes());
  102.             }
  103.         }
  104.        
  105.         startScript(writer, clientId);
  106.         writer.write(wb.build());
  107.         endScript(writer);
  108.     }
  109.  
  110.     protected void encodeMarkup(FacesContext context, FileUpload fileUpload) throws IOException {
  111.         if(fileUpload.getMode().equals("simple"))
  112.             encodeSimpleMarkup(context, fileUpload);
  113.         else
  114.             encodeAdvancedMarkup(context, fileUpload);
  115.     }
  116.  
  117.     protected void encodeAdvancedMarkup(FacesContext context, FileUpload fileUpload) throws IOException {
  118.         ResponseWriter writer = context.getResponseWriter();
  119.         String clientId = fileUpload.getClientId(context);
  120.         String styleClass = fileUpload.getStyleClass();
  121.         styleClass = styleClass == null ? FileUpload.CONTAINER_CLASS : FileUpload.CONTAINER_CLASS + " " + styleClass;
  122.  
  123.         writer.startElement("div", fileUpload);
  124.         writer.writeAttribute("id", clientId, "id");
  125.         writer.writeAttribute("class", styleClass, "id");
  126.         if(fileUpload.getStyle() != null)
  127.             writer.writeAttribute("style", fileUpload.getStyle(), "style");
  128.        
  129.         //buttonbar
  130.         writer.startElement("div", fileUpload);
  131.         writer.writeAttribute("class", FileUpload.BUTTON_BAR_CLASS, "styleClass");
  132.  
  133.         //choose button
  134.         encodeChooseButton(context, fileUpload);
  135.        
  136.         if(fileUpload.isShowButtons() && !fileUpload.isAuto()) {
  137.             encodeButton(context, fileUpload.getUploadLabel(), FileUpload.UPLOAD_BUTTON_CLASS, "ui-icon-arrowreturnthick-1-n");
  138.             encodeButton(context, fileUpload.getCancelLabel(), FileUpload.CANCEL_BUTTON_CLASS, "ui-icon-cancel");
  139.         }
  140.        
  141.         writer.endElement("div");
  142.        
  143.         //content
  144.         writer.startElement("div", null);
  145.         writer.writeAttribute("class", FileUpload.CONTENT_CLASS, null);
  146.        
  147.         writer.startElement("table", null);
  148.         writer.writeAttribute("class", FileUpload.FILES_CLASS, null);
  149.         writer.endElement("table");
  150.        
  151.         writer.endElement("div");
  152.  
  153.         writer.endElement("div");
  154.     }
  155.  
  156.     protected void encodeSimpleMarkup(FacesContext context, FileUpload fileUpload) throws IOException {
  157.         encodeInputField(context, fileUpload, fileUpload.getClientId(context));
  158.     }
  159.    
  160.     protected void encodeChooseButton(FacesContext context, FileUpload fileUpload) throws IOException {
  161.         ResponseWriter writer = context.getResponseWriter();
  162.         String clientId = fileUpload.getClientId(context);
  163.        
  164.         writer.startElement("label", null);
  165.         writer.writeAttribute("class", HTML.BUTTON_TEXT_ICON_LEFT_BUTTON_CLASS + " " + FileUpload.CHOOSE_BUTTON_CLASS, null);
  166.        
  167.         //button icon
  168.         writer.startElement("span", null);
  169.         writer.writeAttribute("class", HTML.BUTTON_LEFT_ICON_CLASS + " ui-icon-plusthick", null);
  170.         writer.endElement("span");
  171.        
  172.         //text
  173.         writer.startElement("span", null);
  174.         writer.writeAttribute("class", HTML.BUTTON_TEXT_CLASS, null);
  175.         writer.writeText(fileUpload.getLabel(), "value");
  176.         writer.endElement("span");
  177.  
  178.         encodeInputField(context, fileUpload, clientId + "_input");
  179.        
  180.         writer.endElement("label");
  181.     }
  182.  
  183.     protected void encodeInputField(FacesContext context, FileUpload fileUpload, String clientId) throws IOException {
  184.         ResponseWriter writer = context.getResponseWriter();
  185.        
  186.         writer.startElement("input", null);
  187.         writer.writeAttribute("type", "file", null);
  188.         writer.writeAttribute("id", clientId, null);
  189.         writer.writeAttribute("name", clientId, null);
  190.        
  191.         if(fileUpload.isMultiple()) writer.writeAttribute("multiple", "multiple", null);
  192.         if(fileUpload.getStyle() != null) writer.writeAttribute("style", fileUpload.getStyle(), "style");
  193.         if(fileUpload.getStyleClass() != null) writer.writeAttribute("class", fileUpload.getStyleClass(), "styleClass");
  194.         if(fileUpload.isDisabled()) writer.writeAttribute("disabled", "disabled", "disabled");
  195.        
  196.         writer.endElement("input");
  197.     }
  198.    
  199.     protected void encodeButton(FacesContext context, String label, String styleClass, String icon) throws IOException {
  200.         ResponseWriter writer = context.getResponseWriter();
  201.        
  202.         writer.startElement("button", null);
  203.         writer.writeAttribute("type", "button", null);
  204.         writer.writeAttribute("class", HTML.BUTTON_TEXT_ICON_LEFT_BUTTON_CLASS + " " + styleClass, null);
  205.        
  206.         //button icon
  207.         String iconClass = HTML.BUTTON_LEFT_ICON_CLASS ;
  208.         writer.startElement("span", null);
  209.         writer.writeAttribute("class", iconClass + " " + icon, null);
  210.         writer.endElement("span");
  211.        
  212.         //text
  213.         writer.startElement("span", null);
  214.         writer.writeAttribute("class", HTML.BUTTON_TEXT_CLASS, null);
  215.         writer.writeText(label, "value");
  216.         writer.endElement("span");
  217.  
  218.         writer.endElement("button");
  219.     }
  220.  
  221.     /**
  222.      * Return null if no file is submitted in simple mode
  223.      *
  224.      * @param context
  225.      * @param component
  226.      * @param submittedValue
  227.      * @return
  228.      * @throws ConverterException
  229.      */
  230.     @Override
  231.     public Object getConvertedValue(FacesContext context, UIComponent component, Object submittedValue) throws ConverterException {
  232.         FileUpload fileUpload = (FileUpload) component;
  233.        
  234.         if(fileUpload.getMode().equals("simple") && submittedValue != null && submittedValue.equals("")) {
  235.             return null;
  236.         }
  237.         else {
  238.             return submittedValue;
  239.         }
  240.     }
  241. }
Advertisement
Add Comment
Please, Sign In to add comment