Package org.pentaho.reporting.engine.classic.core

Source Code of org.pentaho.reporting.engine.classic.core.AbstractMultiStreamReportProcessTask

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.engine.classic.core;

import org.pentaho.reporting.engine.classic.core.modules.output.table.html.FileSystemURLRewriter;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.SingleRepositoryURLRewriter;
import org.pentaho.reporting.engine.classic.core.modules.output.table.html.URLRewriter;
import org.pentaho.reporting.libraries.repository.ContentLocation;
import org.pentaho.reporting.libraries.repository.NameGenerator;
import org.pentaho.reporting.libraries.repository.Repository;
import org.pentaho.reporting.libraries.repository.UrlRepository;

/**
* TA common base class for {@link org.pentaho.reporting.engine.classic.core.MultiStreamReportProcessTask}
* implementations.
*
* @author Thomas Morgner
*/
public abstract class AbstractMultiStreamReportProcessTask
    extends AbstractReportProcessTask implements MultiStreamReportProcessTask
{
  private ContentLocation bulkLocation;
  private NameGenerator bulkNameGenerator;
  private URLRewriter urlRewriter;

  /**
   * Default Constructor.
   */
  protected AbstractMultiStreamReportProcessTask()
  {
  }

  /**
   * Returns the defined bulk location for the export.
   *
   * @return the bulk location.
   */
  public ContentLocation getBulkLocation()
  {
    return bulkLocation;
  }

  /**
   * Defines the bulk location, where additional content can be stored.
   *
   * @param bulkLocation the bulk location.
   */
  public void setBulkLocation(final ContentLocation bulkLocation)
  {
    this.bulkLocation = bulkLocation;
  }

  /**
   * Returns the name generator for bulk content.
   *
   * @return the bulk file name generator.
   */
  public NameGenerator getBulkNameGenerator()
  {
    return bulkNameGenerator;
  }

  /**
   * Defines the bulk file name generator that is used to generate unique names for the exported files. If a
   * bulk location is given, this property must not be null.
   *
   * @param bulkNameGenerator the name generator.
   */
  public void setBulkNameGenerator(final NameGenerator bulkNameGenerator)
  {
    this.bulkNameGenerator = bulkNameGenerator;
  }

  /**
   * Returns the URL rewriter used during the export.
   *
   * @return the URL rewriter that is used to generate or alter URLs pointing to bulk items.
   */
  public URLRewriter getUrlRewriter()
  {
    return urlRewriter;
  }

  /**
   * Defines the URL rewriter that is used to link bulk items to the main document.
   *
   * @param urlRewriter the URL rewriter used in the export.
   */
  public void setUrlRewriter(final URLRewriter urlRewriter)
  {
    this.urlRewriter = urlRewriter;
  }

  /**
   * A helper method that tries to come up with a reasonalbe URLrewriter for common repository configurations.
   * If there is a URLRewriter defined already, that one will be used. If both the bulk and body location point
   * to the same repository backend, the SingleRepositoryURLRewriter is used. If both repositories are different
   * but both are UrlRepositories, a FilesystemURLRewriter is used. If everything else fails, the method will
   * fall back to a SingleRepositoryURLRewriter - hoping that it will work out.
   *
   * @return the computed URL rewriter.
   */
  protected URLRewriter computeUrlRewriter()
  {
    final URLRewriter userRewriter = getUrlRewriter();
    if (userRewriter != null)
    {
      return (userRewriter);
    }
    else
    {
      final ContentLocation bulkLocation = getBulkLocation();
      if (bulkLocation == null)
      {
        return (new SingleRepositoryURLRewriter());
      }
      else
      {
        final Repository bulkRepository = bulkLocation.getRepository();
        final Repository bodyRepository = getBodyContentLocation().getRepository();
        if (bulkRepository == bodyRepository)
        {
          return (new SingleRepositoryURLRewriter());
        }
        else if (bulkRepository instanceof UrlRepository &&
            bodyRepository instanceof UrlRepository)
        {
          return (new FileSystemURLRewriter());
        }
        else
        {
          return (new SingleRepositoryURLRewriter());
        }
      }
    }
  }

}
TOP

Related Classes of org.pentaho.reporting.engine.classic.core.AbstractMultiStreamReportProcessTask

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.