details:   /erp/devel/pi/rev/e9a087c8bf97
changeset: 10195:e9a087c8bf97
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Fri Jan 28 14:28:55 2011 +0100
summary:   [OBUISEL] Added Custom Query Datasource.

details:   /erp/devel/pi/rev/139e6f4f1f84
changeset: 10196:139e6f4f1f84
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Fri Jan 28 14:30:13 2011 +0100
summary:   [OBUISEL] Added Reference column to selector field table.

details:   /erp/devel/pi/rev/b0221e60d5a6
changeset: 10197:b0221e60d5a6
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Fri Jan 28 14:31:02 2011 +0100
summary:   [OBUISEL] Fixed trigger to consider the Display_Expression column.

details:   /erp/devel/pi/rev/7bb564d0aa1c
changeset: 10198:7bb564d0aa1c
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Fri Jan 28 14:32:10 2011 +0100
summary:   [OBUISEL] Implement custom queries on selectors

details:   /erp/devel/pi/rev/92bb01a74ac2
changeset: 10199:92bb01a74ac2
user:      Gorka Ion Damián <gorkaion.damian <at> openbravo.com>
date:      Fri Jan 28 14:33:26 2011 +0100
summary:   Add to core's Business Partner search the Selector definition using 
a custom query.

diffstat:

 
modules/org.openbravo.userinterface.selector/src-db/database/model/tables/OBUISEL_SELECTOR_FIELD.xml
                          |    7 +
 
modules/org.openbravo.userinterface.selector/src-db/database/model/triggers/OBUISEL_SELECTOR_FIELD_TRG.xml
                    |    2 +-
 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_COLUMN.xml
                                         |   33 +
 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_FIELD.xml
                                          |   28 +-
 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/OBSERDS_DATASOURCE.xml
                                |   11 +
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/CustomQuerySelectorDatasource.java
      |  307 ++++++++++
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
                  |   15 +-
 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorDefaultFilterActionHandler.java
 |   10 +-
 src-db/database/sourcedata/OBUISEL_SELECTOR.xml                                
                                               |   33 +
 src-db/database/sourcedata/OBUISEL_SELECTOR_FIELD.xml                          
                                               |  201 ++++++
 10 files changed, 641 insertions(+), 6 deletions(-)

diffs (truncated from 767 to 300 lines):

diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src-db/database/model/tables/OBUISEL_SELECTOR_FIELD.xml
--- 
a/modules/org.openbravo.userinterface.selector/src-db/database/model/tables/OBUISEL_SELECTOR_FIELD.xml
      Fri Jan 28 13:09:10 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src-db/database/model/tables/OBUISEL_SELECTOR_FIELD.xml
      Fri Jan 28 14:33:26 2011 +0100
@@ -105,9 +105,16 @@
         <default/>
         <onCreateDefault/>
       </column>
+      <column name="AD_REFERENCE_ID" primaryKey="false" required="false" 
type="VARCHAR" size="32" autoIncrement="false">
+        <default/>
+        <onCreateDefault/>
+      </column>
       <foreign-key foreignTable="OBSERDS_DATASOURCE_FIELD" 
name="OBUISEL_S_OBSERDS_DSF">
         <reference local="OBSERDS_DATASOURCE_FIELD_ID" 
foreign="OBSERDS_DATASOURCE_FIELD_ID"/>
       </foreign-key>
+      <foreign-key foreignTable="AD_REFERENCE" 
name="OBUISEL_SELFIELD_REFERENCE">
+        <reference local="AD_REFERENCE_ID" foreign="AD_REFERENCE_ID"/>
+      </foreign-key>
       <foreign-key foreignTable="AD_CLIENT" name="OBUISEL_SF_AD_CLIENT">
         <reference local="AD_CLIENT_ID" foreign="AD_CLIENT_ID"/>
       </foreign-key>
diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src-db/database/model/triggers/OBUISEL_SELECTOR_FIELD_TRG.xml
--- 
a/modules/org.openbravo.userinterface.selector/src-db/database/model/triggers/OBUISEL_SELECTOR_FIELD_TRG.xml
        Fri Jan 28 13:09:10 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src-db/database/model/triggers/OBUISEL_SELECTOR_FIELD_TRG.xml
        Fri Jan 28 14:33:26 2011 +0100
@@ -31,7 +31,7 @@
 
     -- check table and datasource
     IF (UPDATING OR INSERTING) THEN
-        IF :NEW.PROPERTY IS NULL AND :NEW.OBSERDS_DATASOURCE_FIELD_ID IS NULL 
THEN
+        IF :NEW.PROPERTY IS NULL AND :NEW.OBSERDS_DATASOURCE_FIELD_ID IS NULL  
AND :NEW.DISPLAY_EXPRESSION IS NULL THEN
             RAISE_APPLICATION_ERROR(-20000, 
'@OBUISEL_DATASOURCE_FIELD_OR_PROPERTY_MUST_BE_SET@');
         END IF; 
     END IF;
diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_COLUMN.xml
--- 
a/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_COLUMN.xml
     Fri Jan 28 13:09:10 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_COLUMN.xml
     Fri Jan 28 14:33:26 2011 +0100
@@ -1747,6 +1747,39 @@
 <!--9A597DDF995CE963E040007F01002F75-->  
<VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
 <!--9A597DDF995CE963E040007F01002F75--></AD_COLUMN>
 
+<!--9AAE820D05DEA0DEE040007F01001245--><AD_COLUMN>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_COLUMN_ID><![CDATA[9AAE820D05DEA0DEE040007F01001245]]></AD_COLUMN_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <NAME><![CDATA[Reference]]></NAME>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <DESCRIPTION><![CDATA[The data type 
of this field.]]></DESCRIPTION>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <HELP><![CDATA[The Reference 
indicates the type of reference field]]></HELP>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<COLUMNNAME><![CDATA[AD_Reference_ID]]></COLUMNNAME>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_TABLE_ID><![CDATA[A2F880F9981349E2A6A57BD58267EBCE]]></AD_TABLE_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_REFERENCE_ID><![CDATA[19]]></AD_REFERENCE_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<FIELDLENGTH><![CDATA[32]]></FIELDLENGTH>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <ISKEY><![CDATA[N]]></ISKEY>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <ISPARENT><![CDATA[N]]></ISPARENT>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISMANDATORY><![CDATA[N]]></ISMANDATORY>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISUPDATEABLE><![CDATA[Y]]></ISUPDATEABLE>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <SEQNO><![CDATA[280]]></SEQNO>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_ELEMENT_ID><![CDATA[120]]></AD_ELEMENT_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <POSITION><![CDATA[27]]></POSITION>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
+<!--9AAE820D05DEA0DEE040007F01001245-->  <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE>
+<!--9AAE820D05DEA0DEE040007F01001245-->  
<VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
+<!--9AAE820D05DEA0DEE040007F01001245--></AD_COLUMN>
+
 <!--9CFAD359FF0D433894E34EA05F6207FE--><AD_COLUMN>
 <!--9CFAD359FF0D433894E34EA05F6207FE-->  
<AD_COLUMN_ID><![CDATA[9CFAD359FF0D433894E34EA05F6207FE]]></AD_COLUMN_ID>
 <!--9CFAD359FF0D433894E34EA05F6207FE-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_FIELD.xml
--- 
a/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_FIELD.xml
      Fri Jan 28 13:09:10 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_FIELD.xml
      Fri Jan 28 14:33:26 2011 +0100
@@ -1051,7 +1051,7 @@
 <!--9A5A2911152F107DE040007F01002F6B-->  
<DISPLAYLOGIC><![CDATA[@AD_Table_ID@!''&@custom_query@='Y']]></DISPLAYLOGIC>
 <!--9A5A2911152F107DE040007F01002F6B-->  
<DISPLAYLENGTH><![CDATA[255]]></DISPLAYLENGTH>
 <!--9A5A2911152F107DE040007F01002F6B-->  <ISREADONLY><![CDATA[N]]></ISREADONLY>
-<!--9A5A2911152F107DE040007F01002F6B-->  <SEQNO><![CDATA[62]]></SEQNO>
+<!--9A5A2911152F107DE040007F01002F6B-->  <SEQNO><![CDATA[60]]></SEQNO>
 <!--9A5A2911152F107DE040007F01002F6B-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
 <!--9A5A2911152F107DE040007F01002F6B-->  
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
 <!--9A5A2911152F107DE040007F01002F6B-->  
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -1087,6 +1087,32 @@
 <!--9A5A29111530107DE040007F01002F6B-->  
<STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
 <!--9A5A29111530107DE040007F01002F6B--></AD_FIELD>
 
+<!--9AAE820D05DFA0DEE040007F01001245--><AD_FIELD>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<AD_FIELD_ID><![CDATA[9AAE820D05DFA0DEE040007F01001245]]></AD_FIELD_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <NAME><![CDATA[Reference]]></NAME>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <DESCRIPTION><![CDATA[The data type 
of this field.]]></DESCRIPTION>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <HELP><![CDATA[The Reference 
indicates the type of reference field]]></HELP>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<AD_TAB_ID><![CDATA[75FEAE3FF26F49E394BDF833B1B97647]]></AD_TAB_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<AD_COLUMN_ID><![CDATA[9AAE820D05DEA0DEE040007F01001245]]></AD_COLUMN_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<DISPLAYLOGIC><![CDATA[@AD_Table_ID@!''&@custom_query@='Y']]></DISPLAYLOGIC>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<DISPLAYLENGTH><![CDATA[32]]></DISPLAYLENGTH>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <ISREADONLY><![CDATA[N]]></ISREADONLY>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <SEQNO><![CDATA[64]]></SEQNO>
+<!--9AAE820D05DFA0DEE040007F01001245-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<SHOWINRELATION><![CDATA[Y]]></SHOWINRELATION>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
+<!--9AAE820D05DFA0DEE040007F01001245-->  
<STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
+<!--9AAE820D05DFA0DEE040007F01001245--></AD_FIELD>
+
 <!--9FE662DDA6514019926F06FA6363D17E--><AD_FIELD>
 <!--9FE662DDA6514019926F06FA6363D17E-->  
<AD_FIELD_ID><![CDATA[9FE662DDA6514019926F06FA6363D17E]]></AD_FIELD_ID>
 <!--9FE662DDA6514019926F06FA6363D17E-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/OBSERDS_DATASOURCE.xml
--- 
a/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/OBSERDS_DATASOURCE.xml
    Fri Jan 28 13:09:10 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/OBSERDS_DATASOURCE.xml
    Fri Jan 28 14:33:26 2011 +0100
@@ -24,4 +24,15 @@
 <!--83B60C4C19AE4A9EBA947B948C5BA04D-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--83B60C4C19AE4A9EBA947B948C5BA04D--></OBSERDS_DATASOURCE>
 
+<!--F8DD408F2F3A414188668836F84C21AF--><OBSERDS_DATASOURCE>
+<!--F8DD408F2F3A414188668836F84C21AF-->  
<OBSERDS_DATASOURCE_ID><![CDATA[F8DD408F2F3A414188668836F84C21AF]]></OBSERDS_DATASOURCE_ID>
+<!--F8DD408F2F3A414188668836F84C21AF-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--F8DD408F2F3A414188668836F84C21AF-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--F8DD408F2F3A414188668836F84C21AF-->  
<AD_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_MODULE_ID>
+<!--F8DD408F2F3A414188668836F84C21AF-->  <NAME><![CDATA[Custom Query Selector 
Datasource]]></NAME>
+<!--F8DD408F2F3A414188668836F84C21AF-->  
<CLASSNAME><![CDATA[org.openbravo.userinterface.selector.CustomQuerySelectorDatasource]]></CLASSNAME>
+<!--F8DD408F2F3A414188668836F84C21AF-->  
<OBCLKER_TEMPLATE_ID><![CDATA[2BAD445C2A0343C58E455F9BD379C690]]></OBCLKER_TEMPLATE_ID>
+<!--F8DD408F2F3A414188668836F84C21AF-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--F8DD408F2F3A414188668836F84C21AF--></OBSERDS_DATASOURCE>
+
 </data>
diff -r 30ac8883f558 -r 92bb01a74ac2 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/CustomQuerySelectorDatasource.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/CustomQuerySelectorDatasource.java
  Fri Jan 28 14:33:26 2011 +0100
@@ -0,0 +1,307 @@
+package org.openbravo.userinterface.selector;
+
+import java.sql.Timestamp;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.hibernate.Query;
+import org.openbravo.base.model.ModelProvider;
+import org.openbravo.base.model.domaintype.BigDecimalDomainType;
+import org.openbravo.base.model.domaintype.DateDomainType;
+import org.openbravo.base.model.domaintype.DomainType;
+import org.openbravo.base.model.domaintype.LongDomainType;
+import org.openbravo.client.application.OBBindings;
+import org.openbravo.client.kernel.RequestContext;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.service.datasource.ReadOnlyDataSourceService;
+import org.openbravo.service.json.JsonConstants;
+import org.openbravo.service.json.JsonUtils;
+
+public class CustomQuerySelectorDatasource extends ReadOnlyDataSourceService {
+
+  private static Logger log = Logger.getLogger(SelectorDataSourceFilter.class);
+  private static final String ADDITIONAL_FILTERS = "@additional_filters@";
+  private static final String NEW_FILTER_CLAUSE = "\n AND ";
+
+  @Override
+  protected int getCount(Map<String, String> parameters) {
+    return getData(parameters, 0, -1).size();
+  }
+
+  @Override
+  protected List<Map<String, Object>> getData(Map<String, String> parameters, 
int startRow,
+      int endRow) {
+    // creation of formats is done here because they are not thread safe
+    final SimpleDateFormat xmlDateFormat = JsonUtils.createDateFormat();
+    final SimpleDateFormat xmlDateTimeFormat = 
JsonUtils.createDateTimeFormat();
+    final List<Map<String, Object>> result = new ArrayList<Map<String, 
Object>>();
+
+    String selectorId = 
parameters.get(SelectorConstants.DS_REQUEST_SELECTOR_ID_PARAMETER);
+
+    if (StringUtils.isEmpty(selectorId)) {
+      return result;
+    }
+
+    OBContext.setAdminMode();
+    try {
+
+      Selector sel = OBDal.getInstance().get(Selector.class, selectorId);
+      List<SelectorField> fields = sel.getOBUISELSelectorFieldList();
+
+      String HQL = sel.getHQL();
+      // Parse the HQL in case that optional filters are required
+      HQL = parseOptionalFilters(HQL, parameters, sel, xmlDateFormat);
+
+      String sortBy = parameters.get("_sortBy");
+      HQL += getSortClause(sortBy, sel);
+
+      Query selQuery = OBDal.getInstance().getSession().createQuery(HQL);
+      String[] queryAliases = selQuery.getReturnAliases();
+
+      if (startRow > 0) {
+        selQuery.setFirstResult(startRow);
+      }
+      if (endRow > startRow) {
+        selQuery.setMaxResults(endRow - startRow + 1);
+      }
+
+      for (Object objResult : selQuery.list()) {
+        final Map<String, Object> data = new LinkedHashMap<String, Object>();
+        Object[] resultList = new Object[1];
+        if (objResult instanceof Object[]) {
+          resultList = (Object[]) objResult;
+        } else {
+          resultList[0] = objResult;
+        }
+
+        for (SelectorField field : fields) {
+          // TODO: throw an exception if the display expression doesn't match 
any returned alias.
+          for (int i = 0; i < queryAliases.length; i++) {
+            if (queryAliases[i].equals(field.getDisplayColumnAlias())) {
+              Object value = resultList[i];
+              if (value instanceof Date) {
+                value = xmlDateFormat.format(value);
+              }
+              if (value instanceof Timestamp) {
+                value = xmlDateTimeFormat.format(value);
+                value = JsonUtils.convertToCorrectXSDFormat((String) value);
+              }
+              data.put(queryAliases[i], value);
+            }
+          }
+        }
+        result.add(data);
+      }
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+    return result;
+  }
+
+  private String parseOptionalFilters(String _HQL, Map<String, String> 
parameters, Selector sel,
+      SimpleDateFormat xmlDateFormat) {
+    if (!_HQL.contains(ADDITIONAL_FILTERS)) {
+      return _HQL;
+    }
+    String HQL = _HQL;
+    StringBuffer additionalFilter = new StringBuffer();
+    final String entityAlias = sel.getEntityAlias();
+    // Client filter
+    additionalFilter.append(entityAlias + ".client.id ='").append(
+        OBContext.getOBContext().getCurrentClient().getId()).append("'");
+
+    // Organization filter: parameters _org=90A1F59849E84AFABD04814B3D15A691
+    final String orgs = getOrgs(parameters.get(JsonConstants.ORG_PARAMETER));
+    if (StringUtils.isNotEmpty(orgs)) {
+      additionalFilter.append(NEW_FILTER_CLAUSE);
+      additionalFilter.append(entityAlias + ".organization in (" + orgs + ")");
+    }
+    additionalFilter.append(getDefaultFilterExpression(sel, parameters));
+
+    for (SelectorField field : sel.getOBUISELSelectorFieldList()) {
+      if (field.isFilterable() && field.getClauseLeftPart() != null) {
+        String value = parameters.get(field.getDisplayColumnAlias());
+        if (StringUtils.isNotEmpty(value)) {
+          String whereClause = getWhereClause(value, field, xmlDateFormat);
+          additionalFilter.append(NEW_FILTER_CLAUSE);
+          additionalFilter.append(whereClause);
+        }
+      }
+    }
+    HQL = HQL.replace(ADDITIONAL_FILTERS, additionalFilter.toString());
+    return HQL;
+  }
+
+  private String getOrgs(String orgId) {
+    StringBuffer orgPart = new StringBuffer();
+    if (StringUtils.isNotEmpty(orgId)) {
+      final Set<String> orgSet = 
OBContext.getOBContext().getOrganizationStructureProvider()
+          .getNaturalTree(orgId);
+      if (orgSet.size() > 0) {
+        boolean addComma = false;
+        for (String org : orgSet) {
+          if (addComma) {
+            orgPart.append(",");
+          }

------------------------------------------------------------------------------
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to