net.sf.jasperreports.swing.JRViewerController.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.jasperreports.swing.JRViewerController.java

Source

/*
 * JasperReports - Free Java Reporting Library.
 * Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
 * http://www.jaspersoft.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/>.
 */
package net.sf.jasperreports.swing;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import net.sf.jasperreports.engine.DefaultJasperReportsContext;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReportsContext;
import net.sf.jasperreports.engine.PrintPageFormat;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRPrintXmlLoader;
import net.sf.jasperreports.renderers.RenderersCache;

/**
 * @author Teodor Danciu (teodord@users.sourceforge.net)
 */
public class JRViewerController {
    private static final Log log = LogFactory.getLog(JRViewerController.class);

    protected static final int TYPE_FILE_NAME = 1;
    protected static final int TYPE_INPUT_STREAM = 2;
    protected static final int TYPE_OBJECT = 3;

    private JasperReportsContext jasperReportsContext;
    /**
     * @deprecated To be removed.
     */
    private net.sf.jasperreports.engine.util.LocalJasperReportsContext localJasperReportsContext;
    private ResourceBundle resourceBundle;
    private Locale locale;
    private final List<JRViewerListener> listeners = new ArrayList<JRViewerListener>();

    protected int type = TYPE_FILE_NAME;
    protected boolean isXML;
    protected String reportFileName;
    protected boolean reloadSupported;

    protected JasperPrint jasperPrint;
    protected RenderersCache renderersCache;
    private int pageIndex;
    private float zoom;
    private boolean fitPage;
    private boolean fitWidth;

    /**
     * @see #JRViewerController(JasperReportsContext, Locale, ResourceBundle)
     */
    public JRViewerController(Locale locale, ResourceBundle resBundle) {
        this(DefaultJasperReportsContext.getInstance(), locale, resBundle);
    }

    /**
     * 
     */
    public JRViewerController(JasperReportsContext jasperReportsContext, Locale locale, ResourceBundle resBundle) {
        this.jasperReportsContext = jasperReportsContext;

        if (locale != null) {
            this.locale = locale;
        } else {
            this.locale = Locale.getDefault();
        }

        if (resBundle == null) {
            this.resourceBundle = ResourceBundle.getBundle("net/sf/jasperreports/view/viewer", getLocale());
        } else {
            this.resourceBundle = resBundle;
        }
    }

    public void addListener(JRViewerListener listener) {
        listeners.add(listener);
    }

    public boolean removeListener(JRViewerListener listener) {
        return listeners.remove(listener);
    }

    protected void fireListeners(int eventCode) {
        if (!listeners.isEmpty()) {
            JRViewerEvent event = new JRViewerEvent(this, eventCode);
            for (Iterator<JRViewerListener> it = listeners.iterator(); it.hasNext();) {
                JRViewerListener listener = it.next();
                listener.viewerEvent(event);
            }
        }
    }

    protected void setReport(String fileName, boolean isXmlReport) throws JRException {
        if (isXmlReport) {
            jasperPrint = JRPrintXmlLoader.loadFromFile(jasperReportsContext, fileName);
        } else {
            jasperPrint = (JasperPrint) JRLoader.loadObjectFromFile(fileName);
        }

        renderersCache = null;
    }

    @SuppressWarnings("deprecation")
    public void loadReport(String fileName, boolean isXmlReport) throws JRException {
        setReport(fileName, isXmlReport);

        type = TYPE_FILE_NAME;
        this.isXML = isXmlReport;
        reportFileName = fileName;

        net.sf.jasperreports.engine.util.SimpleFileResolver fileResolver = new net.sf.jasperreports.engine.util.SimpleFileResolver(
                Arrays.asList(new File[] { new File(fileName).getParentFile(), new File(".") }));
        fileResolver.setResolveAbsolutePath(true);
        if (localJasperReportsContext == null) {
            localJasperReportsContext = new net.sf.jasperreports.engine.util.LocalJasperReportsContext(
                    jasperReportsContext);
            jasperReportsContext = localJasperReportsContext;
        }
        localJasperReportsContext.setFileResolver(fileResolver);

        reloadSupported = true;
        fireListeners(JRViewerEvent.EVENT_REPORT_LOADED);
        setPageIndex(0);
    }

    protected void setReport(InputStream is, boolean isXmlReport) throws JRException {
        if (isXmlReport) {
            jasperPrint = JRPrintXmlLoader.load(jasperReportsContext, is);
        } else {
            jasperPrint = (JasperPrint) JRLoader.loadObject(is);
        }

        renderersCache = null;
    }

    public void loadReport(InputStream is, boolean isXmlReport) throws JRException {
        setReport(is, isXmlReport);

        type = TYPE_INPUT_STREAM;
        this.isXML = isXmlReport;
        reloadSupported = false;
        fireListeners(JRViewerEvent.EVENT_REPORT_LOADED);
        setPageIndex(0);
    }

    public void loadReport(JasperPrint jrPrint) {
        jasperPrint = jrPrint;
        renderersCache = null;
        type = TYPE_OBJECT;
        isXML = false;
        reloadSupported = false;
        fireListeners(JRViewerEvent.EVENT_REPORT_LOADED);
        setPageIndex(0);
    }

    public void reload() {
        if (type == TYPE_FILE_NAME) {
            try {
                loadReport(reportFileName, isXML);
            } catch (JRException e) {
                if (log.isDebugEnabled()) {
                    log.debug("Reload failed.", e);
                }
                jasperPrint = null;
                renderersCache = null;
                setPageIndex(0);
                refreshPage();

                fireListeners(JRViewerEvent.EVENT_REPORT_LOAD_FAILED);
            }

            forceRefresh();
        }
    }

    public boolean hasPages() {
        return jasperPrint != null && jasperPrint.getPages() != null && jasperPrint.getPages().size() > 0;
    }

    public void refreshPage() {
        fireListeners(JRViewerEvent.EVENT_REFRESH_PAGE);
    }

    protected void forceRefresh() {
        zoom = 0;//force pageRefresh()
        setZoomRatio(1);
    }

    public void setZoomRatio(float newZoom) {
        if (newZoom > 0) {
            fitPage = false;
            fitWidth = false;

            float old = zoom;
            zoom = newZoom;

            fireListeners(JRViewerEvent.EVENT_ZOOM_CHANGED);

            if (zoom != old) {
                refreshPage();
            }
        }
    }

    public void setPageIndex(int index) {
        if (hasPages()) {
            if (index >= 0 && index < jasperPrint.getPages().size()) {
                pageIndex = index;
                fireListeners(JRViewerEvent.EVENT_PAGE_CHANGED);
            }
        } else {
            fireListeners(JRViewerEvent.EVENT_PAGE_CHANGED);
        }
    }

    public JasperReportsContext getJasperReportsContext() {
        return jasperReportsContext;
    }

    public ResourceBundle getResourceBundle() {
        return resourceBundle;
    }

    public Locale getLocale() {
        return locale;
    }

    public String getBundleString(String key) {
        return resourceBundle.getString(key);
    }

    public JasperPrint getJasperPrint() {
        return jasperPrint;
    }

    public int getPageCount() {
        return jasperPrint.getPages().size();
    }

    public PrintPageFormat getPageFormat() {
        return getJasperPrint().getPageFormat(getPageIndex());
    }

    protected RenderersCache getRenderersCache() {
        if (renderersCache == null) {
            renderersCache = new RenderersCache(getJasperReportsContext());
        }
        return renderersCache;
    }

    public void clear() {
        jasperPrint = null;
        renderersCache = null;
    }

    public int getPageIndex() {
        return pageIndex;
    }

    public float getZoom() {
        return zoom;
    }

    public boolean isReloadSupported() {
        return reloadSupported;
    }

    public boolean isFitPage() {
        return fitPage;
    }

    public boolean isFitWidth() {
        return fitWidth;
    }

    public void fitPage() {
        fireListeners(JRViewerEvent.EVENT_FIT_PAGE);
        fitPage = true;
    }

    public void fitWidth() {
        fireListeners(JRViewerEvent.EVENT_FIT_WIDTH);
        fitWidth = true;
    }
}