<%-- * Licensed Materials - Property of IBM * * 5724-U18 * * (C) COPYRIGHT IBM CORP. 2006, 2017 All Rights Reserved. * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with * IBM Corp. --%><%-- This JSP is the handler for Result Set Portlet component. It provides user interface for the portlet and handling of events Events fire by this component are; - Open Record through unqiue id - Filter expand/close - Filter - Clear Filter - Change Graph Type - Change View By Attribute --%><%@ include file="../common/simpleheader.jsp" %><%@page import="com.ibm.json.java.JSONArray" %><%@page import="psdi.webclient.beans.startcntr.ResultSetGraph" %><%@page import="psdi.webclient.beans.startcntr.ChartData" %><%@page import="psdi.webclient.beans.startcntr.BarChartData" %><%@page import="psdi.webclient.beans.startcntr.BarChartData.BarChartItem" %><%@page import="psdi.webclient.beans.startcntr.PieChartData" %><%@page import="psdi.webclient.beans.startcntr.PieChartData.PieChartItem" %><% String layoutId = component.getProperty("layoutid"); ResultSetPortlet portletControl = (ResultSetPortlet)control; PortletStateImpl portletStateManager = portletControl.getStateManager(); try { //If the portlet has never been loaded call this, once its loaded we do not clear the flag if(portletStateManager.isPortletNotLoaded(component)) { %><%@ include file="portletloader.jsp" %><% } else { synchronized (portletControl.getAppBean().getPortletLoadingSync()) { String methodName = "makeChart" + id.replace('-','_'); String labels[] = portletControl.getLabels(); String openRecordlbl = wcs.getMessage("startcntr","openrecord"); String sortLabel = wcs.getMessage("startcntr","sortlbl"); String precedeGraph = "false"; String chartName = "portletchart_"+layoutId; String servPath = wcs.getMaximoRequestContextURL(); boolean viewChanged = portletControl.hasViewChanged(); boolean errorCondition = portletControl.getErrorCondition(); boolean filterToggled = portletStateManager.isFilterToggled(); boolean stateChanged = portletStateManager.isPortletStateChanged(); boolean isBidiEnabled = BidiUtils.isBidiEnabled(); boolean hideNonPersistPortletFilter=Boolean.valueOf(WebClientRuntime.getWebClientProperty("webclient.hideNonPersistPortletFilter","false")).booleanValue(); // 12-14163 - Hide the numeric labels that overflow from the pie chart. String chartstyle = "cursor:pointer;overflow:hidden"; //if just view changed or filter was toggled, then don't re render as there is no need to redraw //but this flag had to be turned on when these events were fired so that jsp could be hit if((viewChanged || filterToggled || stateChanged) && !errorCondition) portletControl.setChangedFlag(false); if (errorCondition) portletControl.setErrorCondition(false); if(session.getAttribute("precedegraph"+layoutId) != null) precedeGraph = (String)session.getAttribute("precedegraph"+layoutId); MboSetData data = portletControl.getResultSet(); boolean hideFilter = !Boolean.valueOf(portletControl.isFilterOpen()); boolean hideHeadings = false; hideHeadings = ((data == null) || (data.getMboDataCount() == 0)) && hideFilter; if((portletStateManager.wasPortletLoadCalled()) || (portletStateManager.isPortletLoaded() && component.hasChanged() && !stateChanged)) { List graphData = null; Properties graphDetails = null; String graphErrorMsg = null; portletControl.setUpDefaults(); String conditionAttribute = portletControl.getConditionAttribute(); String[] groupByAttribute = portletControl.getGroupByAttribute(); String keyAttribute = portletControl.getKeyColumn(); Vector attributes = portletControl.getResultSetAttributes(); int noOfRecords = portletControl.getNoOfRecords(); String rsApp = portletControl.getAppName(); String column = component.getProperty("columnnum"); String errorMsg = portletControl.errorInPortlet(); MboSetInfo rInfo = null; MboSetInfo cInfo = null; if (isBidiEnabled) { rInfo = portletControl.getResultMboSetInfo(); cInfo = portletControl.getConfigMboSetInfo(); } int iStart = Integer.parseInt(component.getProperty("start")); int rowsToDisplay = Integer.parseInt(component.getProperty("rowstodisplay")); if(rowsToDisplay == 0) rowsToDisplay = 10; int iEnd = iStart + rowsToDisplay; String sortType = component.getProperty("sorttype"); String sortAttribute = component.getProperty("sortattribute"); String otherEvents = "onmouseout=\"return noStatus();\" "+ "onfocus=\"return noStatus();\" "+ "onmouseover=\"return noStatus();\" "; if(data == null || data.getMboDataCount()==0) { graphData = null; precedeGraph = "false"; } else { // get graph information only if the current view is chart if( (precedeGraph.equals("true") || component.getProperty("showchart").equals("true") || portletStateManager.wasPortletLoadCalled() ) && groupByAttribute!=null) { graphData = portletControl.generateGraphData(); graphErrorMsg = portletControl.getGraphError(); String bAlign = ""; if (isBidiEnabled && rInfo != null) { if(graphData!=null) { for(int i = 0; i < graphData.size(); i++) { Hashtable htData = (Hashtable)graphData.get(i); String val = BidiUtils.applyBidiAttributes(rInfo,htData.get("attr").toString(),htData.get("value").toString(),langcode); htData.put("value", val); if (i == 0) bAlign = BidiUtils.isLTRExpression(BidiUtils.getMboComplexExpressionType(rInfo,htData.get("attr").toString()))? "left" : ""; } } } graphDetails = portletControl.getGraphDetails(); graphDetails.setProperty("langcode", langcode); if ((isBidiEnabled && cInfo != null) || ("RTL".equals(BidiUtils.getLayoutOrientation(langcode)))) { String attr = BidiUtils.enforceBidiDirection(graphDetails.getProperty("attributename"), BidiUtils.getMboTextDirection(cInfo,graphDetails.getProperty("attribute"),true)); graphDetails.setProperty("attributename", attr); graphDetails.setProperty("align", bAlign); } } } if(precedeGraph.equals("true") && (graphDetails== null || graphDetails.isEmpty())) { precedeGraph = "false"; session.setAttribute("precedegraph"+layoutId,"false"); } holderId="portletbody_"+layoutId; %> <%="
<% if(graphData != null) { ResultSetGraph rsGraph = new ResultSetGraph(graphData, graphDetails, control.getWebClientSession()); ChartData chartData = rsGraph.makeChartData(); %> <%-- portletinternalheader --%> <%-- portletinternalheader end --%> <% if(!portletControl.queryExists()) {//if query doesn't exist then display error message %> <% } else if(attributes.isEmpty()) { %> <%@ include file="portletnotsetupmsg.jsp" %> <% } else if (errorMsg!=null) { %> <% } else { if (USERAGENT.equals("IE")) chartstyle = chartstyle+";height: 400px"; else chartstyle = chartstyle+";height: 85%"; %> <%-- rsgraph --%> <% if(graphData != null && column.equals("1")) { %> <% } %> <% if(graphData != null && column.equals("0")) { %> <% } %> <% }//else %> <% }//if graphData is not null if(errorMsg!=null) { %> <%= labels[14] %>
<%=errorMsg %> <% } if(graphErrorMsg!=null) { %>
<%=graphErrorMsg %>
><%=labels[4] %> <% } %>
<%-- end rsgraph --%> <%-- begin rsdata --%>
<% if(data != null) { %> <% //display all column headings for(int i = 0;i < attributes.size(); i++) { String[] arrColumn = (String[])attributes.elementAt(i); //check if sorting is on then send 0 String sortField = arrColumn[0]; int sortIndex = i; String bAlign = isBidiEnabled && BidiUtils.isLTRExpression(BidiUtils.getMboComplexExpressionType(rInfo,arrColumn[0])) ? "style='text-align: left;'" : ""; %> <% }/*end for*/ %> <% if(data != null) { %> <% //display all column headings ArrayList nonPersistentColumns = portletControl.getNonPersistentColumns(); String[] arrColumn = null; for(int i = 0;i < attributes.size(); i++) { arrColumn = (String[])attributes.elementAt(i); String bAlign = isBidiEnabled && BidiUtils.isLTRExpression(BidiUtils.getMboComplexExpressionType(rInfo,arrColumn[0])) ? "style='text-align: left;'" : ""; if (BidiUtils.getLayoutOrientation(langcode).equals("RTL")) bAlign="style='text-align: right;'"; %> <% }/*end for*/ %> <% if(data.getMboDataCount() == 0) { %> <% } }//end if if(data != null) { for(int i = 0; i < data.getMboDataCount(); i++) { MboData mboData = data.getMboData(i); //Get Mbo data current row String style = ""; if(!conditionAttribute.equals("")) { MboValueData conditionValue = mboData.getMboValueData(conditionAttribute); style = portletControl.compareValues(conditionValue); //decide on color } %> <% for(int j = 0;j < attributes.size(); j++) { String[] arrColumn = (String[])attributes.elementAt(j);//get column details MboValueData keyValue = mboData.getMboValueData(keyAttribute); //Get data of key attribute if(keyAttribute!=null) keyValue = mboData.getMboValueData(keyAttribute); //Get data of key attribute MboValueData displayData = mboData.getMboValueData(arrColumn[0]);//get data to display String appToGo = ""; if(rsApp.equalsIgnoreCase("WORKVIEW")) appToGo = mboData.getMboValueData("app").getData().toLowerCase(); else appToGo = rsApp.toLowerCase(); String bAlign = isBidiEnabled && BidiUtils.isLTRExpression(BidiUtils.getMboComplexExpressionType(rInfo,arrColumn[0]))? "align='left'" : ""; %> <% }//end for %> <% }//end for }//end if //If There are more records to display, display scrolling links if(noOfRecords > 0 ) { %> <% }//if noOfRecords if(data == null && !attributes.isEmpty()) { %> <% } }//if showing result set if(attributes.isEmpty()) { %> <%@ include file="portletnotsetupmsg.jsp" %> <% } if(errorMsg!=null) { %> <% } %>
>   <% if(arrColumn[0].indexOf(".") != -1) { %> <% } else { %> > <% } String finalData = !(isBidiEnabled && cInfo != null)? arrColumn[1] : BidiUtils.enforceBidiDirection(arrColumn[1], BidiUtils.getMboTextDirection(cInfo,"DESCRIPTION",true)); out.print(WebClientRuntime.makesafevalue(finalData)); %> <% if(sortAttribute.equalsIgnoreCase(sortField)){%> <%@ include file="portletsort.jsp" %> <% } %>
>   <% boolean hideFilterForNP = nonPersistentColumns!=null && nonPersistentColumns.contains(arrColumn[0]) && hideNonPersistPortletFilter; if(/*arrColumn[0].indexOf(".") == -1 &&*/ !hideFilterForNP) { String bidiAttrs = isBidiEnabled? BidiUtils.buildTagAttribute(portletControl.getQbeSetting(arrColumn[0]), BidiUtils.getMboTextDirection(rInfo,arrColumn[0],true),"",true) : ""; %> tabindex="0" title="<%= WebClientRuntime.makesafevalue(arrColumn[1]) %>" size="5" maxlength="254"/> <% } else { %> <% } %>
 <%= wcs.getMessage("jspmessages","tablenorowsmessage") %>
> " onkeypress="if(hasKeyCode(event,'KEYCODE_ENTER')) {sendEvent('openrecord','<%= id %>','<%= appToGo%>-<%= keyValue.getDataAsLong() %>');}" href="javascript:sendEvent('openrecord','<%=id %>','<%= appToGo%>-<%= keyValue.getDataAsLong() %>')" <% }%> <%=otherEvents %>> ><% if(displayData!=null) { String finalData = !(isBidiEnabled && rInfo != null)? displayData.getData() : BidiUtils.applyBidiAttributes(rInfo,arrColumn[0],displayData.getData(),langcode); finalData = WebClientRuntime.makesafevalue(finalData); boolean shortenText = Boolean.valueOf(WebClientRuntime.getWebClientProperty("webclient.shortenportlettext","true")).booleanValue(); if (shortenText) { finalData=HTML.decode(finalData); finalData = WebClientRuntime.shortenString(finalData,35); finalData=HTML.encodeTolerant(finalData); } int wraplength = Integer.parseInt(WebClientRuntime.getWebClientProperty("webclient.portletwraplength", "0")); if(wraplength > 0) { finalData=HTML.decode(finalData); finalData=WebClientRuntime.wrapText(finalData,"
",wraplength); finalData=HTML.encodeTolerant(finalData); } %><%=finalData%><% } %>
<%=labels[11] %>
<%= labels[14] %>
<%=errorMsg %>
<%="]]>"%>
<% portletStateManager.setStateLoaded(); if( portletControl.hasChanged()) { //works for both refresh and sort portletControl.setChangedFlag(false); } }//if needs render else { //Static events will be handled here. No data is fetched only div switching is done, but this follows component //properties being updated. if(viewChanged) { %> ><%=" <%="]]>"%> <% }//view changed if(filterToggled) { %> ><%=" <%="]]>"%> <% portletStateManager.setFilterToggled(false); } // /If the portlet state is changed then fire the javascript to toggle its state if(portletStateManager.isPortletStateChanged()) { %> ><%=" <%="]]>"%> <% portletStateManager.setPortletStateChanged(false); } } } } } catch(Throwable e) { if(wcs.getDebugLevel() > 0) { e.printStackTrace(); } %><%=" <%="]]>"%><% } %><%@ include file="../common/componentfooter.jsp" %>