Scarab commit: svn commit: r11024 - trunk/src/java/org/tigris/scarab: om tools

[email protected] Sun, 21 Nov 2010 09:47:28 -0800 (PST)
Newsgroups gmane.comp.java.scarab.cvs
Message-ID <[email protected]>
Author: dabbous
Date: 2010-11-21 09:47:28-0800
New Revision: 11024

Modified:
   trunk/src/java/org/tigris/scarab/om/AbstractScarabModule.java
   trunk/src/java/org/tigris/scarab/om/AbstractScarabUser.java
   trunk/src/java/org/tigris/scarab/om/MITList.java
   trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java

Log:
Correct MITList initialization for the case when a user requests a query fr the very first time. In that case the Query was not correctly initialized and a NPE occured. The fix is not yet 100% corect and actually fixes symptoms only. The correct fix should fix the initialization of the Query, MITList, SearchRequest, etc... But it looks very complicated ... (as always with the search system. IMHO that needs to be replaced by something more understandable)

Modified: trunk/src/java/org/tigris/scarab/om/AbstractScarabModule.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/om/AbstractScarabModule.java?view=diff&pathrev=11024&r1=11023&r2=11024
==============================================================================
--- trunk/src/java/org/tigris/scarab/om/AbstractScarabModule.java	(original)
+++ trunk/src/java/org/tigris/scarab/om/AbstractScarabModule.java	2010-11-21 09:47:28-0800
@@ -1086,21 +1086,19 @@
         if (obj == null)
         {
             Criteria crit = new Criteria();
-            crit.add(RModuleAttributePeer.ISSUE_TYPE_ID, 
-                     issueType.getIssueTypeId());
-            crit.add(RModuleAttributePeer.MODULE_ID, getModuleId());
-            crit.addAscendingOrderByColumn(
-                RModuleAttributePeer.PREFERRED_ORDER);
-            crit.addAscendingOrderByColumn(
-                RModuleAttributePeer.DISPLAY_VALUE);
+            Integer issueTypeId = issueType.getIssueTypeId();
+            Integer moduleId    = getModuleId();
+            crit.add(RModuleAttributePeer.ISSUE_TYPE_ID, issueTypeId);
+            crit.add(RModuleAttributePeer.MODULE_ID, moduleId);
+            crit.addAscendingOrderByColumn(RModuleAttributePeer.PREFERRED_ORDER);
+            crit.addAscendingOrderByColumn(RModuleAttributePeer.DISPLAY_VALUE);
             
             if (activeOnly)
             {
                 crit.add(RModuleAttributePeer.ACTIVE, true);
             }
             
-            crit.addJoin(AttributePeer.ATTRIBUTE_ID,
-                     RModuleAttributePeer.ATTRIBUTE_ID); 
+            crit.addJoin(AttributePeer.ATTRIBUTE_ID, RModuleAttributePeer.ATTRIBUTE_ID); 
             if (USER.equals(attributeType))
             {
                 crit.add(AttributePeer.ATTRIBUTE_TYPE_ID, 

Modified: trunk/src/java/org/tigris/scarab/om/AbstractScarabUser.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/om/AbstractScarabUser.java?view=diff&pathrev=11024&r1=11023&r2=11024
==============================================================================
--- trunk/src/java/org/tigris/scarab/om/AbstractScarabUser.java	(original)
+++ trunk/src/java/org/tigris/scarab/om/AbstractScarabUser.java	2010-11-21 09:47:28-0800
@@ -429,14 +429,15 @@
         Object obj = ScarabCache.get(this, GET_R_MODULE_USERATTRIBUTES, 
                                      module, issueType); 
         if (obj == null) 
-        {        
+        {
+            Integer moduleId    = module.getModuleId();
+            Integer userId      = getUserId();
+            Integer issueTypeId = issueType.getIssueTypeId();
             Criteria crit = new Criteria()
-                .add(RModuleUserAttributePeer.USER_ID, getUserId())
-                .add(RModuleUserAttributePeer.MODULE_ID, module.getModuleId())
-                .add(RModuleUserAttributePeer.ISSUE_TYPE_ID, 
-                     issueType.getIssueTypeId())
-                .addAscendingOrderByColumn(
-                    RModuleUserAttributePeer.PREFERRED_ORDER);
+                .add(RModuleUserAttributePeer.USER_ID,       userId)
+                .add(RModuleUserAttributePeer.MODULE_ID,     moduleId)
+                .add(RModuleUserAttributePeer.ISSUE_TYPE_ID, issueTypeId)
+                .addAscendingOrderByColumn(RModuleUserAttributePeer.PREFERRED_ORDER);
             
             result = getRModuleUserAttributes(crit);
             ScarabCache.put(result, this, GET_R_MODULE_USERATTRIBUTES,  

Modified: trunk/src/java/org/tigris/scarab/om/MITList.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/om/MITList.java?view=diff&pathrev=11024&r1=11023&r2=11024
==============================================================================
--- trunk/src/java/org/tigris/scarab/om/MITList.java	(original)
+++ trunk/src/java/org/tigris/scarab/om/MITList.java	2010-11-21 09:47:28-0800
@@ -360,7 +360,8 @@
         Module module = null;
         if (item.getModuleId() == null)
         {
-            module = getScarabUser().getCurrentModule();
+            ScarabUser user = getScarabUser();
+            module = user.getCurrentModule();
         }
         else
         {
@@ -824,28 +825,25 @@
         }
         else
         {
-            Integer moduleId;
-            Integer issueTypeId;
+            Integer moduleId    = null;
+            Integer issueTypeId = null;
             
             if(isSingleModuleIssueType())
             {
-                moduleId    = getModule().getModuleId();
-                issueTypeId = getIssueType().getIssueTypeId();
+                Module module = getModule();
+                moduleId     = module.getModuleId();
+               
+                IssueType issueType = getIssueType();
+                issueTypeId   = issueType.getIssueTypeId();
             }
             else if (isSingleModule())
             {
                 moduleId    = getModule().getModuleId();
-                issueTypeId = null;
             }
             else if (isSingleIssueType())
             {
-                moduleId    = null;
-                issueTypeId = getIssueType().getIssueTypeId();
-            }
-            else
-            {
-                moduleId = null;
-                issueTypeId = null;
+                IssueType issueType = getIssueType();
+                issueTypeId   = issueType.getIssueTypeId();
             }
             
             crit.add(RModuleUserAttributePeer.LIST_ID,       null);

Modified: trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java?view=diff&pathrev=11024&r1=11023&r2=11024
==============================================================================
--- trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java	(original)
+++ trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java	2010-11-21 09:47:28-0800
@@ -108,6 +108,7 @@
 import org.tigris.scarab.om.MITListItem;
 import org.tigris.scarab.om.MITListItemManager;
 import org.tigris.scarab.om.MITListManager;
+import org.tigris.scarab.om.MITListPeer;
 import org.tigris.scarab.om.Module;
 import org.tigris.scarab.om.ModuleManager;
 import org.tigris.scarab.om.ParentChildAttributeOption;
@@ -621,6 +622,7 @@
                 //
 
                 //issueListColumns = currentList.getCommonRModuleUserAttributes();
+                ensure_List_has_MIT_data(currentList, module, issueType);
                 issueListColumns = currentList.getAllRModuleUserAttributes();
 
                 //
@@ -663,6 +665,60 @@
     }
 
     /**
+     * [HD]: This method is a repair for initialization issues.
+     * It should be superfluous, because the currentList should already have correctly
+     * initialized values. But sometimes this is not as expected. Hence here is the
+     * best possible fix:
+     * 
+     * If the list has no module assigen, take the one we provide in the API
+     * If the issueType is not defined, take the one we provide in the API
+     * If the IssueType is not correctly initialized, make it an All Modules, All IssueTypes itemlist
+     * 
+     * Questions: Why does a MITList have to ask its children for its type after all ?
+     * Shouldn't the IssueType be fixed for the entire list ?
+     * And what if there are MITLIstItems with different IssueType ?
+     * 
+     * @param currentList
+     * @param module
+     * @param issueType
+     * @throws TorqueException
+     */
+    private void ensure_List_has_MIT_data(MITList currentList, Module module, IssueType issueType) throws TorqueException 
+    {
+        if(currentList != null)
+        {
+            MITListItem item = currentList.getFirstItem();
+            if(item != null)
+            {
+                if(item.getModule() == null)
+                {
+                    // Ensure the item has been assigned to a module
+                    item.setModule(module);
+                }
+
+                IssueType itemIssueType = item.getIssueType();
+                if(itemIssueType == null)
+                {
+                    // item's issueType has not beeen initialized ?
+                    if(issueType == null)
+                    {                        
+                        // Our local IssueType has also not been created ??
+                        issueType = new IssueType();
+                    }
+                    item.setIssueType(issueType);
+                    itemIssueType = issueType;
+                }
+                if (itemIssueType.getIssueTypeId() == null)
+                {
+                    // No definition means "Do not care". Hence it is equal to "any issueType from any module":
+                    itemIssueType.setIssueTypeId(MITListPeer.ALL_MODULES_ISSUETYPES.intValue());
+                }
+            }
+            
+        }
+    }
+
+    /**
      * Find the best name for an attribute against the current mitList.
      *
      * This method is called from velocity:
@@ -866,6 +922,11 @@
             if (queryId == null || queryId.length() == 0)
             {
                 query = Query.getInstance();
+                Module m = getCurrentModule();
+                if(m != null)
+                {
+                    query.setModule(m);
+                }
             }
             else
             {
@@ -1780,7 +1841,7 @@
      *
      * @return a <code>Issue</code> value
      */
-    private IssueSearch getPopulatedSearch(String query)
+    private IssueSearch getPopulatedSearch(String queryString)
         throws Exception
     {
         IssueSearch search = getNewSearch();
@@ -1790,7 +1851,7 @@
         search.setIssueListAttributeColumns(getRModuleUserAttributes(theQuery));
         search.setLocalizationTool(getLocalizationTool());
 
-        StringValueParser parser = ScarabUtil.parseURL(query);
+        StringValueParser parser = ScarabUtil.parseURL(queryString);
 
         String[] userList = parser.getStrings("user_list");
         boolean searchInAllAttributes = parser.getBoolean("searchallattributes",false);

------------------------------------------------------
http://scarab.tigris.org/ds/viewMessage.do?dsForumId=3577&dsMessageId=2684088