Developing Actuate Information Delivery API applications using Java : Developing Actuate Information Delivery API applications : Executing a report : Using SelectJavaReportPage
 
Using SelectJavaReportPage
SelectJavaReportPage retrieves a specific page from an Actuate BIRT report specifying a page number, a page range, a component, or other search criteria. The following sample application, AcSelectJavaReportPage, selects a single page and saves the result in the specified directory by performing the following tasks:
*Instantiates the Arguments class, passing any command line arguments to the constructor
*Instantiates the ActuateController class, getting a server URL from Arguments, if specified in the command line
*Uses methods defined in the controller class to send a request to select a page using com.actuate.schemas.SelectJavaReportPage, SelectJavaReportPageResponse, ViewParameter, ObjectIdentifier, PageIdentifier, NameValuePair, and ArrayOfNameValuePair classes
*Instantiates the SelectJavaReportPage class and specifies the SelectJavaReportPage operation by performing the following tasks:
*Sets up an ObjectIdentifier object, specifying the name and type of the file to view
*Sets up a PageIdentifier object, specifying the page number to view and the page view mode
*Sets up the references to the ObjectIdentifier and PageIdentifier objects in the SelectJavaReportPage object
*Sets up the view properties used by the BIRT viewer using NameValuePair and ArrayOfNameValuePair classes
The view properties include the following settings:
*SVGFlag
Specifies whether to use Scalable Vector Graphics (SVG), an XML language used to describe two-dimensional graphics, such as vector graphics shapes, images, and text. This flag is used by the chart engine to determine if SVG chart output is supported.
*ContextPath
Specifies a context path relative to the root directory of the web server.
*MasterPage
Determines whether to use the master page, which defines the layout for the pages of a report.
*enableMetaData
Enables the client to retrieve metadata required to communicate with the service.
*displayGroupIcon
Enables the display of group icons for viewing related items.
*displayFilterIcon
Enables the display of filter icons for viewing items using options a user selects.
*viewMode
Specifies whether the report displays in HTML or PDF.
*Makes the remote call to the Actuate SOAP port using proxy.selectJavaReportPage( ), returning a reference to the com.actuate.schemas.SelectJavaReportPageResponse object
*Sets up the download directory using mkdir( )
*Saves the result in the download directory
*To obtain an image on a page in the document, the application performs the following tasks:
*Gets the page reference
*Calls Attachment.getContentData( ) to obtain the page content and sets up a ByteArrayInputStream
*Calls getEmbed( ), passing in the references to ByteArrayInputStream and ActuateControl objects
getEmbed( ) performs the following tasks:
*Sets up an InputStreamReader to iteratively read pattern chunks, line by line, to decode the input stream
*Compiles the generic image file name, specified in a regular expression, into a pattern instance, which allows the application to use a Matcher object to identify an embedded image
*Uses Matcher.find( ) to scan a chunk to locate a sequence matching the specified pattern
*Calls returnId( ) to get the image ID
*Sets up a GetJavaReportEmbededComponent object, specifying the file name, file type, and a name-value pair indicating the image component ID
*Sets the response connection handle, the session ID of the object
*Calls ActuateControl.GetJavaReportEmbededComponent ( ) to get the embedded object
*Saves the Attachment to the download directory
AcSelectJavaReportPage class looks like the following example:
public class AcSelectJavaReportPage {
public static ActuateControl actuateControl;
// download settings
static String filename;
static String downloadDirectory = "download";
static String format = "Reportlet";
static int pageNumber = 1;
static com.actuate.schemas.SelectJavaReportPageResponse
resp=null;
public static void main(String[ ] args)
{
// get command line arguments
Arguments arguments = new Arguments(args);
filename = arguments.getArgument( );
pageNumber = Integer.parseInt(arguments.getOptionalArgument("1"));
downloadDirectory = arguments.getOptionalArgument(downloadDirectory);
 
actuateControl.selectPage(
filename,format,pageNumber,downloadDirectory);
com.actuate.schemas.SelectJavaReportPage
acselectjavarptpage = new
com.actuate.schemas.SelectJavaReportPage( );
com.actuate.schemas.ObjectIdentifier objId =
new ObjectIdentifier( );
objId.setName(filename);
objId.setType("rptdocument");
acselectjavarptpage.setObject(objId);
PageIdentifier pgId = new PageIdentifier( );
pgId.setPageNum(new Long(pageNumber));
pgId.setViewMode(new Integer(1));
acselectjavarptpage.setPage(pgId); acselectjavarptpage.setOutputFormat(format);
acselectjavarptpage.setDownloadEmbedded(
new Boolean(true));
com.actuate.schemas.NameValuePair nvpair =
new com.actuate.schemas.NameValuePair( );
nvpair0.setName("SVGFlag");
nvpair0.setValue("false");
com.actuate.schemas.NameValuePair nvpair1 =
new com.actuate.schemas.NameValuePair( );
nvpair1.setName("ContextPath");
nvpair1.setValue("/");
com.actuate.schemas.NameValuePair nvpair2 =
new com.actuate.schemas.NameValuePair( );
nvpair2.setName("MasterPage");
nvpair2.setValue("true");
com.actuate.schemas.NameValuePair nvpair3 =
new com.actuate.schemas.NameValuePair( );
nvpair3.setName("enableMetaData");
nvpair3.setValue("false");
com.actuate.schemas.NameValuePair nvpair4 =
new com.actuate.schemas.NameValuePair( );
nvpair4.setName("displayGroupIcon");
nvpair4.setValue("false");
com.actuate.schemas.NameValuePair nvpair5 =
new com.actuate.schemas.NameValuePair( );
nvpair5.setName("displayFilterIcon");
nvpair5.setValue("false");
com.actuate.schemas.NameValuePair nvpair6 =
new com.actuate.schemas.NameValuePair();
nvpair6.setName("viewMode");
nvpair6.setValue("1");
com.actuate.schemas.NameValuePair npair[ ] =
{nvpair,nvpair1,nvpair2,nvpair3,
nvpair4,nvpair5,nvpair6};
ArrayOfNameValuePair arr = new ArrayOfNameValuePair( );
arr.setNameValuePair(npair);
acselectjavarptpage.setViewProperties(arr);
resp = actuateControl.proxy.selectJavaReportPage(
acselectjavarptpage);
// Save the result in download directory
new java.io.File(downloadDirectory).mkdir( );
 
String firstAttachmentName =
actuateControl.saveAttachment(resp.getPageRef( ),
downloadDirectory);
com.actuate.schemas.Attachment att = resp.getPageRef( );
 
byte[ ] content = att.getContentData( );
java.io.ByteArrayInputStream ba =
new java.io.ByteArrayInputStream(content);
getembed(ba,actuateControl);
}
catch (Exception e)
{
e.printStackTrace( );
}
 
public static void getembed(
java.io.ByteArrayInputStream ba,
ActuateControl actuateControl) throws Exception {
Charset cs = Charset.forName("UTF-8");
java.io.InputStreamReader isr =
new java.io.InputStreamReader(ba,cs);
Pattern p = Pattern.compile("__imageID=(\\S+\\.jpg)");
java.io.BufferedReader br =
new java.io.BufferedReader(isr);
String chunk = null;
while ((chunk = br.readLine( )) != null) {
Matcher m = p.matcher(chunk);
String image_id = null;
if(m.find( ) ) {
System.out.println("String read :" + chunk);
String tmp = m.group();
image_id = returnId(tmp);
String decoded_image_id =
java.net.URLDecoder.decode(image_id, "UTF-8");
GetJavaReportEmbededComponent jrptComp =
new GetJavaReportEmbededComponent( );
jrptComp.setDownloadEmbedded(new Boolean(true));
ObjectIdentifier jobj = new ObjectIdentifier( );
jobj.setName(filename);
jobj.setType("rptdocument");
jrptComp.setObject(jobj);
com.actuate.schemas.NameValuePair jpair =
new com.actuate.schemas.NameValuePair( );
jpair.setName("compId");
 
jpair.setValue(decoded_image_id);
com.actuate.schemas.NameValuePair njpair[ ] =
{jpair};
ArrayOfNameValuePair jarr =
new ArrayOfNameValuePair( );
jarr.setNameValuePair(njpair);
jrptComp.setComponent(jarr);
actuateControl.setConnectionHandle(
resp.getConnectionHandle( ));
GetJavaReportEmbededComponentResponse jresp =
actuateControl.proxy.getJavaReportEmbededComponent(
jrptComp);
String imageName =
actuateControl.saveAttachment(
jresp.getEmbeddedRef( ), downloadDirectory);
System.out.println( imageName);
}
}
}
public static String returnId (String str){
int startPos;
startPos = str.indexOf("=");
String id = str.substring(startPos + 1);
return id;
}
}