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