/**
Licensed Materials - Property of IBM
IBM Cognos Products: DOCS
(C) Copyright IBM Corp. 2005, 2008
US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with
IBM Corp.
*/
/**
* RunReport.java
*
*
* Copyright (C) 2008 Cognos ULC, an IBM Company. All rights reserved.
* Cognos (R) is a trademark of Cognos ULC, (formerly Cognos Incorporated).
*
* Description: This code sample demonstrates how to run different types of reports using the following
* methods:
* - run
* Use this method to run a report, query, or report view.
* - wait
* Use this method to notify the server that the issuer of the request is still
* waiting for the output, and to request that the processing be continued.
* - query
* Use this method to request objects from Content Manager.
* - getOutput
* Use this method to request that the output be sent to the issuer
* of the request.
*/
import java.io.File;
import java.io.FileOutputStream;
import java.util.Calendar;
import org.apache.axis.encoding.Base64;
import com.cognos.developer.schemas.bibus._3.AsynchDetailReportOutput;
import com.cognos.developer.schemas.bibus._3.AsynchDetailReportStatus;
import com.cognos.developer.schemas.bibus._3.AsynchDetailReportStatusEnum;
import com.cognos.developer.schemas.bibus._3.AsynchOptionBoolean;
import com.cognos.developer.schemas.bibus._3.AsynchOptionEnum;
import com.cognos.developer.schemas.bibus._3.AsynchReply;
import com.cognos.developer.schemas.bibus._3.AsynchReplyStatusEnum;
import com.cognos.developer.schemas.bibus._3.AsynchSecondaryRequest;
import com.cognos.developer.schemas.bibus._3.AuthoredReport;
import com.cognos.developer.schemas.bibus._3.BaseClass;
import com.cognos.developer.schemas.bibus._3.BaseParameter;
import com.cognos.developer.schemas.bibus._3.DeliveryOptionEnum;
import com.cognos.developer.schemas.bibus._3.DeliveryOptionString;
import com.cognos.developer.schemas.bibus._3.Graphic;
import com.cognos.developer.schemas.bibus._3.MultilingualString;
import com.cognos.developer.schemas.bibus._3.Option;
import com.cognos.developer.schemas.bibus._3.Output;
import com.cognos.developer.schemas.bibus._3.Page;
import com.cognos.developer.schemas.bibus._3.Parameter;
import com.cognos.developer.schemas.bibus._3.ParameterValue;
import com.cognos.developer.schemas.bibus._3.PropEnum;
import com.cognos.developer.schemas.bibus._3.QueryOptions;
import com.cognos.developer.schemas.bibus._3.RunOptionBoolean;
import com.cognos.developer.schemas.bibus._3.RunOptionEnum;
import com.cognos.developer.schemas.bibus._3.RunOptionMultilingualString;
import com.cognos.developer.schemas.bibus._3.RunOptionStringArray;
import com.cognos.developer.schemas.bibus._3.SearchPathMultipleObject;
import com.cognos.developer.schemas.bibus._3.SearchPathSingleObject;
import com.cognos.developer.schemas.bibus._3.Sort;
public class RunReport
{
private static final int REP_HTML = 0;
private static final int REP_XML = 1;
private static final int REP_PDF = 2;
private static final int REP_CSV = 3;
private static final int REP_HTML_FRAG = 4;
private static final int REP_MHT = 5;
private static final int REP_XLWA = 6;
static int tmpFileCounter = 0;
private CRNConnect my_connection;
private AsynchReply my_rsr;
/**
* runReport will execute query the content store of the report
* or query and thenpass it off to be executed in the default browser.
*
* @param connect
* Specifies the Connection to Server.
* @param report
* Specifies the name of the report or query.
* @param reportType
* Specifies the type of report.
* @return
* Returns the text message indicating whether the report or query ran successfully.
*/
public String runReport(
CRNConnect connect,
BaseClassWrapper report,
int reportType,
boolean doBurst)
throws java.rmi.RemoteException
{
String output = new String();
if ((connect != null)
&& (report != null)
&& (connect.getDefaultSavePath() != null))
{
my_connection = connect;
// sn_dg_prm_smpl_runreport_P1_start_0
ParameterValue emptyParameterValues[] = new ParameterValue[] {};
ParameterValue reportParameterValues[] = null;
ReportParameters repParms = new ReportParameters();
BaseParameter[] parametersInReportSpec = new Parameter[] {};
try
{
parametersInReportSpec =
repParms.getReportParameters(report, connect);
}
// sn_dg_prm_smpl_runreport_P1_end_0
catch (java.rmi.RemoteException remoteEx)
{
System.out.println("Caught Remote Exception:\n");
remoteEx.printStackTrace();
}
if (parametersInReportSpec != null
&& parametersInReportSpec.length > 0)
{
reportParameterValues =
ReportParameters.setReportParameters(
parametersInReportSpec);
}
if ((reportParameterValues == null)
|| (reportParameterValues.length <= 0))
{
reportParameterValues = emptyParameterValues;
}
output
+= executeReport(
report,
connect,
reportType,
reportParameterValues,
doBurst,
null);
}
return output;
}
/**
* runReportAt will set up the report or query to be run at the
* specified time.
*
* @param connect
* Specifies the Connection to Server.
* @param report
* Specifies the name of the report or query.
* @param reportType
* Specifies the type of report.
* @param execTime
* Specifies the time to run.
* @return
* Returns the text message indicating whether the report or query ran successfully.
*/
public String runReportAt(
CRNConnect connect,
BaseClassWrapper report,
int reportType,
Calendar execTime)
throws java.rmi.RemoteException
{
String output = "runReportAt did not complete as expected";
String resultEventID = new String();
Option reportRunOptions[];
String rSearchPath =
report.getBaseClassObject().getSearchPath().getValue();
if ((connect != null)
&& (report != null)
&& (connect.getDefaultSavePath() != null))
{
//Prepare the runOptions
reportRunOptions = getDefaultRunOptions(reportType, null);
ParameterValue emptyParameterValues[] = new ParameterValue[] {};
ParameterValue reportParameterValues[] = null;
ReportParameters repParms = new ReportParameters();
BaseParameter[] parametersInReportSpec = new Parameter[] {};
try
{
parametersInReportSpec =
repParms.getReportParameters(report, connect);
}
catch (java.rmi.RemoteException remoteEx)
{
System.out.println("Caught Remote Exception:\n");
remoteEx.printStackTrace();
}
if (parametersInReportSpec != null
&& parametersInReportSpec.length > 0)
{
reportParameterValues =
ReportParameters.setReportParameters(
parametersInReportSpec);
}
if ((reportParameterValues == null)
|| (reportParameterValues.length <= 0))
{
reportParameterValues = emptyParameterValues;
}
try
{
// sn_dg_sdk_method_eventManagementService_runAt_start_0
resultEventID =
connect.getEventMgmtService().runAt(
execTime,
new SearchPathSingleObject(rSearchPath),
reportParameterValues,
reportRunOptions);
// sn_dg_sdk_method_eventManagementService_runAt_end_0
output = "runAt set up event ID" + resultEventID;
}
catch (java.rmi.RemoteException remoteEx)
{
System.out.println("Caught Remote Exception:\n");
remoteEx.printStackTrace();
}
}
return output;
}
/**
* This Java method executes the specified report and returns a boolean value
* indicating whether the report or query ran successfully.
* @param report
* Specifies the report.
* @param connect
* Specifies the Connection to Server.
* @param reportType
* Specifies the output format of report: HTML, XML, PDF.
* @param paramValueArray
* Specifies the parameter values, if any, to use for the report
* @param runOptions
* Specifies the options, if any, to use for the report
* @return
* Returns true if the report was executed successfully and false if the report did not run.
*/
// sn_dg_prm_smpl_runreport_P4_start_0
public String executeReport(
BaseClassWrapper report,
CRNConnect connect,
int reportType,
ParameterValue paramValueArray[],
boolean doBurst,
Option runOptions[])
throws java.rmi.RemoteException
{
Option execReportRunOptions[];
AsynchReply rsr = null;
//check for advanced routing server group
String serverGroup = ((AuthoredReport)report.getBaseClassObject()).getRoutingServerGroup().getValue();
if(serverGroup == null) {
serverGroup = "";
}
String rSearchPath =
report.getBaseClassObject().getSearchPath().getValue();
String ERR_MESG =
"run() failed to return a valid report in this format";
//Prepare the runOptions
if(doBurst)
{
execReportRunOptions = getBurstRunOptions(report, reportType, runOptions);
}
else
{
execReportRunOptions = getDefaultRunOptions(reportType, runOptions);
}
// sn_dg_sdk_method_reportService_run_start_1
//Call run()
rsr =
connect.getReportService(true, serverGroup).run(
new SearchPathSingleObject(rSearchPath),
paramValueArray,
execReportRunOptions);
// sn_dg_sdk_method_reportService_run_end_1
// If response is not immediately complete, call wait until complete
if (!rsr.getStatus().equals(AsynchReplyStatusEnum.complete)&&!rsr.getStatus().equals(AsynchReplyStatusEnum.conversationComplete))
{
while (!rsr.getStatus().equals(AsynchReplyStatusEnum.complete)&&!rsr.getStatus().equals(AsynchReplyStatusEnum.conversationComplete))
{
//before calling wait, double check that it is okay
if (!hasSecondaryRequest(rsr, "wait"))
{
return ERR_MESG;
}
rsr =
connect.getReportService().wait(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
//After calling wait() it is necessary to check to make sure
//the output is ready before retrieving it
if (outputIsReady(rsr))
{
rsr =
connect.getReportService().getOutput(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
else
{
return ERR_MESG;
}
}
// sn_dg_prm_smpl_runreport_P4_end_0
//rsr grab a copy of this final rsr for local use later
my_rsr = rsr;
if(doBurst)
{
return ("Bursted");
}
//Do something with the output
return textOrBinaryOutput(connect, rsr, report.toString(), reportType);
}
public String textOrBinaryOutput(
CRNConnect connect,
AsynchReply rsr,
String report,
int reportType)
{
String textOutput = null;
if (reportType == REP_PDF
|| reportType == REP_CSV
|| reportType == REP_XLWA)
{
textOutput =
saveBinaryOutput(connect, rsr, report.toString(), reportType);
}
else if (
reportType == REP_HTML
|| reportType == REP_XML
|| reportType == REP_HTML_FRAG
|| reportType == REP_MHT)
{
textOutput =
getOutputPage(connect, rsr, report.toString(), reportType);
}
if (textOutput == null)
{
return "The server failed to return valid report output in this format";
}
return textOutput;
}
public boolean outputIsReady(AsynchReply response)
{
for (int i = 0; i < response.getDetails().length; i++)
{
if ((response.getDetails()[i] instanceof AsynchDetailReportStatus)
&& (((AsynchDetailReportStatus)response.getDetails()[i])
.getStatus()
== AsynchDetailReportStatusEnum.responseReady)
&& (hasSecondaryRequest(response, "getOutput")))
{
return true;
}
}
return false;
}
public static boolean hasSecondaryRequest(
AsynchReply response,
String secondaryRequest)
{
AsynchSecondaryRequest[] secondaryRequests =
response.getSecondaryRequests();
for (int i = 0; i < secondaryRequests.length; i++)
{
if (secondaryRequests[i].getName().compareTo(secondaryRequest)
== 0)
{
return true;
}
}
return false;
}
public String saveBinaryOutput(
CRNConnect connection,
AsynchReply response,
String reportString,
int reportType)
{
byte binaryOutput[] = null;
BaseClass additionalOutputObject = null;
AsynchDetailReportOutput reportOutput = null;
try
{
for (int i = 0; i < response.getDetails().length; i++)
{
if (response.getDetails()[i]
instanceof AsynchDetailReportOutput)
{
reportOutput =
(AsynchDetailReportOutput)response.getDetails()[i];
break;
}
}
// decode the PDF/CSV output to array of bytes.
// binary output is not split into multiple pages, there will be only one
if(reportType == REP_PDF
|| reportType == REP_CSV)
{
binaryOutput = Base64.decode(reportOutput.getOutputPages()[0]);
}
else
{
binaryOutput=(reportOutput.getOutputPages()[0]).getBytes();
}
if (binaryOutput == null)
{
return "Server failed to return a valid report in this format.";
}
//For some Binary output types (Excel) there may be additional output objects
//that must be retrieved and saved with the "main" report output
//
//For the references to work correctly, the file name must be consistent
//with the name used in the content store
if (reportOutput.getOutputObjects().length > 0)
{
additionalOutputObject = reportOutput.getOutputObjects()[0];
if (additionalOutputObject != null)
{
PropEnum[] props =
new PropEnum[] {
PropEnum.searchPath,
PropEnum.defaultName,
PropEnum.dataType,
PropEnum.data,
PropEnum.objectClass };
SearchPathMultipleObject aopSearchPath = new SearchPathMultipleObject();
aopSearchPath.set_value(additionalOutputObject.getSearchPath().getValue() + "/page");
BaseClass[] additionalOutputPages =
connection.getCMService().query(
aopSearchPath,
props,
new Sort[] {},
new QueryOptions());
for (int i = 0; i < additionalOutputPages.length; i++)
{
if (additionalOutputPages[i] instanceof Page)
{
File oFile =
new File(
connection.getDefaultSavePath()
+ "/"
+ additionalOutputPages[i]
.getDefaultName()
.getValue());
FileOutputStream fos = new FileOutputStream(oFile);
fos.write(
((Page)additionalOutputPages[i]).getData().getValue());
fos.flush();
fos.close();
}
}
}
}
//write the binary output to a file
File oFile = getNewTempFile(null, reportString, reportType);
FileOutputStream fos = new FileOutputStream(oFile);
fos.write(binaryOutput);
fos.flush();
fos.close();
//return filename where the main output was written
return oFile.getAbsolutePath();
}
catch (java.io.FileNotFoundException fileNotFoundEx)
{
//fileNotFoundEx.printStackTrace();
return fileNotFoundEx.toString();
}
catch (java.io.IOException ioEx)
{
//ioEx.printStackTrace();
return ioEx.toString();
}
}
public String getOutputPage(
CRNConnect connect,
AsynchReply response,
String reportString,
int reportType)
{
AsynchDetailReportOutput reportOutput = null;
for (int i = 0; i < response.getDetails().length; i++)
{
if (response.getDetails()[i] instanceof AsynchDetailReportOutput)
{
reportOutput =
(AsynchDetailReportOutput)response.getDetails()[i];
break;
}
}
if (reportOutput == null)
{
return "Server failed to return a valid report in this format.";
}
String textOutput = "";
//If there are graphics in the output, it must be handled
//differently than text based output
if (reportOutput.getOutputObjects().length > 0)
{
textOutput = replaceLocalGraphicsInOutput(connect, reportOutput);
}
else
{
//text based output is split into pages -- return the current page
String[] pages = reportOutput.getOutputPages();
textOutput = pages[0].toString();
}
File oFile = getNewTempFile(null, reportString, reportType);
try
{
//write the updated html output to a file
FileOutputStream fos = new FileOutputStream(oFile);
fos.write(textOutput.getBytes());
fos.flush();
fos.close();
}
catch (java.io.IOException ioEx)
{}
return oFile.getAbsolutePath();
}
public String replaceLocalGraphicsInOutput(
CRNConnect connect,
AsynchDetailReportOutput reportOutput)
{
// this section deals with executing reports with charts or graphics.
// the img tag contains credentials that are not valid when the report
// is not run through report or query studio therefore we must extract
// the img from content mgr and then save it locally, then replace the
// img tag returned from the server with a path to the local graphic.
// TODO Only the first graphic is handled. For reports with multiple
// graphics, a for loop to process all of them would be appropriate.
BaseClass bcGraphic[];
try
{
SearchPathMultipleObject graphicSearchPath = new SearchPathMultipleObject();
graphicSearchPath.set_value(reportOutput.getOutputObjects()[0].getSearchPath().getValue());
bcGraphic =
connect.getCMService().query(
graphicSearchPath,
new PropEnum[] { PropEnum.searchPath },
new Sort[] {},
new QueryOptions());
Output out = null;
if ((bcGraphic.length > 0) && (bcGraphic[0] instanceof Output))
{
SearchPathMultipleObject outSearchPath = new SearchPathMultipleObject();
out = (Output)bcGraphic[0];
outSearchPath.set_value(out.getSearchPath().getValue() + "/graphic");
Graphic g =
(Graphic)connect.getCMService().query(
outSearchPath,
new PropEnum[] {
PropEnum.searchPath,
PropEnum.data,
PropEnum.dataType },
new Sort[] {},
new QueryOptions())[0];
String graphicFile =
connect.getDefaultSavePath()
+ "/"
+ System.getProperty("file.separator")
+ "graphicToDisplay.png";
// save graphic locally
File gFile = new File(graphicFile);
FileOutputStream fos = new FileOutputStream(gFile);
fos.write(g.getData().getValue());
fos.flush();
fos.close();
// return the HTML output, search&replace img tag with local image.
String[] pages = reportOutput.getOutputPages();
String html = pages[0].toString();
String start = null;
String end = null;
int index = 0;
index = html.indexOf("
", index) + 1);
html = start + "
" + end;
return html;
}
}
catch (java.io.FileNotFoundException fileNotFoundEx)
{
return "Unable to open or create file to save graphics output";
}
catch (java.rmi.RemoteException remoteEx)
{
remoteEx.printStackTrace();
return remoteEx.toString();
}
catch (java.io.IOException ioEx)
{
ioEx.printStackTrace();
return ioEx.toString();
}
return "run() failed to return a valid report in this format";
}
// sn_dg_prm_smpl_runreport_P3_start_0
public Option[] getDefaultRunOptions(int reportType, Option[] options)
{
// sn_dg_prm_smpl_runreport_P3_end_0
if (options != null)
{
//check for mandatory options
for (int i = 0; i < options.length; i++)
{
//ouputFormat
if (options[i] instanceof RunOptionStringArray)
{
RunOptionStringArray tmpOption =
(RunOptionStringArray)options[i];
if (tmpOption.getName() == RunOptionEnum.prompt)
{
return options;
}
}
}
RunOptionStringArray outputFormat = new RunOptionStringArray();
outputFormat.setName(RunOptionEnum.outputFormat);
outputFormat.setValue(setFormatByType(reportType));
Option[] newOptions = new Option[options.length + 2];
for (int i = 0; i < options.length; i++)
{
newOptions[i] = options[i];
}
newOptions[options.length + 1] = outputFormat;
return newOptions;
}
else
{
// sn_dg_prm_smpl_runreport_P3_start_1
Option execReportRunOptions[] = new Option[6];
RunOptionBoolean saveOutputRunOption = new RunOptionBoolean();
RunOptionStringArray outputFormat = new RunOptionStringArray();
RunOptionBoolean promptFlag = new RunOptionBoolean();
AsynchOptionBoolean includePrimaryRequest = new AsynchOptionBoolean();
//Set the option for saving the output to false
saveOutputRunOption.setName(RunOptionEnum.saveOutput);
saveOutputRunOption.setValue(false);
//What format do we want the report in: PDF, HTML, or XML?
outputFormat.setName(RunOptionEnum.outputFormat);
String[] reportFormat = null;
reportFormat = setFormatByType(reportType);
outputFormat.setValue(reportFormat);
//Set the report not to prompt as we pass the parameter (if any)
promptFlag.setName(RunOptionEnum.prompt);
promptFlag.setValue(false);
//Set the option to always have the primaryRequest in the response
includePrimaryRequest.setName(
AsynchOptionEnum.alwaysIncludePrimaryRequest);
includePrimaryRequest.setValue(true);
// sn_dg_prm_smpl_runreport_P3_end_1
// AsynchOptionInt primaryWaitThreshold = new AsynchOptionInt();
// AsynchOptionInt secondaryWaitThreshold = new AsynchOptionInt();
// primaryWaitThreshold.setName(AsynchOptionEnum.primaryWaitThreshold);
// primaryWaitThreshold.setValue(1);
// secondaryWaitThreshold.setName(AsynchOptionEnum.secondaryWaitThreshold);
// secondaryWaitThreshold.setValue(1);
// Fill the array with the rest of the run options.
// sn_dg_prm_smpl_runreport_P3_start_2
execReportRunOptions[0] = saveOutputRunOption;
execReportRunOptions[1] = outputFormat;
execReportRunOptions[2] = promptFlag;
execReportRunOptions[3] = includePrimaryRequest;
// sn_dg_prm_smpl_runreport_P3_end_2
// execReportRunOptions[4] = primaryWaitThreshold;
// execReportRunOptions[5] = secondaryWaitThreshold;
// sn_dg_prm_smpl_runreport_P3_start_3
return execReportRunOptions;
// sn_dg_prm_smpl_runreport_P3_end_3
}
}
public Option[] getBurstRunOptions(BaseClassWrapper report, int reportType, Option[] options)
{
if (options != null)
{
//check for mandatory options
for (int i = 0; i < options.length; i++)
{
//ouputFormat
if (options[i] instanceof RunOptionStringArray)
{
RunOptionStringArray tmpOption =
(RunOptionStringArray)options[i];
if (tmpOption.getName() == RunOptionEnum.prompt)
{
return options;
}
}
}
RunOptionStringArray outputFormat = new RunOptionStringArray();
outputFormat.setName(RunOptionEnum.outputFormat);
outputFormat.setValue(setFormatByType(reportType));
Option[] newOptions = new Option[options.length + 2];
for (int i = 0; i < options.length; i++)
{
newOptions[i] = options[i];
}
newOptions[options.length + 1] = outputFormat;
return newOptions;
}
else
{
Option execReportRunOptions[] = new Option[8];
RunOptionBoolean saveOutputRunOption = new RunOptionBoolean();
RunOptionBoolean burstRunOption = new RunOptionBoolean();
RunOptionBoolean sendByEmailRunOption = new RunOptionBoolean();
DeliveryOptionString emailSubjectRunOption = new DeliveryOptionString();
RunOptionBoolean emailAsAttachmentRunOption = new RunOptionBoolean();
RunOptionStringArray outputFormat = new RunOptionStringArray();
RunOptionBoolean promptFlag = new RunOptionBoolean();
AsynchOptionBoolean includePrimaryRequest = new AsynchOptionBoolean();
//Set the option for saving the output to false
saveOutputRunOption.setName(RunOptionEnum.saveOutput);
saveOutputRunOption.setValue(false);
// Set the option for burst the report to true
burstRunOption.setName(RunOptionEnum.burst);
burstRunOption.setValue(true);
// Set the option for send by email to true
sendByEmailRunOption.setName(RunOptionEnum.email);
sendByEmailRunOption.setValue(true);
// Specifies the subject line of the emailed output
emailSubjectRunOption.setName(DeliveryOptionEnum.subject);
emailSubjectRunOption.setValue("Report: " + report.toString());
// Set the option for an email attachment to true
emailAsAttachmentRunOption.setName(RunOptionEnum.emailAsAttachment);
emailAsAttachmentRunOption.setValue(true);
// What format do we want the report in: PDF, HTML, or XML?
outputFormat.setName(RunOptionEnum.outputFormat);
String[] reportFormat = null;
reportFormat = setFormatByType(reportType);
outputFormat.setValue(reportFormat);
// Set the report not to prompt as we pass the parameter (if any)
promptFlag.setName(RunOptionEnum.prompt);
promptFlag.setValue(false);
//Set the option to always have the primaryRequest in the response
includePrimaryRequest.setName(
AsynchOptionEnum.alwaysIncludePrimaryRequest);
includePrimaryRequest.setValue(true);
// AsynchOptionInt primaryWaitThreshold = new AsynchOptionInt();
// AsynchOptionInt secondaryWaitThreshold = new AsynchOptionInt();
// primaryWaitThreshold.setName(AsynchOptionEnum.primaryWaitThreshold);
// primaryWaitThreshold.setValue(1);
// secondaryWaitThreshold.setName(AsynchOptionEnum.secondaryWaitThreshold);
// secondaryWaitThreshold.setValue(1);
// Fill the array with the rest of the run options.
execReportRunOptions[0] = saveOutputRunOption;
execReportRunOptions[1] = burstRunOption;
execReportRunOptions[2] = sendByEmailRunOption;
execReportRunOptions[3] = emailSubjectRunOption;
execReportRunOptions[4] = emailAsAttachmentRunOption;
execReportRunOptions[5] = outputFormat;
execReportRunOptions[6] = promptFlag;
execReportRunOptions[7] = includePrimaryRequest;
return execReportRunOptions;
}
}
public String nextPage(BaseClassWrapper report, int reportType)
throws java.rmi.RemoteException
{
return getNextPage(my_connection, my_rsr, report, reportType);
}
/**
* Next Page of a Report
*
* @param connection Specifies the object that provides the connection to
* the server.
*
* @param rsr AsynchReply from previous request in conversation
*
* @param report report being run
*
* @param reportType output format for report
*
*/
public String getNextPage(
CRNConnect connection,
AsynchReply rsr,
BaseClassWrapper report,
int reportType)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return null;
}
// sn_dg_sdk_method_reportService_nextPage_start_1
rsr =
connection.getReportService().nextPage(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
// sn_dg_sdk_method_reportService_nextPage_end_1
if (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
// sn_dg_sdk_method_reportService_wait_start_1
while (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
rsr =
connection.getReportService().wait(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
// sn_dg_sdk_method_reportService_wait_end_1
rsr =
connection.getReportService().getOutput(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
my_rsr = rsr;
return textOrBinaryOutput(
connection,
rsr,
report.toString(),
reportType);
}
public String previousPage(BaseClassWrapper report, int reportType)
throws java.rmi.RemoteException
{
return getPreviousPage(my_connection, my_rsr, report, reportType);
}
/**
* Previous Page of a Report
*
* @param connection Specifies the object that provides the connection to
* the server.
*
* @param rsr AsynchReply from previous request in conversation
*
* @param report report being run
*
* @param reportType output format for report
*
*/
public String getPreviousPage(
CRNConnect connection,
AsynchReply rsr,
BaseClassWrapper report,
int reportType)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return "Invalid parameters passed to getPreviousPage()";
}
// sn_dg_sdk_method_reportService_previousPage_start_1
rsr =
connection.getReportService().previousPage(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
// sn_dg_sdk_method_reportService_previousPage_end_1
if (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
while (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
rsr =
connection.getReportService().wait(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
rsr =
connection.getReportService().getOutput(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
my_rsr = rsr;
return textOrBinaryOutput(
connection,
rsr,
report.toString(),
reportType);
}
public String firstPage(BaseClassWrapper report, int reportType)
throws java.rmi.RemoteException
{
return getFirstPage(my_connection, my_rsr, report, reportType);
}
/**
* First Page of a Report
*
* @param connection Specifies the object that provides the connection to
* the server.
*
* @param rsr AsynchReply from previous request in conversation
*
* @param report report being run
*
* @param reportType output format for report
*
*/
public String getFirstPage(
CRNConnect connection,
AsynchReply rsr,
BaseClassWrapper report,
int reportType)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return "Invalid parameters passed to getFirstPage()";
}
// sn_dg_sdk_method_reportService_firstPage_start_1
rsr =
connection.getReportService().firstPage(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
// sn_dg_sdk_method_reportService_firstPage_end_1
if (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
while (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
rsr =
connection.getReportService().wait(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
// sn_dg_sdk_method_reportService_getOutput_start_1
rsr =
connection.getReportService().getOutput(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
// sn_dg_sdk_method_reportService_getOutput_end_1
}
my_rsr = rsr;
return textOrBinaryOutput(
connection,
rsr,
report.toString(),
reportType);
}
public String lastPage(BaseClassWrapper report, int reportType)
throws java.rmi.RemoteException
{
return getLastPage(my_connection, my_rsr, report, reportType);
}
/**
* Last Page of a Report
*
* @param connection Specifies the object that provides the connection to
* the server.
*
* @param rsr AsynchReply from previous request in conversation
*
* @param report report being run
*
* @param reportType output format for report
*
*/
public String getLastPage(
CRNConnect connection,
AsynchReply rsr,
BaseClassWrapper report,
int reportType)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return "Invalid parameters passed to getLastPage()";
}
// sn_dg_sdk_method_reportService_lastPage_start_1
rsr =
connection.getReportService().lastPage(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
// sn_dg_sdk_method_reportService_lastPage_end_1
if (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
while (rsr.getStatus() != AsynchReplyStatusEnum.complete)
{
rsr =
connection.getReportService().wait(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
rsr =
connection.getReportService().getOutput(
rsr.getPrimaryRequest(),
new ParameterValue[] {},
new Option[] {});
}
my_rsr = rsr;
return textOrBinaryOutput(
connection,
rsr,
report.toString(),
reportType);
}
public boolean hasNextPage() throws java.rmi.RemoteException
{
return hasNextPage(my_connection, my_rsr);
}
/**
*
*
*
*/
public boolean hasNextPage(CRNConnect connection, AsynchReply rsr)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return false;
}
int numSecondaryRequests = rsr.getSecondaryRequests().length;
for (int i = 0; i < numSecondaryRequests; i++)
{
if ((rsr.getSecondaryRequests()[i].getName().toString())
.compareTo("nextPage")
== 0)
{
return true;
}
}
return false;
}
public boolean hasPreviousPage() throws java.rmi.RemoteException
{
return this.hasPrevioustPage(my_connection, my_rsr);
}
/**
*
*
*
*/
public boolean hasPrevioustPage(CRNConnect connection, AsynchReply rsr)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return false;
}
int numSecondaryRequests = rsr.getSecondaryRequests().length;
for (int i = 0; i < numSecondaryRequests; i++)
{
if ((rsr.getSecondaryRequests()[i].getName().toString())
.compareTo("previousPage")
== 0)
{
return true;
}
}
return false;
}
public boolean hasFirstPage() throws java.rmi.RemoteException
{
return hasFirstPage(my_connection, my_rsr);
}
/**
*
*
*
*/
public boolean hasFirstPage(CRNConnect connection, AsynchReply rsr)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return false;
}
int numSecondaryRequests = rsr.getSecondaryRequests().length;
for (int i = 0; i < numSecondaryRequests; i++)
{
if ((rsr.getSecondaryRequests()[i].getName().toString())
.compareTo("firstPage")
== 0)
{
return true;
}
}
return false;
}
public boolean hasLastPage() throws java.rmi.RemoteException
{
return hasLastPage(my_connection, my_rsr);
}
/**
*
*
*
*/
public boolean hasLastPage(CRNConnect connection, AsynchReply rsr)
throws java.rmi.RemoteException
{
if ((connection == null) || (rsr == null))
{
return false;
}
int numSecondaryRequests = rsr.getSecondaryRequests().length;
for (int i = 0; i < numSecondaryRequests; i++)
{
if ((rsr.getSecondaryRequests()[i].getName().toString())
.compareTo("lastPage")
== 0)
{
return true;
}
}
return false;
}
public String[] setFormatByType(int fileType)
{
switch (fileType)
{
case REP_HTML :
return (new String[] { "HTML" });
case REP_XML :
return (new String[] { "XML" });
case REP_HTML_FRAG :
return new String[] { "HTMLFragment" };
case REP_MHT :
return new String[] { "MHT" };
case REP_XLWA :
return new String[] { "XLWA" };
case REP_PDF :
return (new String[] { "PDF" });
case REP_CSV :
return (new String[] { "CSV" });
default :
System.out.println("Incorrect report type passed.");
return null;
}
}
public String setFilenameByType(
String filePath,
String reportName,
int fileType)
{
switch (fileType)
{
case REP_HTML :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.html";
case REP_XML :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.xml";
case REP_PDF :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.pdf";
case REP_CSV :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.csv";
case REP_HTML_FRAG :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.html";
case REP_MHT :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.mht";
case REP_XLWA :
return filePath
+ System.getProperty("file.separator")
+ reportName
+ ++tmpFileCounter
+ "_output.xls";
default :
System.out.println("Incorrect report type passed");
return null;
}
}
public File getNewTempFile(
File oldTempFile,
String reportName,
int fileType)
{
File newTempFile = null;
if (oldTempFile != null)
{
oldTempFile.delete();
}
newTempFile =
new File(
setFilenameByType(
my_connection.getDefaultSavePath(),
reportName,
fileType));
return newTempFile;
}
}