/*
*
* 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 2005 - 2008 Pentaho Corporation. All rights reserved.
*
* @created Aug 7, 2005
* @author James Dixon
*/
package org.pentaho.platform.uifoundation.component.xml;
import java.io.File;
import java.util.List;
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.repository.ISolutionRepository;
import org.pentaho.platform.engine.core.system.PentahoSystem;
import org.pentaho.platform.engine.services.SolutionURIResolver;
import org.pentaho.platform.uifoundation.messages.Messages;
import org.pentaho.platform.util.xml.XForm;
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 (instanceId == null) {
// error( "Instance id not specified" );
// out.write( "instance id not provided" );
// ok = false;
}
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() {
ISolutionRepository repository = PentahoSystem.get(ISolutionRepository.class, getSession());
IActionSequence actionSequence = repository.getActionSequence(solution, path, actionName, getLoggingLevel(),
ISolutionRepository.ACTION_EXECUTE);
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(getSession()));
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;
}
}
}