|
From: todd r. <to...@us...> - 2005-03-31 16:31:08
|
Update of /cvsroot/pocolap/pocolap/src/com/pocolap/servlets In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19672/src/com/pocolap/servlets Modified Files: SelectionHelper.java Log Message: Fixed bug in actionSelection that occassionally led to IndexOutOfBoundsException Index: SelectionHelper.java =================================================================== RCS file: /cvsroot/pocolap/pocolap/src/com/pocolap/servlets/SelectionHelper.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** SelectionHelper.java 24 Mar 2005 17:08:19 -0000 1.10 --- SelectionHelper.java 31 Mar 2005 16:30:56 -0000 1.11 *************** *** 55,59 **** protected Selector selector ; private HashMap parameters ; ! static Logger logger = Logger.getLogger(SelectionHelper.class); --- 55,75 ---- protected Selector selector ; private HashMap parameters ; ! ! private static Vector attrs; ! ! static { ! attrs = new Vector(); ! attrs.add(pocOLAPConstants.ATTR_ACROSSSELECTOR); ! attrs.add(pocOLAPConstants.ATTR_DETAIL_ITEM); ! attrs.add(pocOLAPConstants.ATTR_DOWNSELECTOR); ! attrs.add(pocOLAPConstants.ATTR_FILTER_ACTION); ! attrs.add(pocOLAPConstants.ATTR_FILTER_FIELD); ! attrs.add(pocOLAPConstants.ATTR_FILTER_TABLE); ! attrs.add(pocOLAPConstants.ATTR_FILTERS); ! attrs.add(pocOLAPConstants.ATTR_REPT_LIST); ! attrs.add(pocOLAPConstants.ATTR_REPT_SELECTED); ! attrs.add(pocOLAPConstants.ATTR_SCHEMA); ! } ! static Logger logger = Logger.getLogger(SelectionHelper.class); *************** *** 149,152 **** --- 165,169 ---- */ public void clearAttributes(HttpServletRequest req){ + String errclass = getClass().getName()+".clearAttributes(HttpServletRequest)"; Vector vector = new Vector(); Enumeration enumeration = req.getSession().getAttributeNames(); *************** *** 157,161 **** Iterator iter = vector.iterator(); while (iter.hasNext()){ ! req.getSession().removeAttribute((String)iter.next()); } } --- 174,187 ---- Iterator iter = vector.iterator(); while (iter.hasNext()){ ! String item = (String)iter.next(); ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": Evaluating "+item+" for removal"); ! } ! if (attrs.contains(item)){ ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": Removing " + item + " from session"); ! } ! req.getSession().removeAttribute(item); ! } } } *************** *** 203,206 **** --- 229,236 ---- direction = pocOLAPConstants.ACTION_ACROSS_START ; + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Direction of selection is \"" + direction+ "\""); + } + String number = action.replaceAll(direction,"");; if (number.equals("") || number.equals("0")){ *************** *** 212,215 **** --- 242,249 ---- Integer stop = new Integer(number); + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Depth of selection is " + stop); + } + if (crosstabdef!=null){ *************** *** 218,221 **** --- 252,259 ---- String rootname = ((String[])parameters.get(direction+"1"))[0]; + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Root for this selection is " + rootname); + } + if (rootname.equals(Selector.ROLLUP)){ selector = null; *************** *** 226,229 **** --- 264,272 ---- //No Selector? Let's make one selector = new Selector(crosstabdef,dim); + + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Selector has been created"); + } + }else{ if (stop.intValue()>=1){ *************** *** 242,249 **** //If we replaced the Selectors root, we'll skip the next part if (stop.intValue()>1){ for (int x=2;x<=stop.intValue();x++){ String selectedname = ((String[])parameters.get(direction+x))[0]; ! //TODO - rootname could be <ROLLUP> or <DRILLDOWN> or ======== ! //Assuming a group name for now if (selectedname.equals(Selector.ROLLUP) || selectedname.equals(Selector.DRILLDOWN)){ --- 285,302 ---- //If we replaced the Selectors root, we'll skip the next part if (stop.intValue()>1){ + + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Preparing to loop through groups, beginning at x=2"); + } + + //Let's see what has been selected for (int x=2;x<=stop.intValue();x++){ String selectedname = ((String[])parameters.get(direction+x))[0]; ! ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": x="+x+"; itemname="+selectedname); ! ! } ! if (selectedname.equals(Selector.ROLLUP) || selectedname.equals(Selector.DRILLDOWN)){ *************** *** 257,264 **** --- 310,326 ---- } }else if(selectedname.equals(Selector.DRILLDOWN)){ + + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Drilling down on this item"); + } + if (x==2 && selector.getItemCount()==1){ //We're working with a default item, so we //won't find it in selector + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Drilling into the default item"); + } + GroupItem defgroup = null; if (dim.getDefGroup()!=null) *************** *** 271,280 **** GroupItem defgroup1 = DefinitionHelper.getGroup(dim,selector.getSelectionItem(x).getGroupName()); String[] drilldowns = defgroup1.getDrilldownArray(); ! if (drilldowns!=null && drilldowns.length>0){ ! GroupItem group = DefinitionHelper.getGroup(dim,drilldowns[0]); ! if (group!=null){ ! selector.addGroup(group); } } }else{ --- 333,376 ---- GroupItem defgroup1 = DefinitionHelper.getGroup(dim,selector.getSelectionItem(x).getGroupName()); + if (logger.isDebugEnabled()){ + logger.debug(errclass+": Found the GroupItem " + defgroup1.getName() +" and preparing to process it"); + } + String[] drilldowns = defgroup1.getDrilldownArray(); ! if (drilldowns!=null && drilldowns.length>0){ ! //Need to find the first available (unused) drilldown ! for (int y=0;y<drilldowns.length;y++){ ! String dd = drilldowns[y]; ! ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": Determining whether " + dd+ " is already in the selector"); ! } ! ! boolean isused = false; ! for (int z=0;z<x;z++){ ! SelectionItem si = selector.getSelectionItem(z); ! if (si!=null && si.getGroupName()!=null && si.getGroupName().equals(dd)){ ! isused=true; ! break; ! } ! } ! ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": Determined the decision to use " + dd+ " is "+isused); ! } ! ! if (!isused){ ! //This one looks good! ! GroupItem group = DefinitionHelper.getGroup(dim,dd); ! if (group!=null){ ! selector.addGroup(group); ! if (logger.isDebugEnabled()){ ! logger.debug(errclass+": Added "+ group.getName()+" to the selector"); ! } ! } ! break; ! } } + } }else{ |