/*
* 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.uifoundation.component.xml;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;
import org.pentaho.platform.api.engine.IActionSequence;
import org.pentaho.platform.api.engine.IPentahoUrlFactory;
import org.pentaho.platform.api.engine.ISolutionActionDefinition;
import org.pentaho.platform.api.repository2.unified.RepositoryFilePermission;
import org.pentaho.platform.engine.core.solution.ActionInfo;
import org.pentaho.platform.engine.services.ActionSequenceJCRHelper;
import org.pentaho.platform.engine.services.SolutionURIResolver;
import org.pentaho.platform.uifoundation.messages.Messages;
import org.pentaho.platform.util.xml.XForm;
import java.io.File;
import java.util.List;
public class InputFormComponent extends XmlComponent {
/**
*
*/
private static final long serialVersionUID = -6106477602576378538L;
String templateName;
String stylesheetName;
String solution;
String path;
String actionName;
String instanceId;
public InputFormComponent( final IPentahoUrlFactory urlFactory, final String instanceId, final String templateName,
final String stylesheetName, final String solution, final String path, final String actionName,
final List messages ) {
super( urlFactory, messages, solution + File.separator + path );
this.instanceId = instanceId;
this.templateName = templateName;
this.stylesheetName = stylesheetName;
this.solution = solution;
this.path = path;
this.actionName = actionName;
}
private static final Log logger = LogFactory.getLog( InputFormComponent.class );
@Override
public Log getLogger() {
return InputFormComponent.logger;
}
@Override
public boolean validate() {
boolean ok = true;
if ( solution == null ) {
error( Messages.getInstance().getString( "InputForm.ERROR_0001_SOLUTION_NOT_SPECIFIED" ) ); //$NON-NLS-1$
ok = false;
}
if ( path == null ) {
error( Messages.getInstance().getString( "InputForm.ERROR_0002_ACTION_NAME_NOT_SPECIFIED" ) ); //$NON-NLS-1$
ok = false;
}
if ( actionName == null ) {
// TODO log this
error( Messages.getInstance().getString( "InputForm.ERROR_0003_ACTION_PATH_NOT_SPECIFIED" ) ); //$NON-NLS-1$
ok = false;
}
return ok;
}
/*
* (non-Javadoc)
*
* @see org.pentaho.core.ui.component.BaseUIComponent#getXmlContent()
*/
@Override
public Document getXmlContent() {
ActionSequenceJCRHelper actionHelper = new ActionSequenceJCRHelper( getSession() );
IActionSequence actionSequence =
actionHelper.getActionSequence( ActionInfo.buildSolutionPath( solution, path, actionName ), getLoggingLevel(),
RepositoryFilePermission.READ );
if ( actionSequence == null ) {
// TODO log this
error( Messages.getInstance().getString( "InputForm.ERROR_0004_ACTION_NOT_FOUND" ) + solution + path + actionName ); //$NON-NLS-1$
return null;
}
List actions = actionSequence.getActionDefinitionsAndSequences();
ISolutionActionDefinition action = (ISolutionActionDefinition) actions.get( 0 );
Node node = action.getComponentSection();
if ( node == null ) {
error( Messages.getInstance().getString( "InputForm.ERROR_0005_INBOX_DEFINITION_MISSING" ) + solution + path + actionName ); //$NON-NLS-1$
return null;
}
if ( templateName == null ) {
// see if the template is specified in the action document
Node templateNode = node.selectSingleNode( "//template" ); //$NON-NLS-1$
if ( templateNode != null ) {
templateName = templateNode.getText();
}
if ( templateName == null ) {
error( Messages.getInstance().getString( "InputForm.ERROR_0006_TEMPLATE_NOT_SPECIFIED" ) ); //$NON-NLS-1$
return null;
}
}
Node xFormNode = node.selectSingleNode( "//xForm" ); //$NON-NLS-1$
try {
String actionTitle = actionSequence.getTitle();
if ( actionTitle != null ) {
setXslProperty( "title", actionTitle ); //$NON-NLS-1$
}
String description = actionSequence.getDescription();
if ( description != null ) {
setXslProperty( "description", description ); //$NON-NLS-1$
}
String xFormHtml = XForm.transformSnippet( xFormNode, getSession(), new SolutionURIResolver() );
if ( xFormHtml == null ) {
error( Messages.getInstance().getString( "InputForm.ERROR_0007_INBOX_DEFINITION_INVALID" ) + solution + path + actionName ); //$NON-NLS-1$
return null;
}
Document document = DocumentHelper.parseText( xFormHtml );
Node xFormHtmlNode = document.selectSingleNode( "//xForm" ); //$NON-NLS-1$
setXslProperty( "xForm", xFormHtmlNode.asXML() ); //$NON-NLS-1$
if ( ( stylesheetName != null ) && !"".equals( stylesheetName ) ) { //$NON-NLS-1$
setXslProperty( "css", stylesheetName ); //$NON-NLS-1$
}
setXsl( "text/html", templateName ); //$NON-NLS-1$
return document;
} catch ( Exception e ) {
return null;
}
}
}