org.pentaho.platform.repository2.unified.fileio.RepositoryFileOutputHandler.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.platform.repository2.unified.fileio.RepositoryFileOutputHandler.java

Source

/*
 * This program is free software; you can redistribute it and/or modify it under the
 * terms of the GNU General Public License, version 2 as published by the Free Software
 * Foundation.
 *
 * You should have received a copy of the GNU General Public License along with this
 * program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.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 General Public License for more details.
 *
 *
 * Copyright 2006 - 2013 Pentaho Corporation.  All rights reserved.
 */

package org.pentaho.platform.repository2.unified.fileio;

import org.apache.commons.io.FilenameUtils;
import org.pentaho.platform.api.engine.IContentOutputHandler;
import org.pentaho.platform.api.engine.IMimeTypeListener;
import org.pentaho.platform.api.engine.IOutputHandler;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.api.repository.IContentItem;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.util.web.MimeHelper;

import java.io.IOException;

public class RepositoryFileOutputHandler implements IOutputHandler {

    private RepositoryFileOutputStream outputStream;
    private boolean contentGenerated;
    private boolean responseExpected;
    private IMimeTypeListener mimeTypeListener;
    private int outputType = IOutputHandler.OUTPUT_TYPE_DEFAULT;
    private IPentahoSession session;

    public RepositoryFileOutputHandler(RepositoryFileOutputStream outputStream) {
        this.outputStream = outputStream;
        contentGenerated = false;
    }

    public boolean allowFeedback() {
        return false;
    }

    public boolean contentDone() {
        return contentGenerated;
    }

    public IContentItem getFeedbackContentItem() {
        return null;
    }

    public IMimeTypeListener getMimeTypeListener() {
        return mimeTypeListener;
    }

    public IContentItem getOutputContentItem(final String outputName, final String contentName,
            final String instanceId, final String localMimeType) {
        IContentItem outputContentItem = null;
        if (outputName.equals(IOutputHandler.RESPONSE) && contentName.equals(IOutputHandler.CONTENT)) {
            String requestedFileExtension = MimeHelper.getExtension(localMimeType);
            String currentExtension = FilenameUtils.getExtension(outputStream.getFilePath());
            if (requestedFileExtension == null) {
                if (currentExtension != null) {
                    String tempFilePath = FilenameUtils.getFullPathNoEndSeparator(outputStream.getFilePath()) + "/"
                            + FilenameUtils.getBaseName(outputStream.getFilePath());
                    outputStream.setFilePath(tempFilePath);
                    outputContentItem = new RepositoryFileContentItem(outputStream);
                } else {
                    outputContentItem = new RepositoryFileContentItem(outputStream);
                }
            } else if (!requestedFileExtension.substring(1).equals(currentExtension.toLowerCase())) {
                String tempFilePath = FilenameUtils.getFullPathNoEndSeparator(outputStream.getFilePath()) + "/"
                        + FilenameUtils.getBaseName(outputStream.getFilePath()) + requestedFileExtension;
                outputStream.setFilePath(tempFilePath);
                outputContentItem = new RepositoryFileContentItem(outputStream);
            } else {
                outputContentItem = new RepositoryFileContentItem(outputStream);
            }
            responseExpected = true;
        } else {
            IContentOutputHandler output = PentahoSystem.getOutputDestinationFromContentRef(contentName, session);
            // If the output handler wasn't found with just the content name. Try to look it up with the output name as
            // well.
            // (This mirrors HttpOutputHandler's lookup logic)
            if (output == null) {
                output = PentahoSystem.getOutputDestinationFromContentRef(outputName + ":" + contentName, session); //$NON-NLS-1$
            }
            if (output != null) {
                output.setSession(PentahoSessionHolder.getSession());
                output.setInstanceId(instanceId);
                String filePath = "~/workspace/" + contentName; //$NON-NLS-1$
                if (contentName.startsWith("/")) {
                    filePath = contentName;
                }
                output.setSolutionPath(filePath);
                output.setMimeType(localMimeType);
                outputContentItem = output.getFileOutputContentItem();
            }
        }
        return outputContentItem;
    }

    public int getOutputPreference() {
        return outputType;
    }

    public IPentahoSession getSession() {
        return session;
    }

    public boolean isResponseExpected() {
        return responseExpected;
    }

    public void setMimeTypeListener(IMimeTypeListener mimeTypeListener) {
        this.mimeTypeListener = mimeTypeListener;
    }

    public void setOutput(final String name, final Object value) throws IOException {
        if (value == null) {
            return;
        }

        if (IOutputHandler.CONTENT.equalsIgnoreCase(name)) {
            IContentItem response = getOutputContentItem("response", IOutputHandler.CONTENT, null, null); //$NON-NLS-1$
            if (response != null) {
                if (!(value instanceof IContentItem)) {
                    if (response.getMimeType() == null) {
                        response.setMimeType("text/html"); //$NON-NLS-1$
                    }
                    response.getOutputStream(null).write(value.toString().getBytes());
                    contentGenerated = true;
                }
            }
        }
    }

    public void setOutputPreference(int outputType) {
        this.outputType = outputType;
    }

    public void setSession(IPentahoSession session) {
        this.session = session;
    }

}