use of org.pentaho.platform.plugin.action.jfreereport.helper.PentahoTableDataFactory in project pentaho-platform by pentaho.
the class JFreeReportComponent method getQueryComponentDataFactory.
private PentahoTableDataFactory getQueryComponentDataFactory() throws ClassNotFoundException, InstantiationException, IllegalAccessException, Exception {
JFreeReportAction jFreeReportAction = (JFreeReportAction) getActionDefinition();
PentahoTableDataFactory factory = null;
String dataComponentName = jFreeReportAction.getDataComponent().getStringValue();
String origComponentName = jFreeReportAction.getComponentName();
if (dataComponentName != null) {
if (JFreeReportAction.SQL_DATA_SOURCE.equalsIgnoreCase(dataComponentName)) {
dataComponentName = AbstractJFreeReportComponent.DATACOMPONENT_SQLCLASS;
} else if (JFreeReportAction.MDX_DATA_SOURCE.equalsIgnoreCase(dataComponentName)) {
dataComponentName = AbstractJFreeReportComponent.DATACOMPONENT_MDXCLASS;
}
try {
// This is a giant hack and a big no, no. Basically we're going to transform the JFreeReportAction into a
// SQL or MDX lookup action, by changing its component name. Then we create the appropriate component to run the
// transformed action.
// All this to support the DB and Query info being embedded in the JFreeReport action. This is definitely
// deprecated functionality
// that should not be relied upon. The correct way to do this is to create an SQL or MDX action prior to the
// JFreeReport
// action in the action sequence. That action performs the desired query, then pass the results of that query to
// the JFreeReport
// action.
jFreeReportAction.setComponentName(dataComponentName);
ActionDefinition tmpActionDefinition = ActionFactory.getActionDefinition(jFreeReportAction.getElement(), jFreeReportAction.getActionParameterMgr());
final Class componentClass = Class.forName(dataComponentName);
IDataComponent dataComponent = (IDataComponent) componentClass.newInstance();
dataComponent.setInstanceId(getInstanceId());
dataComponent.setActionName(getActionName());
dataComponent.setProcessId(getProcessId());
dataComponent.setActionDefinition(tmpActionDefinition);
dataComponent.setComponentDefinition(getComponentDefinition());
dataComponent.setRuntimeContext(getRuntimeContext());
dataComponent.setSession(getSession());
dataComponent.setLoggingLevel(getLoggingLevel());
dataComponent.setMessages(getMessages());
// Abort, we cant continue anyway.
if ((dataComponent.validate() == IRuntimeContext.RUNTIME_CONTEXT_VALIDATE_OK) && dataComponent.init() && (dataComponent.execute() == IRuntimeContext.RUNTIME_STATUS_SUCCESS)) {
final IPentahoResultSet resultset = dataComponent.getResultSet();
factory = new PentahoTableDataFactory(AbstractJFreeReportComponent.DATACOMPONENT_DEFAULTINPUT, new PentahoTableModel(resultset));
} else {
throw new IllegalArgumentException(Messages.getInstance().getErrorString(// $NON-NLS-1$
"JFreeReport.ERROR_0021_DATA_COMPONENT_FAILED"));
}
} catch (ClassNotFoundException e) {
JFreeReportComponent.logger.error(null, e);
} catch (InstantiationException e) {
JFreeReportComponent.logger.error(null, e);
} catch (IllegalAccessException e) {
JFreeReportComponent.logger.error(null, e);
} finally {
jFreeReportAction.setComponentName(origComponentName);
}
}
return factory;
}
use of org.pentaho.platform.plugin.action.jfreereport.helper.PentahoTableDataFactory in project pentaho-platform by pentaho.
the class JFreeReportComponent method getJarDataFactory.
private PentahoTableDataFactory getJarDataFactory() throws Exception {
PentahoTableDataFactory factory = null;
JFreeReportAction jFreeReportAction = (JFreeReportAction) getActionDefinition();
try {
org.pentaho.actionsequence.dom.IActionResource actionResource = jFreeReportAction.getDataJar().getJar();
if (actionResource != null) {
DataSource dataSource = new ActivationHelper.PentahoStreamSourceWrapper(actionResource.getDataSource());
InputStream in = dataSource.getInputStream();
try {
// not being able to read a single char is definitly a big boo ..
if (in.read() == -1) {
// $NON-NLS-1$
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE"));
} else {
final ClassLoader loader = ReportUtils.createJarLoader(getSession(), getResource(actionResource.getName()));
if (loader == null) {
throw new Exception(Messages.getInstance().getString(// $NON-NLS-1$
"JFreeReportDataComponent.ERROR_0035_COULD_NOT_CREATE_CLASSLOADER"));
} else if (!isDefinedInput(AbstractJFreeReportComponent.DATACOMPONENT_CLASSLOCINPUT)) {
throw new Exception(Messages.getInstance().getErrorString(// $NON-NLS-1$
"JFreeReport.ERROR_0012_CLASS_LOCATION_MISSING"));
} else {
// Get input parameters, and set them as properties in the report
// object.
final ReportParameterValues reportProperties = new ReportParameterValues();
IActionInput[] actionInputs = jFreeReportAction.getInputs();
for (IActionInput element : actionInputs) {
final Object paramValue = element.getValue();
if (paramValue instanceof Object[]) {
final Object[] values = (Object[]) paramValue;
final StringBuffer valuesBuffer = new StringBuffer();
// TODO support non-string items
for (int z = 0; z < values.length; z++) {
if (z == 0) {
valuesBuffer.append(values[z].toString());
} else {
valuesBuffer.append(',').append(values[z].toString());
}
}
reportProperties.put(element.getName(), valuesBuffer.toString());
} else {
reportProperties.put(element.getName(), paramValue);
}
}
final DataFactory dataFactory = new PentahoDataFactory(loader);
final TableModel model = dataFactory.queryData(jFreeReportAction.getDataJar().getDataClass(), new ParameterDataRow(reportProperties));
factory = new PentahoTableDataFactory(AbstractJFreeReportComponent.DATACOMPONENT_DEFAULTINPUT, model);
}
}
} catch (Exception e) {
// $NON-NLS-1$
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE"));
}
}
} catch (FileNotFoundException e1) {
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0010_REPORT_JAR_MISSING", // $NON-NLS-1$
jFreeReportAction.getDataJar().toString()));
}
return factory;
}
use of org.pentaho.platform.plugin.action.jfreereport.helper.PentahoTableDataFactory in project pentaho-platform by pentaho.
the class JFreeReportDataComponent method getJarDataFactory.
@SuppressWarnings("unused")
private PentahoTableDataFactory getJarDataFactory() throws Exception {
PentahoTableDataFactory factory = null;
if (isDefinedResource(AbstractJFreeReportComponent.DATACOMPONENT_JARINPUT)) {
final IActionSequenceResource resource = getResource(AbstractJFreeReportComponent.DATACOMPONENT_JARINPUT);
final InputStream in;
try {
in = resource.getInputStream(RepositoryFilePermission.READ, LocaleHelper.getLocale());
try {
// not being able to read a single char is definitly a big boo ..
if (in.read() == -1) {
// $NON-NLS-1$
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE"));
} else {
final ClassLoader loader = ReportUtils.createJarLoader(getSession(), resource);
if (loader == null) {
throw new Exception(Messages.getInstance().getString(// $NON-NLS-1$
"JFreeReportDataComponent.ERROR_0035_COULD_NOT_CREATE_CLASSLOADER"));
} else if (!isDefinedInput(AbstractJFreeReportComponent.DATACOMPONENT_CLASSLOCINPUT)) {
throw new Exception(Messages.getInstance().getErrorString(// $NON-NLS-1$
"JFreeReport.ERROR_0012_CLASS_LOCATION_MISSING"));
} else {
final String classLocation = getInputStringValue(AbstractJFreeReportComponent.DATACOMPONENT_CLASSLOCINPUT);
// Get input parameters, and set them as properties in the report
// object.
final ReportParameterValues reportProperties = new ReportParameterValues();
final Set paramNames = getInputNames();
final Iterator it = paramNames.iterator();
while (it.hasNext()) {
final String paramName = (String) it.next();
final Object paramValue = getInputValue(paramName);
if (paramValue instanceof Object[]) {
final Object[] values = (Object[]) paramValue;
final StringBuffer valuesBuffer = new StringBuffer();
// TODO support non-string items
for (int i = 0; i < values.length; i++) {
if (i == 0) {
valuesBuffer.append(values[i].toString());
} else {
valuesBuffer.append(',').append(values[i].toString());
}
}
reportProperties.put(paramName, valuesBuffer.toString());
} else {
reportProperties.put(paramName, paramValue);
}
}
final DataFactory dataFactory = new PentahoDataFactory(loader);
final TableModel model = dataFactory.queryData(classLocation, new ParameterDataRow(reportProperties));
factory = new PentahoTableDataFactory(AbstractJFreeReportComponent.DATACOMPONENT_DEFAULTINPUT, model);
}
}
} catch (Exception e) {
// $NON-NLS-1$
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0009_REPORT_JAR_UNREADABLE"));
}
} catch (FileNotFoundException e1) {
throw new Exception(Messages.getInstance().getErrorString("JFreeReport.ERROR_0010_REPORT_JAR_MISSING", // $NON-NLS-1$
resource.getAddress()));
}
}
return factory;
}
Aggregations