Package org.zkoss.zss.app.file

Source Code of org.zkoss.zss.app.file.ExportToHtmlWindowCtrl

/* ExportToHtmlWindowCtrl.java

{{IS_NOTE
  Purpose:
   
  Description:
   
  History:
    March 05, 2011 3:20:39 PM , Created by Peter
}}IS_NOTE

Copyright (C) 2009 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.zss.app.file;

import static org.zkoss.zss.app.base.Preconditions.checkNotNull;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import org.zkoss.poi.openxml4j.exceptions.InvalidFormatException;
import org.zkoss.poi.ss.usermodel.PrintSetup;
import org.zkoss.poi.ss.usermodel.Sheet;
import org.zkoss.poi.ss.util.AreaReference;
import org.zkoss.util.media.AMedia;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.ForwardEvent;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zss.app.zul.Dialog;
import org.zkoss.zss.app.zul.Zssapps;
import org.zkoss.zss.model.Book;
import org.zkoss.zss.model.Exporter;
import org.zkoss.zss.model.Exporters;
import org.zkoss.zss.model.impl.Headings;
import org.zkoss.zss.ui.Rect;
import org.zkoss.zss.ui.Spreadsheet;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Window;

/**
* @author Peter
*
*/
public class ExportToHtmlWindowCtrl extends GenericForwardComposer {
 
  private Dialog _exportToHtmlDialog;
  /**
   * The range to export. All sheets, current sheet or selection range
   * <p> Default: Selected sheet
   */
  Radiogroup range;
  Radio currSelection;
  Radio currSheet;
  Radio allSheet;
 
  /**
   * The document's orientation. Landscape or Portrait
   */
  Radiogroup orientation;
 
  /**
   * Indicate whether include header or not
   * <p> Default: Include header
   */
  Checkbox noHeader;
 
  /**
   * Indicate whether include gridlines or not.
   */
  Checkbox noGridlines;
 
  Button export;
   
  Rect selection;
  Spreadsheet ss;
 
  public void onOpen$_exportToHtmlDialog(ForwardEvent event) {
    loadPrintSetting();
   
    selection = (Rect) event.getOrigin().getData();
    currSelection.setDisabled(selection == null);
   
    noHeader.setChecked(false);
    _exportToHtmlDialog.setMode(Window.MODAL);
  }
 
  @Override
  public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
    //TODO: use event, don't send arg
    ss = checkNotNull(Zssapps.getSpreadsheetFromArg(), "Spreadsheet is null");
  }
 
  private void loadPrintSetting() {
    noGridlines.setChecked(!ss.getSelectedSheet().isPrintGridlines());
    range.setSelectedItem(currSheet);
  }
 
 
  /**
   * Apply the print setting to each page
   */
  private void applyPrintSetting() {
    //TODO: move to sheet context
    ss.getSelectedSheet().setPrintGridlines(includeGridlines());
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    int numSheet = book.getNumberOfSheets();
    for (int i = 0; i < numSheet; i++) {
      Sheet sheet = ss.getSheet(i);
      PrintSetup setup = sheet.getPrintSetup();
    }
  }
 
  private void revertPrintSetting() {
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    int numSheet = book.getNumberOfSheets();
    for (int i = 0; i < numSheet; i++) {
      Sheet sheet = ss.getSheet(i);
      PrintSetup setup = sheet.getPrintSetup();
    }
  }

  public void onClick$export()
    throws InvalidFormatException, IOException, InterruptedException {
   
    applyPrintSetting();
   
    Exporter c = Exporters.getExporter("html");
    if (c instanceof Headings) {
      ((Headings)c).enableHeadings(includeHeadings());
    }
   
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    export(c, baos);
   
    //test
//    System.out.println(baos.toString());
   
    final AMedia amedia = new AMedia("generatedReport.html", "html", "text/html", baos.toByteArray());

    Filedownload.save(amedia);
   
    revertPrintSetting();

    _exportToHtmlDialog.fireOnClose(null);
  }
 
  //test only
//  public void onClick$test(){
//    Sheet sheet = ss.getBook().getSheetAt(0);
//    String expr="=A1";
//    Ranges.range((Worksheet) sheet,3,3).setValue(expr);
//  }
 
  private void export(Exporter exporter, OutputStream outputStream) {
    final Book book = ss.getBook();
    if (book == null) {
      return;
    }
    Radio seld = range.getSelectedItem();
    if (seld == allSheet) {
      exporter.export(book, outputStream);
    } else if (seld == currSelection){
      Rect rect = ss.getSelection();
      String area = ss.getColumntitle(rect.getLeft()) + ss.getRowtitle(rect.getTop()) + ":" +
        ss.getColumntitle(rect.getRight()) + ss.getRowtitle(rect.getBottom());
      exporter.exportSelection(ss.getSelectedSheet(), new AreaReference(area), outputStream);
    } else {
      exporter.export(ss.getSelectedSheet(), outputStream);
    }
  }
 
  private boolean includeHeadings () {
    return !noHeader.isChecked();
  }
 
  private boolean includeGridlines(){
    return !noGridlines.isChecked();
  }
}
TOP

Related Classes of org.zkoss.zss.app.file.ExportToHtmlWindowCtrl

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.