package org.jboss.seam.excel.ui; import java.io.IOException; import java.util.List; import javax.faces.component.UIComponent; import javax.faces.component.ValueHolder; import javax.faces.context.FacesContext; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.core.Manager; import org.jboss.seam.document.ByteArrayDocumentData; import org.jboss.seam.document.DocumentData; import org.jboss.seam.document.DocumentStore; import org.jboss.seam.document.DocumentData.DocumentType; import org.jboss.seam.excel.ExcelFactory; import org.jboss.seam.excel.ExcelWorkbook; import org.jboss.seam.navigation.Pages; public class UIWorkbook extends ExcelComponent { public enum CreationType { WITHOUT_SETTINGS_OR_TEMPLATE, WITHOUT_SETTINGS_WITH_TEMPLATE, WITH_SETTINGS_WITHOUT_TEMPLATE, WITH_SETTNGS_AND_TEMPLATE } public static final String COMPONENT_TYPE = "org.jboss.seam.excel.ui.UIWorkbook"; private boolean sendRedirect = true; private ExcelWorkbook excelWorkbook = null; private String type = ""; private String templateURI; private Integer arrayGrowSize; private Boolean autoFilterDisabled; private Boolean cellValidationDisabled; private Integer characterSet; private Boolean drawingsDisabled; private String encoding; private String excelDisplayLanguage; private String excelRegionalSettings; private Boolean formulaAdjust; private Boolean gcDisabled; private Boolean ignoreBlanks; private Integer initialFileSize; private String locale; private Boolean mergedCellCheckingDisabled; private Boolean namesDisabled; private Boolean propertySets; private Boolean rationalization; private Boolean supressWarnings; private String temporaryFileDuringWriteDirectory; private Boolean useTemporaryFileDuringWrite; private Boolean workbookProtected; private String exportKey; private String filename; public String getFilename() { return (String) valueOf("filename", filename); } public void setFilename(String filename) { this.filename = filename; } public String getExportKey() { return (String) valueOf("exportKey", exportKey); } public void setExportKey(String exportKey) { this.exportKey = exportKey; } public CreationType getCreationType() { if (hasSettings()) { if (getTemplateURI() != null) { return CreationType.WITH_SETTNGS_AND_TEMPLATE; } else { return CreationType.WITH_SETTINGS_WITHOUT_TEMPLATE; } } else { if (getTemplateURI() != null) { return CreationType.WITHOUT_SETTINGS_WITH_TEMPLATE; } else { return CreationType.WITHOUT_SETTINGS_OR_TEMPLATE; } } } public Integer getArrayGrowSize() { return (Integer) valueOf("arrayGrowSize", arrayGrowSize); } public void setArrayGrowSize(Integer arrayGrowSize) { this.arrayGrowSize = arrayGrowSize; } public Boolean getAutoFilterDisabled() { return (Boolean) valueOf("autoFilterDisabled", autoFilterDisabled); } public void setAutoFilterDisabled(Boolean autoFilterDisabled) { this.autoFilterDisabled = autoFilterDisabled; } public Boolean getCellValidationDisabled() { return (Boolean) valueOf("cellValidationDisabled", cellValidationDisabled); } public void setCellValidationDisabled(Boolean cellValidationDisabled) { this.cellValidationDisabled = cellValidationDisabled; } public Integer getCharacterSet() { return (Integer) valueOf("characterSet", characterSet); } public void setCharacterSet(Integer characterSet) { this.characterSet = characterSet; } public Boolean getDrawingsDisabled() { return (Boolean) valueOf("drawingsDisabled", drawingsDisabled); } public void setDrawingsDisabled(Boolean drawingsDisabled) { this.drawingsDisabled = drawingsDisabled; } public String getEncoding() { return (String) valueOf("encoding", encoding); } public void setEncoding(String encoding) { this.encoding = encoding; } public String getExcelDisplayLanguage() { return (String) valueOf("excelDisplayLanguage", excelDisplayLanguage); } public void setExcelDisplayLanguage(String excelDisplayLanguage) { this.excelDisplayLanguage = excelDisplayLanguage; } public String getExcelRegionalSettings() { return (String) valueOf("excelRegionalSettings", excelRegionalSettings); } public void setExcelRegionalSettings(String excelRegionalSettings) { this.excelRegionalSettings = excelRegionalSettings; } public Boolean getFormulaAdjust() { return (Boolean) valueOf("formulaAdjust", formulaAdjust); } public void setFormulaAdjust(Boolean formulaAdjust) { this.formulaAdjust = formulaAdjust; } public Boolean getGcDisabled() { return (Boolean) valueOf("gcDisabled", gcDisabled); } public void setGcDisabled(Boolean gcDisabled) { this.gcDisabled = gcDisabled; } public Boolean getIgnoreBlanks() { return (Boolean) valueOf("ignoreBlanks", ignoreBlanks); } public void setIgnoreBlanks(Boolean ignoreBlanks) { this.ignoreBlanks = ignoreBlanks; } public Integer getInitialFileSize() { return (Integer) valueOf("initialFileSize", initialFileSize); } public void setInitialFileSize(Integer initialFileSize) { this.initialFileSize = initialFileSize; } public String getLocale() { return (String) valueOf("locale", locale); } public void setLocale(String locale) { this.locale = locale; } public Boolean getMergedCellCheckingDisabled() { return (Boolean) valueOf("mergedCellCheckingDisabled", mergedCellCheckingDisabled); } public void setMergedCellCheckingDisabled(Boolean mergedCellCheckingDisabled) { this.mergedCellCheckingDisabled = mergedCellCheckingDisabled; } public Boolean getNamesDisabled() { return (Boolean) valueOf("namesDisabled", namesDisabled); } public void setNamesDisabled(Boolean namesDisabled) { this.namesDisabled = namesDisabled; } public Boolean getPropertySets() { return (Boolean) valueOf("propertySets", propertySets); } public void setPropertySets(Boolean propertySets) { this.propertySets = propertySets; } public Boolean getRationalization() { return (Boolean) valueOf("rationalization", rationalization); } public void setRationalization(Boolean rationalization) { this.rationalization = rationalization; } public Boolean getSupressWarnings() { return (Boolean) valueOf("supressWarnings", supressWarnings); } public void setSupressWarnings(Boolean supressWarnings) { this.supressWarnings = supressWarnings; } public String getTemporaryFileDuringWriteDirectory() { return (String) valueOf("temporaryFileDuringWriteDirectory", temporaryFileDuringWriteDirectory); } public void setTemporaryFileDuringWriteDirectory(String temporaryFileDuringWriteDirectory) { this.temporaryFileDuringWriteDirectory = temporaryFileDuringWriteDirectory; } public Boolean getUseTemporaryFileDuringWrite() { return (Boolean) valueOf("useTemporaryFileDuringWrite", useTemporaryFileDuringWrite); } public void setUseTemporaryFileDuringWrite(Boolean useTemporaryFileDuringWrite) { this.useTemporaryFileDuringWrite = useTemporaryFileDuringWrite; } @SuppressWarnings("unchecked") @Override public void encodeBegin(javax.faces.context.FacesContext facesContext) throws IOException { // Get workbook implementation excelWorkbook = ExcelFactory.instance().getExcelWorkbook(getType()); // Create a new workbook excelWorkbook.createWorkbook(this); List<UILink> stylesheets = getChildrenOfType(getChildren(), UILink.class); excelWorkbook.setStylesheets(stylesheets); } @Override public void encodeEnd(FacesContext context) throws IOException { // Get the bytes from workbook that should be passed on to the user byte[] bytes = excelWorkbook.getBytes(); DocumentType type = excelWorkbook.getDocumentType(); String viewId = Pages.getViewId(context); String baseName = Pages.getCurrentBaseName(); DocumentData documentData = new ByteArrayDocumentData(baseName, type, bytes); documentData.setFilename(getFilename()); if (getExportKey() != null) { Contexts.getEventContext().set(getExportKey(), documentData); return; } if (sendRedirect) { DocumentStore store = DocumentStore.instance(); String id = store.newId(); String url = store.preferredUrlForContent(baseName, type.getExtension(), id); url = Manager.instance().encodeConversationId(url, viewId); store.saveData(id, documentData); context.getExternalContext().redirect(url); } else { UIComponent parent = getParent(); if (parent instanceof ValueHolder) { ValueHolder holder = (ValueHolder) parent; holder.setValue(documentData); } } } public boolean isSendRedirect() { return (Boolean) valueOf("sendRedirect", sendRedirect); } public void setSendRedirect(boolean sendRedirect) { this.sendRedirect = sendRedirect; } @Override public String getFamily() { return COMPONENT_TYPE; } public String getType() { return (String) valueOf("type", type); } public void setType(String type) { this.type = type; } public ExcelWorkbook getExcelWorkbook() { return excelWorkbook; } public void setExcelWorkbook(ExcelWorkbook excelWorkbook) { this.excelWorkbook = excelWorkbook; } public String getTemplateURI() { return (String) valueOf("templateURI", templateURI); } public void setTemplateURI(String templateURI) { this.templateURI = templateURI; } /** * Hack? Noooooooooooooooo */ public boolean hasSettings() { return getArrayGrowSize() != null || getAutoFilterDisabled() != null || getCellValidationDisabled() != null || getCharacterSet() != null || getDrawingsDisabled() != null || getEncoding() != null || getExcelDisplayLanguage() != null || getExcelRegionalSettings() != null || getFormulaAdjust() != null || getGcDisabled() != null || getIgnoreBlanks() != null || getInitialFileSize() != null || getLocale() != null || getMergedCellCheckingDisabled() != null || getNamesDisabled() != null || getPropertySets() != null || getRationalization() != null || getSupressWarnings() != null || getTemporaryFileDuringWriteDirectory() != null || getUseTemporaryFileDuringWrite() != null; } public Boolean getWorkbookProtected() { return (Boolean) valueOf("workbookProtected", workbookProtected); } public void setWorkbookProtected(Boolean workbookProtected) { this.workbookProtected = workbookProtected; } }