Package org.openfaces.renderkit.input

Source Code of org.openfaces.renderkit.input.SingleFileUploadRenderer

/*
* OpenFaces - JSF Component Library 2.0
* Copyright (C) 2007-2012, TeamDev Ltd.
* licensing@openfaces.org
* Unless agreed in writing the contents of this file are subject to
* the GNU Lesser General Public License Version 2.1 (the "LGPL" License).
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Please visit http://openfaces.org/licensing/ for more details.
*/
package org.openfaces.renderkit.input;

import org.openfaces.component.Position;
import org.openfaces.component.input.AbstractFileUpload;
import org.openfaces.component.input.SingleFileUpload;
import org.openfaces.component.input.SingleFileUploadBtnBehavior;
import org.openfaces.component.input.SingleFileUploadLayoutMode;
import org.openfaces.component.output.ProgressBar;
import org.openfaces.util.Rendering;
import org.openfaces.util.Resources;
import org.openfaces.util.Script;
import org.openfaces.util.ScriptBuilder;
import org.openfaces.util.StyleGroup;
import org.openfaces.util.Styles;

import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

public final class SingleFileUploadRenderer extends AbstractFileUploadRenderer {
    private static final String DIV_FOR_FILE_INFO_ID = "::fileInfo";
    private static final String ACTION_BUTTON_CONTAINER_ID = "::actionButtonContainer";
    private static final String DEFAULT_STOP_URL = "input/fileUpload-stop.png";
    private static final String STOP_ICO_STYLE_MIN = "o_s_file_clear_icon_min";
    private static final String STOP_ICO_STYLE_FULL = "o_s_file_clear_icon_full";
    private static final String DEFAULT_UPLOADED_MIN_URL = "output/uploadedProgressBarMin.png";
    private SingleFileUploadLayoutMode layoutMode;

    @Override
    protected void writeStructure(FacesContext context, AbstractFileUpload abstractFileUpload, ResponseWriter writer, String clientId) throws IOException {
        SingleFileUpload fileUpload = (SingleFileUpload) abstractFileUpload;
        layoutMode = fileUpload.getLayoutMode();
        setLayoutSettings(fileUpload, layoutMode);
        boolean showInPopup = fileUpload.getShowInPopup();
        boolean hasExternalBrowseButton = fileUpload.getExternalBrowseButton() != null;

        String defaultStyleClass = (layoutMode == SingleFileUploadLayoutMode.FULL ? "o_s_file_upload" : "o_s_file_upload_compact")
                + (showInPopup ? " o_file_upload_popup" : "");
        Rendering.writeStyleAndClassAttributes(writer, fileUpload.getStyle(), fileUpload.getStyleClass(),
                defaultStyleClass);

        writer.startElement("table", fileUpload);
        writer.writeAttribute("style", "width:100%", null);

        writer.startElement("tr", fileUpload);

        if (!showInPopup && !hasExternalBrowseButton) {
            writer.startElement("td", fileUpload);
            writer.writeAttribute("id", clientId + ACTION_BUTTON_CONTAINER_ID, null);
            writeBrowseButton(context, writer, clientId, fileUpload);
            writer.endElement("td");
        }
        writer.startElement("td", fileUpload);
        writer.writeAttribute("style", "width:100%", null);
        writeFileInfo(context, fileUpload, writer, clientId + DIV_FOR_FILE_INFO_ID);
        writer.endElement("td");
        if (showInPopup || hasExternalBrowseButton) {
            writer.startElement("td", fileUpload);
            writer.writeAttribute("id", clientId + ACTION_BUTTON_CONTAINER_ID, null);
            writer.endElement("td");
        }
        writer.endElement("tr");

        writer.startElement("tr", fileUpload);
        writer.startElement("td", fileUpload);
        if (layoutMode == SingleFileUploadLayoutMode.FULL) {
            writer.writeAttribute("colspan", 2, null);
        }
        writeProgressArea(context, fileUpload, writer);
        writer.endElement("td");
        writer.endElement("tr");

        writer.endElement("table");
        // Ignore for popup without external drop target
        if (!showInPopup || abstractFileUpload.getExternalDropTarget() != null)
            writeDragAndDrop(context, abstractFileUpload, writer, clientId, fileUpload);

        if (showInPopup || hasExternalBrowseButton) {
            writer.startElement("div", fileUpload);
            writer.writeAttribute("style", "display:none", null);
            writeBrowseButton(context, writer, clientId, fileUpload);
            writer.endElement("div");
        }
        writeHelpfulElements(context, fileUpload, writer, clientId + HELP_ELEMENTS_ID);

    }

    private void setLayoutSettings(SingleFileUpload fileUpload, SingleFileUploadLayoutMode mode) {
        if (fileUpload.getShowInfoAfterUpload() == null) {
            if (mode == SingleFileUploadLayoutMode.FULL) {
                fileUpload.setShowInfoAfterUpload(true);
            } else {
                fileUpload.setShowInfoAfterUpload(false);
            }
        }
        if (fileUpload.getBrowseButtonDuringUpload() == null) {
            if (mode == SingleFileUploadLayoutMode.FULL) {
                fileUpload.setBrowseButtonDuringUpload(SingleFileUploadBtnBehavior.SHOW_STOP);
            } else {
                fileUpload.setBrowseButtonDuringUpload(SingleFileUploadBtnBehavior.HIDE);
            }
        }
        if (fileUpload.getStopButtonNearProgress() == null) {
            if (mode == SingleFileUploadLayoutMode.FULL) {
                fileUpload.setStopButtonNearProgress(false);
            } else {
                fileUpload.setStopButtonNearProgress(true);
            }
        }
    }

    private void writeBrowseButton(FacesContext context, ResponseWriter writer, String clientId, SingleFileUpload fileUpload) throws IOException {
        String browseBtnText = fileUpload.getBrowseButtonText();
        if (browseBtnText == null) {
            browseBtnText = "Upload...";
        }
        writeBrowseButtonTable(context, fileUpload, writer, clientId + BROWSE_BTN_ID, browseBtnText);
    }

    private void writeDragAndDrop(FacesContext context, AbstractFileUpload abstractFileUpload, ResponseWriter writer, String clientId, SingleFileUpload fileUpload) throws IOException {
        String dropTargetText = fileUpload.getDropTargetText();
        if (dropTargetText == null) {
            switch (layoutMode) {
                case COMPACT:
                    dropTargetText = "Drop file";
                    break;
                case FULL:
                    dropTargetText = "Drop file here";
                    break;
            }
        }
        writeDragAndDropArea(context, abstractFileUpload, writer, clientId + DRAG_AREA,
                (fileUpload.getExternalDropTarget() == null)
                        ? ((layoutMode == SingleFileUploadLayoutMode.FULL) ? "o_s_file_drop_target_full" : "o_s_file_drop_target_min")
                        : "o_s_file_ext_drop_target",
                dropTargetText);
    }

    private void writeProgressArea(FacesContext context, AbstractFileUpload fileUpload, ResponseWriter writer) throws IOException {
        String progressBarClass = Styles.getCSSClass(context, fileUpload, fileUpload.getProgressBarStyle(), StyleGroup.regularStyleGroup(), fileUpload.getProgressBarClass(), null);
        writer.writeAttribute("class", progressBarClass, null);
        writeProgressBar(context, fileUpload);
    }

    private void writeFileInfo(FacesContext context, SingleFileUpload fileUpload, ResponseWriter writer, String clientId) throws IOException {
        String fileInfoClass = Styles.getCSSClass(context, fileUpload, fileUpload.getFileInfoAreaStyle(), StyleGroup.regularStyleGroup(), fileUpload.getFileInfoAreaClass(), "o_file_upload_info");
        String infoTitleClass = Styles.getCSSClass(context, fileUpload, fileUpload.getFileNameStyle(), StyleGroup.regularStyleGroup(), fileUpload.getFileNameClass(), "o_s_file_upload_info_title");
        String infoStatusClass = Styles.getCSSClass(context, fileUpload, fileUpload.getStatusStyle(), StyleGroup.regularStyleGroup(), fileUpload.getStatusClass(), "o_s_file_upload_info_status");

        writer.startElement("table", fileUpload);
        writer.writeAttribute("id", clientId, null);
        writer.writeAttribute("class", fileInfoClass, null);
        writer.startElement("tr", fileUpload);

        writer.startElement("td", fileUpload);
        writer.startElement("div", fileUpload);
        writer.writeAttribute("class", infoTitleClass, null);
        writer.endElement("div");
        writer.endElement("td");

        writer.startElement("td", fileUpload);
        writer.writeAttribute("class", infoStatusClass, null);
        writer.endElement("td");

        writer.endElement("tr");

        writer.endElement("table");
    }

    @Override
    protected void writeProgressBar(FacesContext context, AbstractFileUpload fileUpload) throws IOException {
        if (progressBar == null) {
            progressBar = new ProgressBar();
            progressBar.setDefaultProgressImgUrl(DEFAULT_UPLOADED_MIN_URL);
        }
        progressBar.setStyleClass(Styles.getCSSClass(context, progressBar, progressBar.getStyle(), StyleGroup.regularStyleGroup(), progressBar.getStyleClass(), getProgressBarStyle(((SingleFileUpload) fileUpload))));
        progressBar.setLabelClass(Styles.getCSSClass(context, progressBar, progressBar.getLabelStyle(), StyleGroup.regularStyleGroup(), progressBar.getLabelClass(), "o_s_file_upload_progress_label"));
        progressBar.encodeAll(context);
    }

    private String getProgressBarStyle(SingleFileUpload fileUpload) {
        switch (layoutMode) {
            case COMPACT:
                if (fileUpload.getBrowseButtonDuringUpload() == SingleFileUploadBtnBehavior.HIDE && !fileUpload.getShowInPopup()) {
                    return "o_s_fileup_pro_bar_min";
                } else {
                    return "o_s_fileup_pro_bar_compact";
                }
            case FULL:
                return "o_s_fileup_pro_bar";
        }
        return null;
    }

    @Override
    protected void encodeScriptAndStyles(FacesContext context, AbstractFileUpload abstractFileUpload, String clientId, String uniqueId) throws IOException {
        SingleFileUpload fileUpload = (SingleFileUpload) abstractFileUpload;
        String addButtonClass = Styles.getCSSClass(context, fileUpload, fileUpload.getBrowseButtonStyle(), StyleGroup.regularStyleGroup(), fileUpload.getBrowseButtonClass(), null);
        String addButtonOnMouseOverClass = Styles.getCSSClass(context, fileUpload, fileUpload.getBrowseButtonRolloverStyle(), StyleGroup.regularStyleGroup(), fileUpload.getBrowseButtonRolloverClass(), null);
        String addButtonOnMouseDownClass = Styles.getCSSClass(context, fileUpload, fileUpload.getBrowseButtonPressedStyle(), StyleGroup.regularStyleGroup(), fileUpload.getBrowseButtonPressedClass(), null);
        String addButtonOnFocusClass = Styles.getCSSClass(context, fileUpload, fileUpload.getBrowseButtonFocusedStyle(), StyleGroup.regularStyleGroup(), fileUpload.getBrowseButtonFocusedClass(), null);
        String addButtonDisabledClass = Styles.getCSSClass(context, fileUpload, fileUpload.getBrowseButtonDisabledStyle(), StyleGroup.regularStyleGroup(), fileUpload.getBrowseButtonDisabledClass(), "o_file_upload_addBtn_dis");
        String dropTargetDragoverClass = Styles.getCSSClass(context, fileUpload, fileUpload.getDropTargetDragoverStyle(), StyleGroup.regularStyleGroup(), fileUpload.getDropTargetDragoverClass(), "o_file_drop_target_dragover");
        Styles.renderStyleClasses(context, fileUpload);

        int uploadedSize = 0;
        boolean duplicateAllowed = true;//fileUpload.isDuplicateAllowed();

        Position popupPosition = fileUpload.getPosition();

        List<String> listOfImages = new LinkedList<String>();
        String defStopUrl = null;
        if (fileUpload.getStopButtonNearProgress()) {
            if (stopButton == null) {
                defStopUrl = Resources.getURL(context, null, null, DEFAULT_STOP_URL);
                listOfImages.add(defStopUrl);
                Rendering.renderPreloadImagesScript(context, listOfImages, false);
            }
        }
        Script initScript = new ScriptBuilder().initScript(context, fileUpload, "O$.SingleFileUpload._init",
                uploadedSize,
                fileUpload.getNotUploadedStatusText(),
                fileUpload.getInProgressStatusText(),
                fileUpload.getUploadedStatusText(),
                fileUpload.getFileSizeLimitErrorText(),
                fileUpload.getUnexpectedErrorText(),
                fileUpload.getAcceptedFileTypes(),
                duplicateAllowed,
                clientId + BROWSE_BTN_ID,
                addButtonClass,
                addButtonOnMouseOverClass,
                addButtonOnMouseDownClass,
                addButtonOnFocusClass,
                addButtonDisabledClass,
                fileUpload.isDisabled(),
                fileUpload.getTabindex(),
                progressBar.getClientId(context),
                fileUpload.getStoppedStatusText(),
                fileUpload.getStoppingStatusText(),
                uniqueId,
                Utilities.getFunctionOfEvent(fileUpload.getOnchange()),
                Utilities.getFunctionOfEvent(fileUpload.getOnstart()),
                Utilities.getFunctionOfEvent(fileUpload.getOnend()),
                Utilities.getFunctionOfEvent(fileUpload.getOnfilestart()),
                Utilities.getFunctionOfEvent(fileUpload.getOnfileinprogress()),
                Utilities.getFunctionOfEvent(fileUpload.getOnfileend()),
                Utilities.getFunctionOfEvent(fileUpload.getOnwrongfiletype()),
                Utilities.getFunctionOfEvent(fileUpload.getOndirectorydropped()),
                dropTargetDragoverClass,
                getRender(context, fileUpload),
                getExternalDropTargetId(context, fileUpload),
                fileUpload.getAcceptedMimeTypes(),
                fileUpload.getLayoutMode(),
                defStopUrl,
                getIconStyle(fileUpload, layoutMode),
                fileUpload.getShowInfoAfterUpload(),
                fileUpload.getBrowseButtonDuringUpload(),
                fileUpload.getStopButtonNearProgress(),
                fileUpload.getDirectoryDroppedText(),
                fileUpload.getWrongFileTypeText(),
                getExternalButtonId(context, fileUpload),
                fileUpload.getShowInPopup(),
                getPositionedBy(context, fileUpload),
                popupPosition.getHorizontalAlignment(),
                popupPosition.getVerticalAlignment(),
                popupPosition.getHorizontalDistance(),
                popupPosition.getVerticalDistance()
        );

        Rendering.renderInitScript(context, initScript,
                Resources.utilJsURL(context),
                Resources.jsonJsURL(context),
                Resources.internalURL(context, "input/singleFileUpload.js"),
                Resources.internalURL(context, "input/fileUploadUtil.js")
        );
    }

    @Override
    protected void writeHelpfulButtons(FacesContext context, AbstractFileUpload abstractFileUpload, ResponseWriter
            writer, String elementId) throws IOException {
        SingleFileUpload fileUpload = (SingleFileUpload) abstractFileUpload;
        if (fileUpload.getStopButtonNearProgress() && fileUpload.getBrowseButtonDuringUpload() != SingleFileUploadBtnBehavior.SHOW_STOP) {
            facetRenderer.writeDivByDefault(stopButton, elementId + STOP_BTN_CONTAINER, "", getIconStyle(fileUpload, layoutMode));
        } else {
            String stopButtonClass = (fileUpload.getShowInPopup() || fileUpload.getExternalBrowseButton() != null )
                    ? "o_s_close_popup_btn" : "o_s_file_clear_btn";
            facetRenderer.writeButtonByDefault(stopButton, elementId + STOP_BTN_CONTAINER, abstractFileUpload.getStopButtonText(), stopButtonClass);
        }
        if (abstractFileUpload.getShowInPopup())
            facetRenderer.writeButtonByDefault(closeButton, elementId + CLOSE_BTN_CONTAINER, fileUpload.getCloseButtonText(), "o_s_close_popup_btn");
    }

    private String getIconStyle(SingleFileUpload fileUpload, SingleFileUploadLayoutMode layoutMode) {
        return (layoutMode == SingleFileUploadLayoutMode.FULL) ? STOP_ICO_STYLE_FULL
                : (fileUpload.getBrowseButtonDuringUpload() == SingleFileUploadBtnBehavior.HIDE && !fileUpload.getShowInPopup()
                ? STOP_ICO_STYLE_MIN : STOP_ICO_STYLE_FULL);
    }
}
TOP

Related Classes of org.openfaces.renderkit.input.SingleFileUploadRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.