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

[email protected] Fri, 22 Jul 2011 07:44:02 -0700 (PDT)
Newsgroups gmane.comp.java.scarab.cvs
Message-ID <[email protected]>
Author: dabbous
Date: 2011-07-22 07:44:02-0700
New Revision: 11036

Modified:
   trunk/src/java/org/tigris/scarab/om/RModuleOption.java
   trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java

Log:
SCB3093 (Enhancement):  improve API to Module_option entries

Modified: trunk/src/java/org/tigris/scarab/om/RModuleOption.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/om/RModuleOption.java?view=diff&pathrev=11036&r1=11035&r2=11036
==============================================================================
--- trunk/src/java/org/tigris/scarab/om/RModuleOption.java	(original)
+++ trunk/src/java/org/tigris/scarab/om/RModuleOption.java	2011-07-22 07:44:02-0700
@@ -73,10 +73,10 @@
     implements Persistent
 {
 
-    private static final String R_MODULE_OPTION = 
-        "RModuleOption";
-    private static final String GET_RMOS = 
-        "getRMOs";
+    private static final String R_MODULE_OPTION                  = "RModuleOption";
+    private static final String GET_RMOS                         = "getRMOs";
+    private static final String GET_RMOS_FOR_ISSUETYPE           = "getRMOsForIssueType";
+    private static final String GET_RMOS_FOR_ISSUETYPE_AND_VALUE = "getRMOsForIssueTypeValue";
     
     private int level;
 
@@ -376,25 +376,118 @@
 
     public static List<RModuleOption> getRMOs(Integer moduleId)
     throws TorqueException
-{
-    List<RModuleOption> result = null;
-    Object obj = ScarabCache.get(R_MODULE_OPTION, GET_RMOS, moduleId); 
-    if (obj == null) 
-    {        
-        Criteria crit = new Criteria()
-            .add(RModuleOptionPeer.MODULE_ID, moduleId);
-        crit.addAscendingOrderByColumn(
-            RModuleOptionPeer.PREFERRED_ORDER);
-        result = (List<RModuleOption>)RModuleOptionPeer.doSelect(crit);
-        ScarabCache.put(result, R_MODULE_OPTION, GET_RMOS, 
-                        moduleId);
-    }
-    else 
     {
-        result = (List<RModuleOption>)obj;
+        List<RModuleOption> result = null;
+        Object obj = ScarabCache.get(R_MODULE_OPTION, GET_RMOS, moduleId); 
+        if (obj == null) 
+        {        
+            Criteria crit = new Criteria()
+                .add(RModuleOptionPeer.MODULE_ID, moduleId);
+            crit.addAscendingOrderByColumn(
+                RModuleOptionPeer.PREFERRED_ORDER);
+            result = (List<RModuleOption>)RModuleOptionPeer.doSelect(crit);
+            ScarabCache.put(result, R_MODULE_OPTION, GET_RMOS, 
+                            moduleId);
+        }
+        else 
+        {
+            result = (List<RModuleOption>)obj;
+        }
+        return result;
     }
-    return result;
-}
+  
+    /**
+     * Return the list of ModuleOptions for the current Module/IssueType combination
+     * Precondition: ModuleId and IssuetypeId must be set to reasonable values
+     * @param moduleId
+     * @param issueTypeId
+     * @return
+     * @throws TorqueException
+     */
+    public static List<RModuleOption> getRMOs(Integer moduleId, Integer issueTypeId) throws TorqueException
+    {
+        List<RModuleOption> result = null;
+        Object obj = ScarabCache.get(R_MODULE_OPTION, GET_RMOS_FOR_ISSUETYPE , moduleId, issueTypeId); 
+        if (obj == null) 
+        {        
+            Criteria crit = new Criteria()
+            .add(RModuleOptionPeer.MODULE_ID, moduleId)
+            .and(RModuleOptionPeer.ISSUE_TYPE_ID, issueTypeId);
+            crit.addAscendingOrderByColumn(
+                RModuleOptionPeer.PREFERRED_ORDER);
+            result = (List<RModuleOption>)RModuleOptionPeer.doSelect(crit);
+            ScarabCache.put(result, R_MODULE_OPTION, GET_RMOS_FOR_ISSUETYPE , moduleId, issueTypeId);
+        }
+        else 
+        {
+            result = (List<RModuleOption>)obj;
+        }
+        return result;
+    }    
     
+    /**
+     * Return the list of ModuleOptions for the current Module/IssueType combination
+     * having the given DisplayValue. This is a convenience method, so we can 
+     * use a human readable element in the velocity environment.
+     * 
+     * [HD]: This is used in a very weird context where i need to manually associate
+     * Elements of 2 dependent attribute lists with each other. Idealy Scarab would allow
+     * to define inter attribute dependencies like: 
+     * 
+     * if attribute x has value A then attribute y must be set to B
+     * if attribute y has value C then attribute x must become a selection list containing all allowed values)
+     * 
+     * For now this is done as needed within hard coded extension macros. And there
+     * i want to use the Display values instead of the OptionIds (knowing that this is a bad hack which may introduce redundancies).
+     * the plan is to get true dependencies added to the data model (I am working on it).
+     * 
+     * Precondition: ModuleId and IssuetypeId must be set to reasonable values
+     * @param moduleId
+     * @param issueTypeId
+     * @return
+     * @throws TorqueException
+     */
+    public static List<RModuleOption> getRMOs(Integer moduleId, Integer issueTypeId, String displayValue) throws TorqueException
+    {
+        List<RModuleOption> result = null;
+        Object obj = ScarabCache.get(R_MODULE_OPTION, GET_RMOS_FOR_ISSUETYPE_AND_VALUE , moduleId, issueTypeId, displayValue); 
+        if (obj == null) 
+        {
+            Criteria crit = new Criteria()
+            .add(RModuleOptionPeer.MODULE_ID, moduleId)
+            .and(RModuleOptionPeer.ISSUE_TYPE_ID, issueTypeId)
+            .and(RModuleOptionPeer.DISPLAY_VALUE, displayValue);
+            crit.addAscendingOrderByColumn(
+                RModuleOptionPeer.PREFERRED_ORDER);
+            result = (List<RModuleOption>)RModuleOptionPeer.doSelect(crit);
+            ScarabCache.put(result, R_MODULE_OPTION, GET_RMOS_FOR_ISSUETYPE_AND_VALUE , moduleId, issueTypeId, displayValue);
+        }
+        else 
+        {
+            result = (List<RModuleOption>)obj;
+        }
+        return result;
+    }    
+
+    /**
+     * See above for explanation.
+     * This is another convenience method which returns the first RModuleOptions which meets the
+     * given criteria. (Knowing that it is a bad solution).
+     * @param moduleId
+     * @param issueTypeId
+     * @param displayValue
+     * @return
+     * @throws TorqueException
+     */
+    public static RModuleOption getFirstRMO(Integer moduleId, Integer issueTypeId, String displayValue) throws TorqueException
+    {
+        RModuleOption result = null;
+        List<RModuleOption> rmos = getRMOs(moduleId, issueTypeId, displayValue);
+        if (rmos != null && rmos.size() > 0)
+        {
+            result = rmos.get(0);
+        }
+        return result;
+    }
     
 }

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=11036&r1=11035&r2=11036
==============================================================================
--- trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java	(original)
+++ trunk/src/java/org/tigris/scarab/tools/ScarabRequestTool.java	2011-07-22 07:44:02-0700
@@ -119,6 +119,7 @@
 import org.tigris.scarab.om.RModuleAttributeManager;
 import org.tigris.scarab.om.RModuleIssueType;
 import org.tigris.scarab.om.RModuleIssueTypePeer;
+import org.tigris.scarab.om.RModuleOption;
 import org.tigris.scarab.om.ROptionOption;
 import org.tigris.scarab.om.ReportManager;
 import org.tigris.scarab.om.ScarabUser;
@@ -3469,6 +3470,23 @@
         return RModuleIssueTypePeer.retrieveByPK(moduleId, issueTypeId);
     }
 
+    /**
+     * Get the module options for a specific module/issueType combination
+     * Used for the frontend (maybe refactor into separate tool ? )
+     * @param moduleId
+     * @return
+     * @throws TorqueException
+     */
+    public RModuleOption getFirstModuleOption(Module module, IssueType issueType, String displayValue) throws TorqueException
+    {
+        RModuleOption result = null;
+        if (module != null && issueType != null && displayValue != null)
+        {
+            result = RModuleOption.getFirstRMO(module.getModuleId(), issueType.getIssueTypeId(), displayValue);
+        }
+        return result;
+    }
+    
     public void clearCachedQueryResult()
     {
         data.getUser().removeTemp("queryResult");

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