A Menu is typically a jsp page that shows all the published reports and charts. Depending on the options available, a menu may allow the user to choose the format in which the report and/or chart are to be presented. The menus discussed here are analogous to those described in the Menu chapter.
ERES provides an easy-to-use application programming interface (API) that allows users to create and customize menus to show in their servlet/jsp applications. This API is written in 100% Pure Java and can be run on any platform with no or few minimal changes. Any and every part of the menu is customizable using the API.
The main package for ERES Menu API is the quadbase.reportorganizer.MenuAPI package. Associated with this package are five main classes: MenuNode, MenuTableRow, QbMenu, ScheduleJob and Util. The remainder of this chapter will give you an overview of these various classes and their usage. Please note that the complete documentation is located at help/ERESapidocs/index.html.
The jar files for using ERES Menu API are located in the ERES/lib directory. These jar files should already be present in your application's CLASSPATH when you set up ERES.
Currently, you can only use ERES Menu API in a servlet/jsp environment. The servlets/jsps must also run in the same servlet context as ERES server.
This section discusses the usage of ERES Menu API with code examples and contains descriptions of main API classes.
The sections below describe the various steps involved in creating and customizing an ERES Menu:
The first step is to connect to ERES server. After successfully connected to the server, a QbMenu object can be allocated. QbMenu is the main class containing contents for a Menu page.
The ERES server is simply an object that resides in the ServletContext of the web application. Since you will want to put most Java code in your Java bean, you will need to pass the HttpServletRequest and ServletContext objects from the jsp to the bean. The following jsp and bean code illustrates this:
Example jsp (Menu_login.jsp):
<!-- import the bean class -->
<%@page language="java" import="help.examples.Menu.exampleMenuLogin"%>
<!-- include/instantiate the bean -->
<jsp:useBean id="exampleMenuLogin" scope="session" class="help.examples.Menu.exampleMenuLogin" />
<!-- pass the HttpServletRequest and ServletContext objects to the bean -->
<% exampleMenuLogin.processRequest(request, application); %>
where the jsp passes the request (HttpServletRequest) and application (ServletContext) to the Java bean MenuLogin's processRequest method. Next, you will need to implement code in the bean that allocates the QbMenu object from the ServletContext:
Example bean (MenuLogin.java):
public void processRequest(HttpServletRequest request, ServletContext context) throws IOException {
QbMenu qbMenu = new QbMenu(context.getAttribute(QbMenu.QBMENUDATA));
}
where context.getAttribute(QbMenu.QBMENUDATA) is set when ERES server started.
The second step uses the QbMenu object to authenticate the user. This is easy since all security and permission checks are performed by ERES server. If login is successful, you can store the QbMenu object for the session so that for the duration of the session, the user will not have to login again. The following code illustrates this:
boolean loginSuccess = qbMenu.login(userName, password);
if (loginSuccess) {
//store the QbMenu object in session
session.setAttribute("QBMENUOBJ", qbMenu);
}
where "QBMENUOBJ" is the name that you can use later for retrieving the stored QbMenu. This means that after storing the QbMenu in the session, in other jsp pages by doing session.getAttribute("QBMENUOBJ"). The QbMenu.login method returns true only if the user name and password match. If login failed, the user can be prompted again.
![]() | Note |
|---|---|
Login MUST succeed for the |
After authenticating the user, you can get a list of authorized Menu nodes, which contain reports or charts, from the QbMenu. A node is either a project or a folder in ERES Organizer.
MenuNode[] MenuNode = qbMenu.getMenuNodeList(null);
Passing in null to the getMenuNodeList method results in getting all the available Menu nodes. If you pass in a string, the method will return only those nodes items that contain the string.
![]() | Note |
|---|---|
The path for the Menu node will be a complete one, i.e. Project1/Folder1/SubFolder2 |
Once you have retrieved the Menu nodes, the next step is get the node details, namely, the files contained in the node. Conceptually, each item in the node is a row and is represented by the MenuTableRow object. The following code iterates through each file in all nodes:
for (int i = 0; i < MenuNode.length; i++) {
for (int j = 0; j < MenuNode[i].getRowItemCount(); j++) {
MenuTableRow MenuTableRow = MenuNode[i].getMenuTableRowAt(j);
}
}
You can obtain all the information of the file (such as file name, description, whether it is a chart or report etc) using the MenuTableRow class.
The following methods are used to obtain the file details:
String getDescription()
Returns the description for the row item
String getName()
Returns the name for the row item
String getPath()
Returns the path for the row item
ScheduleJob getScheduleJob()
Returns the schedule job information for the row item
ScheduleJob getArchiveJob()
Returns the archive job information for the row item
String getSecurityLevel()
Returns the security level for the row item
String getURL()
Returns the URL for the row item
boolean isArchiveOptionAvail()
Returns whether the archive option is available for the row item
boolean isScheduleOptionAvail()
Returns whether the schedule option is available for the row item
boolean isChart()
Returns whether the row item is a chart
boolean isReport()
Returns whether the row item is a report
boolean isDashboard()
Returns whether the row item is a dashboard
Using the above methods, you can get the various file details.
After getting the file details (see previous section), you can also get all the details for any scheduled or archived jobs for the particular file. This can be done by getting the ScheduleJob object from MenuTableRow.
The following methods are used to obtain any scheduling/archiving information:
long getEndDate()
Returns the ending date for the row item's schedule job. If no end date is specified, -1 is returned
long getStartDate()
Returns the starting date for the row item's schedule job
String getName()
Returns the name of the job for the row item
long getNextExportTime()
Returns the next scheduled export time for the row item
int getParamSetCount()
Returns the number of parameter sets for the row item's schedule/archive job
Object[] getParamSet(int setNumber)
Returns the selected parameter value(s) for the specified parameter set for the row item's schedule/archive job
String[] getParamNames()
Returns the names of all the parameters for the row item
String getReportLocation()
Returns the location of the report (if the row item happens to be a report)
String getChartLocation()
Returns the location of the chart (if the row item happens to be a chart)
String getScheduledFileLocation()
Returns the location of the exported file created by the row item's schedule
String getScheduledFileLocation(int paramIndex)
Returns the location of the exported file, for the specified parameter set, created by the row item's schedule
String getSecurityLevel()
Returns the security level for the row item's schedule
boolean isChart()
Returns whether the row item's job is for a chart
boolean isReadable()
Returns whether the user has permission to the row item's job
boolean isReport()
Returns whether the row item's job is for a report
boolean isArchiveJob()
Returns whether the row item's job is an archived job
boolean isScheduleJob()
Returns whether the row item's job is a scheduled job
int getArchiveFilesCount()
Returns the total number of archived files for the row item
long getArchiveDate(int index)
Returns the date of the specified archived file for the row item
String getArchiveFileLocation(int index)
Returns the location of the specified archive file for the row item
String getArchiveFileLocation(int index, int paramIndex)
Returns the location of the specified archive file, using the specified parameter set, for the row item
You can get the various details for any scheduled/archived jobs for the particular row item by using the above methods.
Depending on your needs and architecture, you can setup the Menu to show the reports and charts in various static formats (such as DHTML, PDF, JPEG, GIF, PNG, etc) or in an interactive applet. You can code your own servlet using the APIs provided in the ERES Reporting API Overview and ERES Charting API Overview chapters to get the templates and export them to the format desired.
ERES also comes with a ready-made servlet that can take different parameters to produce the report and/or chart in the format desired without you having to write any additional servlet code. This servlet is the LookupServlet servlet and is generally in the ERES/servlet context (for example, http://192.168.0.1:8080/ERES/servlet/LookupServlet). For more details on this servlet and the various parameters it requires, please refer to the Designer guide.
Javadoc for the entire API is provided along with ERES. It is located here (Reports and charts) and here (ES functions).
ERES already provides a menu for any user-created reports and/or charts. This menu can be reached by logging into the Organizer and choosing Published Files. In addition to this, ERES also provides an easy-to-use, yet powerful library to create your own menu in your own styles to display any reports and/or charts.
The jsp code discussed in this chapter is also available in the ERES/help/examples/Menu directory (this directory contains both the jsp pages and the css styles). The ERES/WEB-INF/classes/help/examples/Menu directory contains the source and class files for the beans. This example demonstrates the steps given above.
Please note that the Menu API requires a JDK 1.8 or above. The ERES Menu API and jsp pages have been tested with Mozilla (1.3 and above), Firefox (0.91 and above), and Microsoft Internet Explorer (5.x and above) on the Windows NT/2000, Solaris, Linux, AIX, and HP platforms.