Integration with Other Applications > Info*Engine Adapters > JDBC Adapter Guide > JDBC Webject Library > Send-Bulk-Stream
  
Send-Bulk-Stream
Description
Retrieves a file from the file system local to the adapter and streams it back to the browser.
Syntax
<ie:webject name="Send-Bulk-Stream" type="ACT">
<ie:param name="BLOB_COUNT" data="number_of_BLOBs"/>
<ie:param name="CLASS" data="tablename"/>
<ie:param name="CONNECTION_ATTEMPT_INTERVAL" data="interval"/>
<ie:param name="CONNECTION_ATTEMPTS" data="attempts"/>
<ie:param name="DBUSER" data="dbuser_name"/>
<ie:param name="FILENAME" data="file_name"/>
<ie:param name="GROUP_OUT" data="group_out"/>
<ie:param name="INSTANCE" data="instance_name"/>
<ie:param name="MIMETYPE" data="mimetype"/>
<ie:param name="PASSWD" data="dbpassword"/>
<ie:param name="WHERE" data="where_clause"/>
</ie:webject>
Parameters
Required
Select
Optional
FILENAME
CLASS
BLOB_COUNT
INSTANCE
WHERE
CONNECTION_ATTEMPTS
MIMETYPE
CONNECTION_ATTEMPT_INTERVAL
DBUSER
GROUP_OUT
PASSWD
BLOB_COUNT
Specifies how many BLOBs to deliver to the webject. Specifying a value of 0 results in no BLOBs being delivered. Specifying a value of more than 0 results in up to that specified number of BLOBs being delivered. For example, if this parameter is specified with a value of 5, then no more than five BLOBs are delivered to the webject.
The default behavior for this parameter is that all remaining BLOBs are delivered to the webject. This parameter is optional.
CLASS
Identifies the name of the table containing the bulk attribute being returned. If the value specified for FILENAME is not placed in single quotes, then this parameter must be specified.
CONNECTION_ATTEMPTS
Defines the maximum number of times to attempt establishing a connection to an adapter before returning an error. The default value is 1. This parameter is optional.
If multiple INSTANCE parameter values are specified, the value of CONNECTION_ATTEMPTS defines the maximum number of times to iterate through the list of adapter instances.
CONNECTION_ATTEMPT_INTERVAL
Defines the amount of time, in seconds, to delay between connection attempts. The default value is 60 seconds. This parameter is optional.
If multiple INSTANCE parameter values are specified, the value of CONNECTION_ATTEMPT_INTERVAL defines the number of seconds to wait between the attempts to iterate through the entire list of adapter instances.
DBUSER
Specifies the name to use when logging in to the data repository. If this parameter is specified in this webject, the webject value takes precedence over any value specified in the credentials mapping settings or in the adapter LDAP entry. If this parameter is not specified here, it must be specified in the credentials mapping settings or in the adapter LDAP entry. For more information about credentials mapping, see the section Credentials Mapping.
FILENAME
Specifies the name of the file to return. If placed in single quotes, the string typed here is used as the fully-qualified name for the file data. If no quotes are used, the string represents the attribute that contains the file path. If the database needs to be queried, then CLASS and WHERE parameters are required. This parameter is required.
GROUP_OUT
Identifies the group returned by the webject. This parameter is optional.
INSTANCE
Specifies the name of the adapter that executes the webject. Adapter names are defined when the adapter is configured for use in your Info*Engine environment. This parameter is required.
In order to provide the ability to connect to other adapters if a specific adapter is not available, this parameter can be multi-valued. Info*Engine attempts to connect to the adapters in the order given. If the first adapter specified is not available, the next adapter listed is tried, and so on, until a connection is made. If a connection cannot be established with any listed adapter, an error is returned.
In conjunction with this parameter, you can include two other parameters: CONNECTION_ATTEMPTS and CONNECTION_ATTEMPT_INTERVAL.
MIMETYPE
Specifies the name of the attribute that has a MIME type. If placed in single quotes, the string typed here is then used as the MIME type for the bulk data, otherwise this value represents a column in the table. This parameter is required.
PASSWD
Specifies the password to use when logging in to the data repository. If this parameter is specified in this webject, the webject value takes precedence over any value specified in the credentials mapping settings or in the adapter LDAP entry. If this parameter is not specified here, it must be specified in the credentials mapping settings or in the adapter LDAP entry. For more information about credentials mapping, see the section Credentials Mapping.
WHERE
Specifies search criteria for the database object containing bulk data to return. The value for this parameter is specified as an SQL-formatted where clause. If the value specified for FILENAME is not placed in single quotes, then this parameter is required.
Example
The following example documents SendBulkStream.jsp located in the Windchill installation directory:
codebase/infoengine/jsp/examples/JDBCAdapter/examples
This example uses the JSP useBean directive in order to display the image. To understand this example you must be familiar with the JSP useBean directive and its use. For more information about the API methods called within the useBean directive, see the API documentation:
<Windchill>/codebase/infoengine/docs/apidocs
In this example, the DownloadBulk.jsp file, located in the same examples directory, provides the input form necessary for providing the appropriate parameter values for this example and should be run to execute SendBulkStream.jsp.
The input form contains the following fields:
The JDBC Adapter Instance field should specify the INSTANCE parameter value appropriate to your installation.
The File Name field specifies the full path of the file that contains the bulk data.
The Mime Type field specifies the MIME type of the file.
When the form is submitted, SendBulkStream.jsp is called. The data specified on the form provides the parameter values for the webjects.
<%@page language="java" session="false"
errorPage="IEError.jsp"%>

<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core"
prefix="ie" %>

<html>
<head>
<title> Bulk Download</title>
</head>
<BODY>
<H2> Download File</H2>
<form method="POST" action="SendBulkStream.jsp" >
<TABLE>
<tr>
<td align=right>
<B>JDBC Adapter Instance: </B>
</td>
<td>
<INPUT name="instance" type="text" size=50>
</td>
</tr>
<tr>
<td align=right>
<B>File Name: </B>
</td>
<td>
<INPUT name="filename" type="text" size=50>
</td>
</tr>
<tr>
<td align=right>
<B>MIME Type: </B>
</td>
<td>
<INPUT name="mimetype" type="text" size=50>
</td>
</tr>
<tr>
<td align="right">
<b>Name:</b>
</td>
<td>
<input name="name" type="text" size="50">
</td>
</tr>
<tr>
<td>
</td>
<td align=left>
<INPUT name="submit" type="submit" value="Retrieve" id=button>
</td>
</tr>
</table>
/form>
</body>
</html>
The SendBulkStream.jsp file that gets executed upon submitting the above form is as follows:
<%@page language="java" errorPage="IEError.jsp"
import="java.util.*,com.infoengine.object.factory.*,com.infoengine.SAK.*,
com.infoengine.object.*" %>

<%@ taglib uri="http://www.ptc.com/infoengine/taglib/core"
prefix="ie"%>
<ie:getService varName="vdb"/>
<jsp:useBean id="qa" class="com.infoengine.SAK.ActionWebject">
<% out.clearBuffer();
qa.setService(vdb);
qa.setName("Send-Bulk-Stream");
boolean user_input_file_name = true;
boolean user_input_mime_type = false;

String file_name =
request.getParameter("filename");if(file_name != null &&
!file_name.equals("")){
file_name = file_name.trim();

if(!(file_name.startsWith("'") && file_name.endsWith("'"))){
user_input_file_name = false;}
}else{
file_name ="FILENAME"; user_input_file_name =
false;}

/* Fetch the MIME type from the request, so it could be used
for the response stream */

String mime_type = request.getParameter("mimetype");
if(mime_type != null && !mime_type.equals("")){
mime_type = mime_type.trim();

if(mime_type.startsWith("'") && mime_type.endsWith("'"))
user_input_mime_type = true;
}else
mime_type = "MIMETYPE";
qa.addParam("INSTANCE",request.getParameter("instance"));
qa.addParam("DBUSER","dbuser_name");
qa.addParam("PASSWD","dbuser_passwd");
if(user_input_mime_type == false || user_input_file_name ==
false)
{
/* No value was input by the user for MIME Type and/or
File Name */
String name = request.getParameter("name");
name = "NAME='" + name + "'";
/* The following webject fetches the values for MIME type
and file name from the database and stores them in group "temp"
*/
%>ie:webject name="Query-Objects" type="OBJ">
<ie:param name="INSTANCE" data="${@FORM[]instance[]}"
default="jdbcAdapter"/>
<ie:param name="CLASS" data="BULKFILE"/>
<%if(user_input_file_name ==
false){%>

<ie:param name="ATTRIBUTE" data="<%=file_name%>"/>
<%}%>
<%if(user_input_mime_type == false){%>
<ie:param name="ATTRIBUTE" data="<%=mime_type%>"/>
<%}%>
<ie:param name="WHERE" data="<%=name%>"/>
<ie:param name="GROUP_OUT" data="temp"/>
</ie:webject><%
/* Fetch the MIME type and/or file name from the group "temp" */
IeGroup ie_group = (vdb.getCollection()).getGroup("temp");
Group group = new Group(ie_group);
Enumeration elements = group.getElements();
Element elem = null;
Att att1 = null, att2 = null;
if(elements.hasMoreElements())
{
elem = (Element)elements.nextElement();
att1 = elem.getAtt(mime_type);
if(user_input_mime_type == false && att1 != null)
{
mime_type = (att1.getValue()).toString();
mime_type = "'" + mime_type + "'";
}
att2 = elem.getAtt(file_name);
if(user_input_file_name == false && att2 != null)
{
file_name = (att2.getValue()).toString();
file_name = "'" + file_name + "'";
}
}
}
qa.addParam("MIMETYPE", mime_type);
qa.addParam("FILENAME", file_name);
qa.addParam("GROUP_OUT","SendBlob");
qa.setOutputStream(response.getWriter());
/* Make sure the single quotes in mime_type do not get passed to setContentType() */
if(!mime_type.equals("") && mime_type != null)

response.setContentType(mime_type.substring(1,
mime_type.length()-1));
qa.invoke();
response.getWriter().close();
%>
</jsp:useBean>