/*! * 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.platform.plugin.action.builtin; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.actionsequence.dom.actions.TemplateMsgAction; import org.pentaho.platform.api.engine.IActionParameter; import org.pentaho.platform.api.engine.IActionSequenceResource; import org.pentaho.platform.api.repository.IContentItem; import org.pentaho.platform.engine.services.solution.ComponentBase; import org.pentaho.platform.plugin.action.messages.Messages; import org.pentaho.platform.util.messages.LocaleHelper; import java.io.OutputStream; import java.util.Set; public class TemplateComponent extends ComponentBase { private static final String TEMPLATE = "template"; //$NON-NLS-1$ /** * */ private static final long serialVersionUID = 4383466190328580251L; @Override public Log getLogger() { return LogFactory.getLog( TemplateComponent.class ); } @Override protected boolean validateAction() { // see if we have a template defined TemplateMsgAction actionDefinition = (TemplateMsgAction) getActionDefinition(); boolean templateOk = false; if ( null != actionDefinition.getTemplate() ) { templateOk = true; } else if ( isDefinedResource( TemplateComponent.TEMPLATE ) ) { templateOk = true; } if ( !templateOk ) { error( Messages.getInstance().getString( "Template.ERROR_0001_TEMPLATE_NOT_DEFINED" ) ); //$NON-NLS-1$ return false; } Set outputs = getOutputNames(); if ( ( outputs == null ) || ( outputs.size() == 0 ) || ( outputs.size() > 1 ) ) { error( Messages.getInstance().getString( "Template.ERROR_0002_OUTPUT_COUNT_WRONG" ) ); //$NON-NLS-1$ return false; } return true; } @Override protected boolean validateSystemSettings() { // nothing to do here return true; } @Override public void done() { // nothing to do here } @Override protected boolean executeAction() { try { TemplateMsgAction actionDefinition = (TemplateMsgAction) getActionDefinition(); String template = null; template = actionDefinition.getTemplate().getStringValue(); if ( ( null == template ) && isDefinedResource( TemplateComponent.TEMPLATE ) ) { IActionSequenceResource resource = getResource( "template" ); //$NON-NLS-1$ template = getResourceAsString( resource ); } String outputName = (String) getOutputNames().iterator().next(); IActionParameter outputParam = getOutputItem( outputName ); if ( outputParam.getType().equals( IActionParameter.TYPE_CONTENT ) ) { String mimeType = actionDefinition.getMimeType().getStringValue(); String extension = actionDefinition.getExtension().getStringValue(); // This would prevent null values being passed as parameters to getOutputItem if ( mimeType == null ) { mimeType = ""; //$NON-NLS-1$ } if ( extension == null ) { extension = ""; //$NON-NLS-1$ } // Removing the null check here because if we avoid null exception it gives misleading hibernate // stale data exception which has nothing to do with a report that simply reads data. IContentItem outputItem = getOutputContentItem( outputName, mimeType ); // IContentItem outputItem = getOutputItem(outputName, mimeType, extension); OutputStream outputStream = outputItem.getOutputStream( getActionName() ); outputStream.write( applyInputsToFormat( template ).getBytes( LocaleHelper.getSystemEncoding() ) ); outputItem.closeOutputStream(); return true; } else { setOutputValue( outputName, applyInputsToFormat( template ) ); } return true; } catch ( Exception e ) { error( Messages.getInstance().getString( "Template.ERROR_0004_COULD_NOT_FORMAT_TEMPLATE" ), e ); //$NON-NLS-1$ return false; } } @Override public boolean init() { // nothing to do here return true; } }