Scarab commit: svn commit: r10716 - trunk/src/java/org/tigris/scarab/om/RModuleOption.java

Hussayn Dabbous <[email protected]>
Newsgroups gmane.comp.java.scarab.cvs
Message-ID <[email protected]>
Author: dabbous
Date: 2009-05-08 08:01:07-0700
New Revision: 10716

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

Log:
SCB2620: fix stack trace when deleting attribute options from issue types

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=10716&r1=10715&r2=10716
==============================================================================
--- trunk/src/java/org/tigris/scarab/om/RModuleOption.java	(original)
+++ trunk/src/java/org/tigris/scarab/om/RModuleOption.java	2009-05-08 08:01:07-0700
@@ -248,14 +248,27 @@
             }            
             else
             {
+                Integer moduleId    = getModuleId();
+                Integer issueTypeId = getIssueTypeId();
+                Integer optionId    = getOptionId();
+                int orderNumber     = getOrder();
+
+                // delete the option
                 final Criteria c = new Criteria()
-                    .add(RModuleOptionPeer.MODULE_ID, getModuleId())
-                    .add(RModuleOptionPeer.ISSUE_TYPE_ID, getIssueTypeId())
-                    .add(RModuleOptionPeer.OPTION_ID, getOptionId());
+                    .add(RModuleOptionPeer.MODULE_ID, moduleId)
+                    .add(RModuleOptionPeer.ISSUE_TYPE_ID, issueTypeId)
+                    .add(RModuleOptionPeer.OPTION_ID, optionId);
                 RModuleOptionPeer.doDelete(c);
+                
+                // delete associated workflow
                 WorkflowFactory.getInstance().deleteWorkflowsForOption(getAttributeOption(), 
                                              module, issueType);
+
+                // ======================================================
                 // Correct the ordering of the remaining options
+                // ======================================================
+
+                // first retrieve the list of still available option ids
                 final List optIds = new ArrayList();
                 final List rmos = module.getRModuleOptions(getAttributeOption().getAttribute(), issueType, false);
                 for (int i=0; i<rmos.size();i++)
@@ -263,19 +276,25 @@
                     final RModuleOption rmo = (RModuleOption)rmos.get(i);
                     optIds.add(rmo.getOptionId());
                 }
-                final Criteria c2 = new Criteria()
-                    .add(RModuleOptionPeer.MODULE_ID, getModuleId())
-                    .add(RModuleOptionPeer.ISSUE_TYPE_ID, getIssueTypeId())
-                    .addIn(RModuleOptionPeer.OPTION_ID, optIds)
-                    .add(RModuleOptionPeer.PREFERRED_ORDER, getOrder(), Criteria.GREATER_THAN);
-                final List adjustRmos = RModuleOptionPeer.doSelect(c2);
-                for (int j=0; j<adjustRmos.size();j++)
+               
+                // Need to perform the correction only if the deleted option had follow up options
+                if(optIds != null && optIds.size() > 0)
                 {
-                    final RModuleOption rmo = (RModuleOption)adjustRmos.get(j);
-                    //rmos.remove(rmo);
-                    rmo.setOrder(rmo.getOrder() -1);
-                    rmo.save();
-                    //rmos.add(rmo);
+                    // update the list
+                    final Criteria c2 = new Criteria()
+                        .add(RModuleOptionPeer.MODULE_ID,       moduleId)
+                        .add(RModuleOptionPeer.ISSUE_TYPE_ID,   issueTypeId)
+                        .addIn(RModuleOptionPeer.OPTION_ID,     optIds)
+                        .add(RModuleOptionPeer.PREFERRED_ORDER, orderNumber, Criteria.GREATER_THAN);
+                    final List adjustRmos = RModuleOptionPeer.doSelect(c2);
+                    for (int j=0; j<adjustRmos.size();j++)
+                    {
+                        final RModuleOption rmo = (RModuleOption)adjustRmos.get(j);
+                        //rmos.remove(rmo);
+                        rmo.setOrder(rmo.getOrder() -1);
+                        rmo.save();
+                        //rmos.add(rmo);
+                    }
                 }
             }
             // notify module cache of this change

------------------------------------------------------
http://scarab.tigris.org/ds/viewMessage.do?dsForumId=3577&dsMessageId=2115378
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.