details:   /erp/devel/pi/rev/9445846b27bd
changeset: 10873:9445846b27bd
user:      Stefan Hühner <stefan.huehner <at> openbravo.com>
date:      Thu Feb 24 16:23:58 2011 +0100
summary:   Improve performance of view generation: rewrite part of 
selectorcomponent to
use already cached data and not query for it again.

diffstat:

 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
 |  31 ++++++++-
 1 files changed, 25 insertions(+), 6 deletions(-)

diffs (75 lines):

diff -r 6d32f71daedf -r 9445846b27bd 
modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
--- 
a/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
      Thu Feb 24 16:08:46 2011 +0100
+++ 
b/modules/org.openbravo.userinterface.selector/src/org/openbravo/userinterface/selector/SelectorComponent.java
      Thu Feb 24 16:23:58 2011 +0100
@@ -29,7 +29,6 @@
 import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
-import org.hibernate.criterion.Expression;
 import org.openbravo.base.model.Entity;
 import org.openbravo.base.model.ModelProvider;
 import org.openbravo.base.model.Property;
@@ -46,12 +45,12 @@
 import org.openbravo.client.kernel.reference.UIDefinitionController;
 import org.openbravo.dal.core.DalUtil;
 import org.openbravo.dal.core.OBContext;
-import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
 import org.openbravo.data.Sqlc;
 import org.openbravo.model.ad.module.Module;
 import org.openbravo.model.ad.ui.Field;
+import org.openbravo.model.ad.ui.Tab;
 import org.openbravo.service.datasource.DataSource;
 import org.openbravo.service.datasource.DataSourceConstants;
 import org.openbravo.service.datasource.DatasourceField;
@@ -401,6 +400,26 @@
     return sb.toString();
   }
 
+  /*
+   * Utility function to get list of fields in a tab which are targets of some 
selector out field.
+   * Done this way as main user (called from View generation) did already 
retrieve tab+list of
+   * fields
+   */
+  private List<Field> getOutFieldListForSelectorField(String tabId, String 
selectorFieldId) {
+    Tab tab = OBDal.getInstance().get(Tab.class, tabId);
+    List<Field> tabFields = tab.getADFieldList();
+    List<Field> result = new ArrayList<Field>();
+    for (Field f : tabFields) {
+      if (f.getObuiselOutfield() != null) {
+        String outFieldId = (String) DalUtil.getId(f.getObuiselOutfield());
+        if (outFieldId.equals(selectorFieldId)) {
+          result.add(f);
+        }
+      }
+    }
+    return result;
+  }
+
   public List<OutSelectorField> getOutFields() {
     List<OutSelectorField> outFields = new ArrayList<OutSelectorField>();
     final List<SelectorField> sortedFields = new 
ArrayList<SelectorField>(getSelector()
@@ -424,10 +443,10 @@
             outFields.add(outField);
             outField.setOutSuffix("");
           } else {
-            final OBCriteria<Field> obc = 
OBDal.getInstance().createCriteria(Field.class);
-            obc.add(Expression.eq(Field.PROPERTY_OBUISELOUTFIELD, 
selectorField));
+            List<Field> outFieldTargetFields = 
getOutFieldListForSelectorField(tabId, selectorField
+                .getId());
 
-            if (obc.list().size() == 0 && selectorField.getSuffix() != null
+            if (outFieldTargetFields.size() == 0 && selectorField.getSuffix() 
!= null
                 && !selectorField.getSuffix().equals("")) {
               // "out-fields" with a suffix not necessarily are associated 
with a field in the tab
               final OutSelectorField outField = new OutSelectorField();
@@ -437,7 +456,7 @@
                   .getSuffix()));
               outFields.add(outField);
             }
-            for (Field associatedField : obc.list()) {
+            for (Field associatedField : outFieldTargetFields) {
               if (associatedField.getTab().getId().equals(tabId)) {
                 final OutSelectorField outField = new OutSelectorField();
                 
outField.setOutFieldName(getPropertyOrDataSourceField(selectorField));

------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to