Package net.sf.jasperreports.engine.fill

Source Code of net.sf.jasperreports.engine.fill.JRGzipVirtualizer

/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2005 - 2009 Works, Inc. All rights reserved.
* http://www.works.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see <http://www.gnu.org/licenses/>.
*/

/*
* Licensed to Jaspersoft Corporation under a Contributer Agreement
*/
package net.sf.jasperreports.engine.fill;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JRVirtualizable;

/**
* GZips the pages that it doesn't need, but keeps them in memory.
*
* @author John Bindel
* @version $Id: JRGzipVirtualizer.java 3716 2010-04-08 19:57:14Z teodord $
*/
public class JRGzipVirtualizer extends JRAbstractLRUVirtualizer
{
  private final Map zippedData;

  /**
   * @param maxSize
   *            the maximum size (in JRVirtualizable objects) of the paged in
   *            cache.
   */
  public JRGzipVirtualizer(int maxSize) {
    super(maxSize);
    this.zippedData = Collections.synchronizedMap(new HashMap());
  }

  protected void dispose(String virtualId) {
    zippedData.remove(virtualId);
  }

  protected void pageOut(JRVirtualizable o) throws IOException {
    if (!zippedData.containsKey(o.getUID())) {
      GZIPOutputStream gos = null;
      try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream(3000);
        gos = new GZIPOutputStream(baos);
        writeData(o, gos);
        gos.finish();
        gos.flush();

        byte[] data = baos.toByteArray();
        zippedData.put(o.getUID(), data);
      }
      finally {
        if (gos != null) {
          gos.close();
        }
      }
    }
    else {
      if (!isReadOnly(o)) {
        throw new IllegalStateException(
            "Cannot virtualize data because the data for object UID \"" + o.getUID()
            + "\" already exists.");
      }
    }
  }

  protected void pageIn(JRVirtualizable o) throws IOException {
    GZIPInputStream gis = null;
    try {
      byte[] data = (byte[]) zippedData.get(o.getUID());
      if (data == null) {
        throw new JRRuntimeException("No data found for object with UID " + o.getUID());
      }
      ByteArrayInputStream bais = new ByteArrayInputStream(data);
      gis = new GZIPInputStream(bais);
      readData(o, gis);
    }
    finally {
      if (gis != null) {
        gis.close();
      }
    }

    if (!isReadOnly(o)) {
      // Wait until we know it worked before tossing the data.
      zippedData.remove(o.getUID());
    }
  }

  public void cleanup()
  {
    zippedData.clear();
    reset();
  }
}
TOP

Related Classes of net.sf.jasperreports.engine.fill.JRGzipVirtualizer

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.