Package org.projectforge.export

Source Code of org.projectforge.export.ExportZipArchive

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.export;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Collection;
import java.util.LinkedList;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.IOUtils;
import org.apache.wicket.util.resource.AbstractResourceStreamWriter;
import org.apache.wicket.util.resource.IResourceStream;
import org.projectforge.excel.ExportWorkbook;

/**
* For exporting multiple objects by one script you may collect all objects within this zip archive.
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class ExportZipArchive
{
  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ExportZipArchive.class);

  private final Collection<ExportZipFile> zipFiles = new LinkedList<ExportZipFile>();

  private final String filename;

  public ExportZipArchive()
  {
    this.filename = "archive";
  }

  /**
   * @param filename The filename of the zip archive (without extension), default is "archive".
   */
  public ExportZipArchive(final String filename)
  {
    this.filename = filename;
  }

  public void write(final OutputStream out)
  {
    final ZipOutputStream zipOut = new ZipOutputStream(out);
    try {
      zipOut.putNextEntry(new ZipEntry(filename + "/"));
      for (final ExportZipFile file : zipFiles) {
        final ZipEntry zipEntry = new ZipEntry(filename + "/" + file.getFilename());
        zipOut.putNextEntry(zipEntry);
        if (file.getExportObject() instanceof ExportWorkbook) {
          final ExportWorkbook workbook = (ExportWorkbook) file.getExportObject();
          final byte[] xls = workbook.getAsByteArray();
          if (xls == null || xls.length == 0) {
            log.error("Oups, xls has zero size. Filename: " + filename);
            continue;
          }
          zipOut.write(xls);
        } else if (file.getExportObject() instanceof ExportJFreeChart) {
          final ExportJFreeChart exportJFreeChart = (ExportJFreeChart) file.getExportObject();
          exportJFreeChart.write(zipOut);
        }
        zipOut.closeEntry();
      }
    } catch (final IOException ex) {
      log.error(ex.getMessage(), ex);
      throw new RuntimeException(ex);
    } finally {
      IOUtils.closeQuietly(zipOut);
    }
  }

  public IResourceStream createResourceStreamWriter()
  {
    final IResourceStream iResourceStream = new AbstractResourceStreamWriter() {
      private static final long serialVersionUID = 7780552906708508709L;

      @Override
      public String getContentType()
      {
        return "application/zip";
      }

      @Override
      public void write(final OutputStream output)
      {
        ExportZipArchive.this.write(output);
      }
    };
    return iResourceStream;
  }

  public ExportZipArchive add(final String filename, final ExportWorkbook exportWorkbook)
  {
    zipFiles.add(new ExportZipFile(filename, exportWorkbook));
    return this;
  }

  public ExportZipArchive add(final ExportWorkbook exportWorkbook)
  {
    zipFiles.add(new ExportZipFile(exportWorkbook.getFilename(), exportWorkbook));
    return this;
  }

  public ExportZipArchive add(final String filename, final ExportJFreeChart exportJFreeChart)
  {
    zipFiles.add(new ExportZipFile(filename, exportJFreeChart));
    return this;
  }

  /**
   * @return the filename
   */
  public String getFilename()
  {
    return filename;
  }

  public Collection<ExportZipFile> getFiles()
  {
    return zipFiles;
  }
}
TOP

Related Classes of org.projectforge.export.ExportZipArchive

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.