Package com.sourcetap.sfa.ui

Source Code of com.sourcetap.sfa.ui.UIReport

/*
*
* Copyright (c) 2004 SourceTap - www.sourcetap.com
*
*  The contents of this file are subject to the SourceTap Public License
* ("License"); You may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.sourcetap.com/license.htm
* Software distributed under the License is distributed on an  "AS IS"  basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
*/

package com.sourcetap.sfa.ui;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilFormatOut;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;
import org.ofbiz.entity.condition.EntityComparisonOperator;
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.entity.condition.EntityExpr;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.model.ModelEntity;
import org.ofbiz.entity.util.EntityListIterator;

import com.sourcetap.sfa.event.EventUtility;
import com.sourcetap.sfa.event.GenericEventProcessor;
import com.sourcetap.sfa.replication.GenericReplicator;
import com.sourcetap.sfa.security.SecurityLinkInfo;
import com.sourcetap.sfa.security.SecurityWrapper;
import com.sourcetap.sfa.util.QueryInfo;
import com.sourcetap.sfa.util.UserInfo;
public class UIReport {
  public static final String module = UIReport.class.getName();
   protected boolean primaryFieldsLoaded = false;
   protected boolean relatedFieldsLoaded = false;
   protected List primaryFields = null;
   protected List relatedFields = null;
   protected String reportId = null;
   protected String sectionId = null;
   protected String partyId = null;
   protected String reportName = null;
   protected String publicFlag = null;
  
   protected List reportFields = null;
   protected List reportCriteria = null;
   protected List reportOrderBy = null;
  
   private List selectFieldLabels = null;
   private List selectFieldNames = null;
   protected GenericDelegator delegator = null;
   protected QueryInfo queryInfo = null;
   protected GenericEventProcessor eventProcessor = null;
  
  public UIReport(GenericDelegator delegator_)
  {
    setDelegator(delegator_);
  }
  
   public UIReport(String reportId_, GenericDelegator delegator_)
   {
     setDelegator(delegator_);
     loadReport(reportId_);
   }
  
   public void loadReport(String reportId_)
   {
     try
    {
      GenericValue reportGV = delegator.findByPrimaryKey("UiReport", UtilMisc.toMap("reportId", reportId_));
      if ( reportGV == null )
        throw new IllegalArgumentException("Unable to find report with ID " + reportId_ );
       
      setReportId(reportId_);
      setSectionId(reportGV.getString("sectionId"));
      setPartyId(reportGV.getString("partyId"));
      setReportName(reportGV.getString("reportName"));
      setPublicFlag(reportGV.getString("publicFlag"));
     
      List reportFieldsGVL = delegator.findByAnd("UiReportField", UtilMisc.toMap("reportId", reportId_), UtilMisc.toList("displayOrder"));
      setReportFields(UIReportField.loadFromGVL(reportFieldsGVL));
     
      List reportCriteriaGVL = delegator.findByAnd("UiReportCriteria", UtilMisc.toMap("reportId", reportId_), null);
      setReportCriteria(UIReportCriteria.loadFromGVL(reportCriteriaGVL));
     
      List reportOrderByGVL = delegator.findByAnd("UiReportOrderBy", UtilMisc.toMap("reportId", reportId_), UtilMisc.toList("sortOrder"));
      setReportOrderBy(UIReportOrderBy.loadFromGVL(reportOrderByGVL));
       
    } catch (GenericEntityException e)
    {
      Debug.logError("Error getting report: " + e.getMessage(), module);
      e.printStackTrace();
    }
   }

   public void saveReport(String partyId, String reportName)
   {
     setPartyId(partyId);
    
     if ( !reportName.equals(getReportName()))
     {
      setReportName(reportName);
      setReportId(null);      
     }
    
    saveReport();
   }
  
   public void saveReport()
   {
    try
    {
      String reportId = getReportId();
     
      if ( reportId == null )
      {
        reportId = GenericReplicator.getNextSeqId("UiReport", delegator);
        setReportId(reportId);
      }
      else
      {
        // TODO need to delete old report info
      }
     
      List valuesToStore = new ArrayList();
         
      GenericValue reportGV = new GenericValue(delegator.getModelEntity("UiReport"));
      reportGV.setDelegator(delegator);
      reportGV.set("reportId", reportId);
      reportGV.set("sectionId", getSectionId());
      reportGV.set("partyId", getPartyId());
      reportGV.set("reportName", getReportName());
      reportGV.set("publicFlag", getPublicFlag());
     
      valuesToStore.add(reportGV);
     
      Iterator iter = reportFields.iterator();
      while ( iter.hasNext())
      {
        UIReportField rf = (UIReportField) iter.next();

        GenericValue gv = new GenericValue(delegator.getModelEntity("UiReportField"));
        gv.setDelegator(delegator);
        gv.set("reportFieldId", GenericReplicator.getNextSeqId("UiReportField", delegator));
        gv.set("reportId", reportId);
        gv.set("attributeId", rf.getAttributeId());
        gv.set("displayTypeId", rf.getDisplayTypeId());
        gv.set("displayObjectId", rf.getDisplayObjectId());
        gv.set("groupBy", rf.getGroupBy());
        gv.set("displayOrder", new Integer(rf.getDisplayOrder()));
        gv.set("sqlFunction", rf.getSqlFunction());
        gv.set("displayLabel", rf.getDisplayLabel());
       
        valuesToStore.add(gv);
      }

      iter = reportCriteria.iterator();
      while ( iter.hasNext())
      {
        UIReportCriteria rc = (UIReportCriteria) iter.next();

        GenericValue gv = new GenericValue(delegator.getModelEntity("UiReportCriteria"));
        gv.setDelegator(delegator);
        gv.set("reportCriteriaId", GenericReplicator.getNextSeqId("UiReportCriteria", delegator));
        gv.set("reportId", reportId);
        gv.set("attributeId", rc.getAttributeId());
        gv.set("displayTypeId", rc.getDisplayTypeId());
        gv.set("displayObjectId", rc.getDisplayObjectId());
        gv.set("queryOperatorId", rc.getQueryOperatorId());
        gv.set("attributeValue", rc.getAttributeValue());
        gv.set("displayLabel", rc.getDisplayLabel());
               
        valuesToStore.add(gv);
      }

      iter = reportOrderBy.iterator();
      while ( iter.hasNext())
      {
        UIReportOrderBy ro = (UIReportOrderBy) iter.next();

        GenericValue gv = new GenericValue(delegator.getModelEntity("UiReportOrderBy"));
        gv.setDelegator(delegator);
        gv.set("reportOrderId", GenericReplicator.getNextSeqId("UiReportOrderBy", delegator));
        gv.set("reportId", reportId);
        gv.set("attributeId", ro.getAttributeId());
        gv.set("sortOrder", new Integer(ro.getSortOrder()));
        gv.set("displayLabel", ro.getDisplayLabel());
                         
        valuesToStore.add(gv);
      }
     
      delegator.storeAll(valuesToStore);
    } catch (GenericEntityException e)
    {
      e.printStackTrace();
      Debug.logError("error saving report" + e.getMessage(), module);
    }
   }
  
  public static boolean deleteReport(String reportId, GenericDelegator delegator)
  {
    try
    {
      List valuesToBeRemoved = new ArrayList();
     
      GenericValue gv = new GenericValue(delegator.getModelEntity("UiReportCriteria"));
      gv.set("reportId", reportId);
      valuesToBeRemoved.add(gv);
     
      gv = new GenericValue(delegator.getModelEntity("UiReportField"));
      gv.set("reportId", reportId);
      valuesToBeRemoved.add(gv);
     
      gv = new GenericValue(delegator.getModelEntity("UiReportOrderBy"));
      gv.set("reportId", reportId);
      valuesToBeRemoved.add(gv);
     
      gv = new GenericValue(delegator.getModelEntity("UiReport"));
      gv.set("reportId", reportId);
      valuesToBeRemoved.add(gv);
     
      delegator.removeAll(valuesToBeRemoved);
    } catch (GenericEntityException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      Debug.logError("unable to delete report: " + reportId + " error:" + e.getMessage(), module);
      return false;
    }
    return true;
  }
  public static List getReports(String companyId, String partyId, GenericDelegator delegator)
  {
    return getReports(null, partyId, delegator);
  }

  public static List getReports(String sectionId, String companyId, String partyId, GenericDelegator delegator)
  {
    try
    {
      Map condition = sectionId == null ? UtilMisc.toMap("partyId", "-1") : UtilMisc.toMap("sectionId", sectionId, "partyId", "-1");
      List orderBy = UtilMisc.toList("reportName");
       
      List reportList = delegator.findByAnd("UiReport", condition, orderBy);
      if ( !partyId.equals("-1")) {

        condition = sectionId == null ? UtilMisc.toMap("partyId", partyId) : UtilMisc.toMap("sectionId", sectionId, "partyId", partyId);
       
        EntityCondition c1 = new EntityConditionList( UtilMisc.toList( new EntityExpr("partyId", EntityOperator.EQUALS, partyId),
              new EntityConditionList( UtilMisc.toList( new EntityExpr("partyId", EntityOperator.EQUALS, companyId),
                                                new EntityExpr("publicFlag", EntityOperator.EQUALS, "Y")),
                               EntityOperator.AND)), EntityOperator.OR);
          if ( sectionId != null )
          c1 = new EntityConditionList( UtilMisc.toList( c1, new EntityExpr("sectionId", EntityOperator.EQUALS, sectionId)), EntityOperator.AND);

        if ( reportList == null)
          reportList = delegator.findByCondition("UiReport", c1, null, orderBy);
        else
          reportList.addAll(delegator.findByCondition("UiReport", c1, null, orderBy));
      }
     
      return reportList;
    } catch (GenericEntityException e)
    {
      Debug.logError("Error getting reportList: " + e.getMessage(), module);
      e.printStackTrace();
    }
    return null;
  }
 
  public static List getAvailableReportScreens(GenericDelegator delegator)
  {
    try
    {
      List availableScreens = delegator.findByAnd("UiScreen", UtilMisc.toMap("allowReporting", "Y"), UtilMisc.toList("screenName"));
     
      return availableScreens;
    } catch (GenericEntityException e)
    {
      Debug.logError("Error getting availabel report section List: " + e.getMessage(), module);
      e.printStackTrace();
    }
    return null;
  }
    
   public List loadPrimarySectionFields()
    {
    try
    {
      List primaryFields = getDelegator().findByAnd("UiScreenSectionFields",
          UtilMisc.toMap("sectionId", getSectionId()),
          UtilMisc.toList("displayOrder"));
     
      setPrimaryFields(primaryFields);
      return primaryFields;
    } catch (GenericEntityException e)
    {
      Debug.logError("Unable to get Primary Screen Fields:" + e.getMessage(), module);
      return null;
    }
  }
   public List loadRelatedSectionQueryFields()
    {
    try
    {
      List relatedFields = getDelegator().findByAnd("UiRelatedSectionQueryFields",
          UtilMisc.toMap("sectionId", getSectionId(), "useInAdvancedQueries", "Y", "isSearchable", "Y"),
          UtilMisc.toList("relatedSectionId", "displayOrder"));
      setRelatedFields(relatedFields);
      return relatedFields;
    } catch (GenericEntityException e)
    {
      Debug.logError("Unable to get Related Screen Fields:" + e.getMessage(), module);
      return null;
    }
  }

  public String getOrderBySelectedOptions()
  {
    List fieldList = getReportOrderBy();
    if ( fieldList == null )
      return "";
     
    StringBuffer displayHtml = new StringBuffer(5000);
    int fieldListSize = fieldList.size();

    for (int fieldNbr = 0; fieldNbr < fieldListSize; fieldNbr++)
    {
      UIReportOrderBy fieldInfo = (UIReportOrderBy) fieldList.get(fieldNbr);
     
      String htmlName = UIWebUtility.getHtmlName("REPORT", fieldInfo.getEntityName(), fieldInfo.getAttributeName(),0);
      String attributeId = fieldInfo.getAttributeId();
      String displayLabel = fieldInfo.getDisplayLabel();
      String optValue = htmlName + ";" + attributeId + ";" + "NONE" + ";" + "NONE" + ";" + displayLabel;
      displayHtml.append("<option value='" + optValue + "'>" + displayLabel + "</option>")
    }
    return displayHtml.toString();
  }

  public String getSelectListSelectedOptions()
  {
    List fieldList = getReportFields();
    if ( fieldList == null )
      return "";
     
    StringBuffer displayHtml = new StringBuffer(5000);
    int fieldListSize = fieldList.size();

    for (int fieldNbr = 0; fieldNbr < fieldListSize; fieldNbr++)
    {
      UIReportField fieldInfo = (UIReportField) fieldList.get(fieldNbr);
     
      String htmlName = UIWebUtility.getHtmlName("REPORT", fieldInfo.getEntityName(), fieldInfo.getAttributeName(),0);
      String displayObjectId = fieldInfo.getDisplayObjectId();
      String displayTypeId = fieldInfo.getDisplayTypeId();
      String attributeId = fieldInfo.getAttributeId();
      String displayLabel = fieldInfo.getDisplayLabel();
      String optValue = htmlName + ";" + attributeId + ";" + displayTypeId + ";" + displayObjectId + ";" + displayLabel;
      displayHtml.append("<option value='" + optValue + "'>" + displayLabel + "</option>")
    }
    return displayHtml.toString();
  }
 
 
  public String getSelectListAvailableOptions()
  {
    if (sectionId == null)
      throw new IllegalArgumentException("section ID must be set before calling getConditionHtml");
     
    StringBuffer displayHtml = new StringBuffer(5000);
    List fieldList = getPrimaryFields();
    int fieldListSize = fieldList.size();
           
    StringBuffer fieldNameOptions = new StringBuffer(200);
//    fieldNameOptions.append("<option value=''></option>");
    for (int fieldNbr = 0; fieldNbr < fieldListSize; fieldNbr++) {
      GenericValue fieldInfo = (GenericValue) fieldList.get(fieldNbr);
      String isVisible = UtilFormatOut.checkNull(fieldInfo.getString("isVisible"));
      if ( isVisible.equals("Y")) {
        String htmlName = UIWebUtility.getHtmlName(fieldInfo.getString("sectionName"), fieldInfo.getString("entityName"), fieldInfo.getString("attributeName"),0);
        String displayObjectId = fieldInfo.getString("displayObjectId");
        String displayTypeId = fieldInfo.getString("displayTypeId");
        String attributeId = fieldInfo.getString("attributeId");
        String displayLabel = fieldInfo.getString("displayLabel");
        String optValue = htmlName + ";" + attributeId + ";" + displayTypeId + ";" + displayObjectId + ";" + displayLabel;
        fieldNameOptions.append("<option value='" + optValue + "'>" + displayLabel + "</option>")
      }
 
    }
 
    List extendedFields = getRelatedFields();
    if ( extendedFields != null )
    {
      int numFields = extendedFields.size();
      for ( int i=0; i < numFields; i++)
      {
        GenericValue fieldInfo = (GenericValue) extendedFields.get(i);
        String entityName = fieldInfo.getString("entityName");
        String attributeId = fieldInfo.getString("attributeId");
        String attributeName = fieldInfo.getString("attributeName");
        String displayObjectId = fieldInfo.getString("displayObjectId");
        String displayTypeId = fieldInfo.getString("displayTypeId");
        String sectionName = fieldInfo.getString("sectionName");
        String sectionDescription = fieldInfo.getString("sectionDescription");
        String displayLabel = fieldInfo.getString("displayLabel");
        String htmlName = UIWebUtility.getHtmlName( sectionName, entityName, attributeName, 0 );
        String optValue = htmlName + ";" + attributeId + ";" + displayTypeId + ";" + displayObjectId + ";" + displayLabel;
        displayLabel = sectionDescription + "." + displayLabel;
        fieldNameOptions.append("<option value='" + optValue + "'>" + displayLabel + "</option>")
      }
    }

    return fieldNameOptions.toString();
  }
 
  public String getConditionHtml()
  { 
    if (sectionId == null)
      throw new IllegalArgumentException("section ID must be set before calling getConditionHtml");
     
    StringBuffer displayHtml = new StringBuffer(5000);
    List fieldList = getPrimaryFields();
    int fieldListSize = fieldList.size();
           
    StringBuffer fieldNameOptions = new StringBuffer(200);
    fieldNameOptions.append("<option value=''></option>");
    for (int fieldNbr = 0; fieldNbr < fieldListSize; fieldNbr++) {
      GenericValue fieldInfo = (GenericValue) fieldList.get(fieldNbr);
      String isSearchable = UtilFormatOut.checkNull(fieldInfo.getString("isSearchable"));
      if ( isSearchable.equals("Y")) {
        String htmlName = UIWebUtility.getHtmlName(fieldInfo.getString("sectionName"), fieldInfo.getString("entityName"), fieldInfo.getString("attributeName"),0);
        String displayObjectId = fieldInfo.getString("displayObjectId");
        String displayTypeId = fieldInfo.getString("displayTypeId");
        String attributeId = fieldInfo.getString("attributeId");
        String optValue = htmlName + ";" + attributeId + ";" + displayTypeId + ";" + displayObjectId + ";" + fieldInfo.getString("displayLabel");
        fieldNameOptions.append("<option value='" + optValue + "'>" + fieldInfo.getString("displayLabel") + "</option>")
      }
 
    }
 
    List extendedFields = getRelatedFields();
    if ( extendedFields != null )
    {
      int numFields = extendedFields.size();
      for ( int i=0; i < numFields; i++)
      {
        GenericValue fieldInfo = (GenericValue) extendedFields.get(i);
        String entityName = fieldInfo.getString("entityName");
        String attributeId = fieldInfo.getString("attributeId");
        String attributeName = fieldInfo.getString("attributeName");
        String displayObjectId = fieldInfo.getString("displayObjectId");
        String displayTypeId = fieldInfo.getString("displayTypeId");
        String sectionName = fieldInfo.getString("sectionName");
        String sectionDescription = fieldInfo.getString("sectionDescription");
        String displayLabel = fieldInfo.getString("displayLabel");
        String htmlName = UIWebUtility.getHtmlName( sectionName, entityName, attributeName, 0 );
        String optValue = htmlName + ";" + attributeId + ";" + displayTypeId + ";" + displayObjectId + ";" + displayLabel;
        displayLabel = sectionDescription + "." + displayLabel;
        fieldNameOptions.append("<option value='" + optValue + "'>" + displayLabel + "</option>")
      }
    }
       
    StringBuffer conditionOptions = new StringBuffer(100);
    conditionOptions.append("<option value='equals'>=</option>");
    conditionOptions.append("<option value='like'>CONTAINS</option>");
    conditionOptions.append("<option value='startsWith'>STARTS WITH</option>");
    conditionOptions.append("<option value='endsWith'>ENDS WITH</option>");
    conditionOptions.append("<option value='equals'>=</option>");
    conditionOptions.append("<option value='notEqual'>NOT EQUAL</option>");
    conditionOptions.append("<option value='lessThan'>&lt;</option>");
    conditionOptions.append("<option value='greaterThan'>&gt;</option>");
    conditionOptions.append("<option value='lessThanEqualTo'>&lt;=</option>");
    conditionOptions.append("<option value='greaterThanEqualTo'>&gt;=</option>");
    conditionOptions.append("<option value='in'>IN</option>");
    conditionOptions.append("<option value='not-in'>NOT IN</option>");
    conditionOptions.append("<option value='between'>BETWEEN</option>");
 
       
    displayHtml.append("<table id='queryListTable' border=1>\n");
    displayHtml.append("<tr><td>Field</td><td>Condition</td><td>Value</td><td>Action</td></tr>\n");
 
    List reportConditions = getReportCriteria();
    int numExistingConditions = 0;
    if ( reportConditions != null )
    {
      Iterator rcIter = reportConditions.iterator();
      while ( rcIter.hasNext() )
      {
        UIReportCriteria rc = (UIReportCriteria) rcIter.next();
        numExistingConditions++;
        int i = numExistingConditions;
        String htmlName = UIWebUtility.getHtmlName("REPORT", rc.getEntityName(), rc.getAttributeName(),0);
        String optValue = htmlName + ";" + rc.getAttributeId() + ";" + rc.getDisplayTypeId() + ";" + rc.getDisplayObjectId() + ";" + rc.getDisplayLabel();
        displayHtml.append("<tr id=queryListRow" + i + "><td><input type=hidden name=queryListField" + i + " value='" + optValue + "'>" +  rc.getDisplayLabel() + "</td>\n");
        displayHtml.append("  <td><input type=hidden name=queryListOperator" + i + " value='" + rc.getQueryOperatorId() + "'>" + rc.getQueryOperatorId() + "</td>\n");
        displayHtml.append("  <td><input type=hidden name=queryListValue" + i + " size=30 value='" + rc.getAttributeValue() + "'>" + rc.getAttributeValue() + "</td>\n");
        displayHtml.append("  <td><img src=/sfaimages/remove.gif alt=Del onClick=delConditionRow(" + i + ")>\n");
        displayHtml.append("      <img src=/sfaimages/add.gif alt=Add onClick=addConditionRow(" + i + ")></td>\n");
        displayHtml.append("</tr>");
       
      }
    }
   
    int startRow = numExistingConditions + 1;
    int endRow = Math.max(startRow+2, 5);
    // default show 4 rows
    for ( int i=startRow; i < endRow; i++)
    {
      displayHtml.append("<tr id=queryListRow" + i + "><td><select name=queryListField" + i + ">" +  fieldNameOptions.toString() + "</select></td>\n");
      displayHtml.append("  <td><select name=queryListOperator" + i + ">" + conditionOptions.toString() + "</select></td>\n");
      displayHtml.append("  <td><input name=queryListValue" + i + " size=30></td>\n");
      displayHtml.append("  <td><img src=/sfaimages/remove.gif alt=Del onClick=delConditionRow(" + i + ")>\n");
      displayHtml.append("      <img src=/sfaimages/add.gif alt=Add onClick=addConditionRow(" + i + ")></td>\n");
      displayHtml.append("</tr>");
         
    }
 
    displayHtml.append("</table>\n");
    displayHtml.append("<input type=hidden id=queryListMaxRows name=queryListMaxRows value=4>\n");
       
    displayHtml.append("<script type='text/javascript'>\n");
    displayHtml.append("function addConditionRow(i) {\n");
    displayHtml.append("  var tab1=document.getElementById('queryListTable')\n");
    displayHtml.append("  if ( tab1 ) {\n");
    displayHtml.append("    var numRows = tab1.rows.length\n");
    displayHtml.append("    var maxRows = 10\n");
    displayHtml.append("    if ( numRows > maxRows )\n");
    displayHtml.append("      alert(\"Can't have more than 10 conditions\");\n");
    displayHtml.append("    else {\n");
    displayHtml.append("      var x = tab1.insertRow(numRows)\n");
    displayHtml.append("      var maxRows = document.getElementById('queryListMaxRows')\n");
    displayHtml.append("      var newRow = maxRows.value -  -1\n");
    displayHtml.append("      maxRows.value = newRow\n");
    displayHtml.append("      x.id = \"queryListRow\" + newRow\n");
    displayHtml.append("      var c1=x.insertCell(0)\n");
    displayHtml.append("      var c2=x.insertCell(1)\n");
    displayHtml.append("      var c3=x.insertCell(2)\n");
    displayHtml.append("      var c4=x.insertCell(3)\n");
    displayHtml.append("      c1.innerHTML=\"<select name=queryListField\" + newRow + \">" + fieldNameOptions.toString() + "</select>\"\n");
    displayHtml.append("      c2.innerHTML=\"<select name=queryListOperator\" + newRow + \">" + conditionOptions.toString() +"</select>\"\n");
    displayHtml.append("      c3.innerHTML=\"<input name=queryListValue\" + newRow + \" size=30>\"\n");
    displayHtml.append("      c4.innerHTML=\"<img src=/sfaimages/remove.gif alt=Del onClick=delConditionRow(\" + newRow + \")>\" + \" <img src=/sfaimages/add.gif alt=Add onClick=addConditionRow(\" + newRow + \")>\"\n");

    displayHtml.append("    }\n");
    displayHtml.append("    fixSize()\n");
    displayHtml.append("  }\n");
    displayHtml.append("}\n");
       
    displayHtml.append("function delConditionRow(i)\n");
    displayHtml.append("{\n");
    displayHtml.append("  var row1 = document.getElementById('queryListRow' + i)\n");
    displayHtml.append("  var tab = document.getElementById('queryListTable')\n");
    displayHtml.append("  var rows = tab.rows\n");
    displayHtml.append("  if ( rows.length == 2 ) {\n");
    displayHtml.append("    event.returnValue = false\n");
    displayHtml.append("    return;\n");
    displayHtml.append("  }\n");
    displayHtml.append("  for ( i=0; i < rows.length; i++ ) {\n");
    displayHtml.append("    row = rows[i];\n");
    displayHtml.append("    if ( row.id == row1.id) {\n");
    displayHtml.append("      tab.deleteRow(i);\n");
    displayHtml.append("      break;\n");
    displayHtml.append("    }\n");
    displayHtml.append("  }\n");
    displayHtml.append("  fixSize()\n");
    displayHtml.append("}\n");   
   
    displayHtml.append("</script>\n");
   
    return displayHtml.toString();
  }

  public boolean loadQueryInfo(HttpServletRequest request, HttpServletResponse response, UICache uiCache)
  {
   
    try
    {
      List primaryFields = loadPrimarySectionFields();
      List relatedQueryFields = loadRelatedSectionQueryFields();
     
      List uiScreenSectionEntityGVL = delegator.findByAnd("UiScreenSectionEntity",
            UtilMisc.toMap("sectionId", sectionId), UtilMisc.toList("retrieveOrder"));
                 
      UIScreenSectionEntity primaryEntity = new UIScreenSectionEntity((GenericValue) uiScreenSectionEntityGVL.get(0), delegator, uiCache);
      GenericValue screenSectionGV = delegator.findByPrimaryKey("UiScreenSection", UtilMisc.toMap("sectionId", sectionId));
      String eventProcessorClass = screenSectionGV.getString("eventProcessorClass");
      eventProcessor = UIUtility.getEventProcessor(eventProcessorClass);
     
      String primaryEntityName = primaryEntity.getUiEntity().getEntityName();
      String searchAttribValue = "";
      String searchEntityName = "";
      String searchAttribName = "";
      EntityComparisonOperator entityOperator = null;
      List relatedSearchClauses = new LinkedList();
      List selectFields = new ArrayList();
      List selectFieldLabels = new ArrayList();
      List sortFields = new ArrayList();
     
      List reportFields = new ArrayList();
      List reportCriteria = new ArrayList();
      List reportOrderBy = new ArrayList();
     
      ModelEntity primaryME = primaryEntity.getUiEntity().getModelEntity();
      List primaryPkFieldNames =primaryEntity.getUiEntity().getPrimaryKeyFieldNames();
     
      queryInfo = new QueryInfo(delegator, primaryEntityName);
     
      HashMap joinedEntities = new HashMap();
         
      joinedEntities.put(primaryEntityName, "Y");
         
      // Find the main entity(ies) by building a WHERE clause using LIKE and AND, with one or more tables in the FROM clause.
      // First join all secondary screen section entities in the WHERE and FROM clauses in case
      // we are going to use query values from them.
      Iterator uiScreenSectionEntityI = uiScreenSectionEntityGVL.iterator();
     
      uiScreenSectionEntityI.next(); // Pass up the primary entity.
     
      while (uiScreenSectionEntityI.hasNext()) {
        GenericValue entityGV = (GenericValue) uiScreenSectionEntityI.next();
        UIScreenSectionEntity uiScreenSectionEntity = new UIScreenSectionEntity(entityGV, delegator, uiCache) ;
        String relationTitle = uiScreenSectionEntity.getRelationTitle();
        String relatedEntityName = uiScreenSectionEntity.getUiEntity().getEntityName();
        String relatedAndFields = uiScreenSectionEntity.getRelationByAndFields();
        boolean isOuterJoin = uiScreenSectionEntity.getIsOuterJoined();
     
        eventProcessor.addOneRelationClause(delegator, relationTitle, relatedAndFields,
          relatedEntityName, primaryEntityName, primaryME, isOuterJoin,
          queryInfo);
             
        joinedEntities.put(relatedEntityName, "Y");
      }
     
      String queryListMaxRows = request.getParameter("queryListMaxRows");
      // if queryListMaxRows is set, then we are using advanced query mode
      if ( (queryListMaxRows != null ) && ( queryListMaxRows.length() > 0) )
      {
        int maxRows = Integer.valueOf(queryListMaxRows).intValue();
        for ( int i=1; i <= maxRows; i++ )
        {
          String qlFieldInfo = request.getParameter("queryListField" + i);
          if ( ( qlFieldInfo != null ) && ( qlFieldInfo.length() > 0 ) )
          {
            StringTokenizer tokSemi = new StringTokenizer(qlFieldInfo,";");
            String qlFieldName = "";
            String qlAttributeId = "";
            String qlDisplayObjectId = "";
            String qlDisplayTypeId = "";
            String qlDisplayLabel = "";
           
            if (tokSemi.countTokens() == 5) {
                qlFieldName = tokSemi.nextToken();
                qlAttributeId = tokSemi.nextToken();
                qlDisplayTypeId = tokSemi.nextToken();
                qlDisplayObjectId = tokSemi.nextToken();
                qlDisplayLabel = tokSemi.nextToken();
            }
            else
            {
              qlFieldName = qlFieldInfo;
            }
     
            String qlOperator  = request.getParameter("queryListOperator" + i);
            String qlValue     = request.getParameter("queryListValue" + i);
           
            reportCriteria.add( new UIReportCriteria(qlAttributeId, qlDisplayTypeId, qlDisplayObjectId, qlOperator,qlValue, qlDisplayLabel) );
           
            if ( qlOperator.equals("like"))
              qlValue =  "%" + qlValue.replace('*','%') + "%";
            else if ( qlOperator.equals("startsWith"))
            {
              qlValue =  qlValue.replace('*','%') + "%";
              qlOperator = "like";
            }
            else if ( qlOperator.equals("endsWith"))
            {
              qlValue =  "%" + qlValue.replace('*','%');
              qlOperator = "like";
            }
     
            searchEntityName = UIWebUtility.getEntityFromParamName(qlFieldName);
     
            String hasJoin = (String) joinedEntities.get(searchEntityName);
           
            if ( ( hasJoin == null ) || ( !hasJoin.equals("Y")) )
            {
              eventProcessor.addOneRelationClause(delegator, "", "", searchEntityName, primaryEntityName, primaryME, false, queryInfo);
     
              joinedEntities.put(searchEntityName, "Y");
            }
           
            if ((searchEntityName == null) ||
                searchEntityName.equals("")) {
              searchEntityName = primaryEntityName;
            }
     
            searchAttribName = UIWebUtility.getAttribFromParamName(qlFieldName);
            entityOperator = EntityOperator.lookupComparison(qlOperator);
            Object searchValue = qlValue;
           

            // If this is a set operator, convert the String param into a comma separated List
            if ( (entityOperator.equals(EntityOperator.IN)) || (entityOperator.equals(EntityOperator.NOT_IN)) || (entityOperator.equals(EntityOperator.BETWEEN)))
            {
              List valueList = new ArrayList();
              StringTokenizer tokComma = new StringTokenizer(qlValue, ",");
     
              while (tokComma.hasMoreTokens()) {
                String valueItem = tokComma.nextToken();
                valueList.add(valueItem);
              }
              searchValue = valueList;
            }
           
              // Figure out the attribute ID for the UiAttribute this parameter corresponds to so we can
              // save the query.
            String attributeId = qlAttributeId;
     
              // Generate an entry in the WHERE clause for this attribute.  The entityOperator
              // is returned in case appendEntityClause changes it.
              // NOTE:  changes here must also be applied to UIQuery.appendEntityClauses() to work with saved queries
              //
              if ( qlDisplayTypeId.equals(UIDisplayObject.DISPLAY_TYPE_SELECT) || qlDisplayTypeId.equals(UIDisplayObject.DISPLAY_TYPE_SEARCH_TEXT))
              {
                String aliasName = searchEntityName + searchAttribName + "srch";
                UIUtility.addSelectSearch( queryInfo, qlDisplayObjectId, searchEntityName, searchAttribName, aliasName, entityOperator, searchValue );
              }
              else
              {
                if ( searchValue instanceof String )
                {
                  entityOperator = EventUtility.appendEntityClause(searchEntityName,
                    searchAttribName, (String) searchValue,
                    entityOperator, queryInfo);
                }
                else if ( searchValue instanceof Collection)
                {
                  entityOperator = EventUtility.appendEntityClause(searchEntityName,
                    searchAttribName, (Collection) searchValue,
                    entityOperator, queryInfo);
                }
                else
                  throw new IllegalArgumentException("Query Param must be String or Collection");
              }
     
          }
        }
      }
     
      // get select List fields
      String [] selectFieldsParam = request.getParameterValues("selectFields");
      if ( selectFieldsParam == null )
        return false;
      for (int i = 0; i < selectFieldsParam.length; i++)
      {
        // Do what you need for each string:  foo[i]
        String selectField = selectFieldsParam[i];
        StringTokenizer tokSemi = new StringTokenizer(selectField,";");
        String qlFieldName = "";
        String qlAttributeId = "";
        String qlDisplayObjectId = "";
        String qlDisplayTypeId = "";
        String qlDisplayLabel = "";
           
        if (tokSemi.countTokens() == 5) {
            qlFieldName = tokSemi.nextToken();
            qlAttributeId = tokSemi.nextToken();
            qlDisplayTypeId = tokSemi.nextToken();
            qlDisplayObjectId = tokSemi.nextToken();
            qlDisplayLabel = tokSemi.nextToken();
        }
        else
        {
          qlFieldName = selectField;
        }
     
        reportFields.add(new UIReportField(qlAttributeId, qlDisplayTypeId, qlDisplayObjectId, qlDisplayLabel, String.valueOf(i)));   
         
        String entityName = UIWebUtility.getEntityFromParamName(qlFieldName);
        String attributeName = UIWebUtility.getAttribFromParamName(qlFieldName);
        String aliasName = attributeName;
        if ( ! entityName.equals(primaryEntityName))
          aliasName = entityName + "_" + attributeName;
         
        String hasJoin = (String) joinedEntities.get(entityName);
           
        if ( ( hasJoin == null ) || ( !hasJoin.equals("Y")) )
        {
          eventProcessor.addOneRelationClause(delegator, "", "", entityName, primaryEntityName, primaryME, false, queryInfo);
     
          joinedEntities.put(entityName, "Y");
        }
       
        queryInfo.checkAttribute(entityName, attributeName, aliasName);
 
        selectFields.add(aliasName);
        selectFieldLabels.add(qlDisplayLabel);
      }
     
      setSelectFieldNames(selectFields);
      setSelectFieldLabels(selectFieldLabels);
     
      queryInfo.setSelectFields(selectFields);

      //get orderBy Fields
      String [] sortFieldsParam = request.getParameterValues("sortFields");
      if ( sortFieldsParam != null )
      {
        for (int i = 0; i < sortFieldsParam.length; i++)
        {
          // Do what you need for each string:  foo[i]
          String sortField = sortFieldsParam[i];
          StringTokenizer tokSemi = new StringTokenizer(sortField,";");
          String qlFieldName = "";
          String qlAttributeId = "";
          String qlDisplayObjectId = "";
          String qlDisplayTypeId = "";
          String qlDisplayLabel = "";
             
          if (tokSemi.countTokens() == 5) {
              qlFieldName = tokSemi.nextToken();
              qlAttributeId = tokSemi.nextToken();
              qlDisplayTypeId = tokSemi.nextToken();
              qlDisplayObjectId = tokSemi.nextToken();
              qlDisplayLabel = tokSemi.nextToken();
          }
          else
          {
            qlFieldName = sortField;
          }
          reportOrderBy.add(new UIReportOrderBy(qlAttributeId, i, qlDisplayLabel));   
       
          String entityName = UIWebUtility.getEntityFromParamName(qlFieldName);
          String attributeName = UIWebUtility.getAttribFromParamName(qlFieldName);
          String aliasName = attributeName;
          if ( ! entityName.equals(primaryEntityName))
            aliasName = entityName + "_" + attributeName;
 
          String hasJoin = (String) joinedEntities.get(entityName);
             
          if ( ( hasJoin == null ) || ( !hasJoin.equals("Y")) )
          {
            eventProcessor.addOneRelationClause(delegator, "", "", entityName, primaryEntityName, primaryME, false, queryInfo);
       
            joinedEntities.put(entityName, "Y");
          }
         
          queryInfo.checkAttribute(entityName, attributeName, aliasName);
 
          sortFields.add(aliasName);
        }
        queryInfo.setOrderBy(sortFields);
      }
      setReportFields(reportFields);
      setReportCriteria(reportCriteria);
      setReportOrderBy(reportOrderBy);
     
    } catch (NumberFormatException e)
    {
      Debug.logError("Error formatting Number: " + e.getMessage(), module);
      return false;
    } catch (GenericEntityException e)
    {
      Debug.logError("Error loading QueryInfo: " + e.getMessage(), module);
      return false;
    }
    return true;
  }
 
  public List runReport(UserInfo userInfo, int maxRows)
  {
    EntityListIterator eli = null;
   
    if ( eventProcessor == null)
      eventProcessor = new GenericEventProcessor();
   
    if ( queryInfo == null )
      throw new RuntimeException("You must call loadQueryInfo prior to runReport");
   
    SecurityLinkInfo securityInfo = eventProcessor.getSecurityLinkInfo(userInfo, delegator);
    if (securityInfo == null) {
      try {
        eli = queryInfo.getQueryIterator();
      } catch (GenericEntityException e) {
        Debug.logError("An error occurred in the " +
          "GenericDelegator.findByCondition method: " +
          e.getLocalizedMessage(), module);
      }
    } else {
      try {
       
        eli = SecurityWrapper.findListIteratorByCondition(queryInfo.getPrimaryEntity(),
            queryInfo, queryInfo.getOrderBy(), userInfo, securityInfo,  delegator);
      } catch (GenericEntityException e) {
        Debug.logError("An error occurred in the " +
          "SecurityWrapper.findByCondition method: " +
          e.getLocalizedMessage(), module);
      }
    }

    if ( eli != null )
    {
      try {
        List resultGVL = eli.getPartialList( 1, maxRows);
       
        boolean hasMoreRows = false;
       
        // check next value since we close the cursor anyway. 
        if ( (resultGVL.size() == maxRows) && (eli.next() != null ))
          hasMoreRows = true;
         
        eli.close();
       
        return resultGVL;

      } catch (GenericEntityException e) {
        Debug.logError("An error occurred in the  getPartialList method: " + e.getLocalizedMessage(), module);
      }
    }

    return null;

  }
 
   public GenericDelegator getDelegator()
   {
     return delegator;
   }
  
   public void setDelegator(GenericDelegator delegator_)
   {
     delegator = delegator_;
   }

  /**
   * @return
   */
  public String getPartyId()
  {
    return partyId;
  }

  /**
   * @return
   */
  public List getPrimaryFields()
  {
    if ( !primaryFieldsLoaded )
      loadPrimarySectionFields();
    return primaryFields;
  }

  /**
   * @return
   */
  public List getRelatedFields()
  {
    if ( !relatedFieldsLoaded )
      loadRelatedSectionQueryFields();
    return relatedFields;
  }

  /**
   * @return
   */
  public String getReportId()
  {
    return reportId;
  }

  /**
   * @return
   */
  public String getReportName()
  {
    return reportName;
  }

  /**
   * @return
   */
  public String getSectionId()
  {
    return sectionId;
  }

  /**
   * @param string
   */
  public void setPartyId(String string)
  {
    partyId = string;
  }

  /**
   * @param list
   */
  public void setPrimaryFields(List list)
  {
    primaryFields = list;
    primaryFieldsLoaded = true;
  }

  /**
   * @param list
   */
  public void setRelatedFields(List list)
  {
    relatedFields = list;
    relatedFieldsLoaded = true;
  }

  /**
   * @param string
   */
  public void setReportId(String string)
  {
    reportId = string;
  }

  /**
   * @param string
   */
  public void setReportName(String string)
  {
    reportName = string;
  }

  /**
   * @param string
   */
  public void setSectionId(String string)
  {
    sectionId = string;
  }

  /**
   * @return
   */
  public List getReportCriteria()
  {
    return reportCriteria;
  }

  /**
   * @return
   */
  public List getReportFields()
  {
    return reportFields;
  }

  /**
   * @return
   */
  public List getReportOrderBy()
  {
    return reportOrderBy;
  }

  /**
   * @param list
   */
  public void setReportCriteria(List list)
  {
    reportCriteria = list;
  }

  /**
   * @param list
   */
  public void setReportFields(List list)
  {
    reportFields = list;
  }

  /**
   * @param list
   */
  public void setReportOrderBy(List list)
  {
    reportOrderBy = list;
  }

  protected List getStringListfromGVL( List gvl, String fieldName)
  {
    List sList = new ArrayList();
   
    Iterator iter = gvl.iterator();
    while (iter.hasNext())
    {
      GenericValue gv = (GenericValue) iter.next();
      sList.add(gv.getString(fieldName))
    }
    return sList;
  }
 
  /**
   * @return
   */
  public String getPublicFlag()
  {
    return publicFlag;
  }

  /**
   * @param string
   */
  public void setPublicFlag(String string)
  {
    publicFlag = string;
  }

  /**
   * @return
   */
  public List getSelectFieldLabels()
  {
    return selectFieldLabels;
  }

  /**
   * @return
   */
  public List getSelectFieldNames()
  {
    return selectFieldNames;
  }

  /**
   * @param list
   */
  public void setSelectFieldLabels(List list)
  {
    selectFieldLabels = list;
  }

  /**
   * @param list
   */
  public void setSelectFieldNames(List list)
  {
    selectFieldNames = list;
  }

}
TOP

Related Classes of com.sourcetap.sfa.ui.UIReport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.