1 21 22 package org.opensubsystems.patterns.ordereddata.util; 23 24 import java.util.Collection ; 25 import java.util.Collections ; 26 import java.util.Iterator ; 27 import java.util.List ; 28 29 import javax.servlet.http.HttpServletRequest ; 30 31 import org.opensubsystems.core.data.DataObject; 32 import org.opensubsystems.core.util.DataObjectOrderingComparator; 33 import org.opensubsystems.core.util.DataObjectUtils; 34 import org.opensubsystems.core.www.WebCommonConstants; 35 import org.opensubsystems.patterns.ordereddata.data.OrderedData; 36 37 45 public final class OrderedDataUtils 46 { 47 49 55 public static final String ORDERED_ITEMS_POSTFIX = "_ORDERED_ITEMS"; 56 57 59 62 private OrderedDataUtils( 63 ) 64 { 65 } 67 68 70 88 public static Collection updateOrder( 89 HttpServletRequest hsrqRequest, 90 Collection colDataObjects, 91 String strParamPrefix 92 ) 93 { 94 97 StringBuffer sbParamName = new StringBuffer (); 98 sbParamName.append(strParamPrefix); 100 sbParamName.append(ORDERED_ITEMS_POSTFIX); 101 102 String strOrderedItems = hsrqRequest.getParameter(sbParamName.toString()); 103 104 if ((colDataObjects != null) && (!colDataObjects.isEmpty()) 105 && (strOrderedItems != null) && (strOrderedItems.length() > 0)) 106 { 107 Iterator itHelp; 110 OrderedData data = null; 111 for (itHelp = colDataObjects.iterator(); itHelp.hasNext();) 112 { 113 data = (OrderedData)itHelp.next(); 114 data.setOrderNumber(getOrder(strOrderedItems, 118 ((DataObject)data).getId())); 119 } 120 } 121 Collections.sort((List )colDataObjects, OrderedDataComparator.getInstance()); 123 124 return colDataObjects; 126 } 127 128 137 public static int getOrder( 138 String strOrderedItems, 139 int iItemId 140 ) 141 { 142 int iOrderReturn = 0; 143 144 int iIndexStart = -1; 145 int iIndexEnd = -1; 146 147 StringBuffer sbOrderedItems = new StringBuffer (); 148 StringBuffer sbId = new StringBuffer (); 149 sbOrderedItems.append(WebCommonConstants.OBJECT_SEPARATOR); 150 sbOrderedItems.append(strOrderedItems); 151 sbOrderedItems.append(WebCommonConstants.OBJECT_SEPARATOR); 152 153 sbId.append(WebCommonConstants.OBJECT_SEPARATOR); 154 sbId.append(iItemId); 155 sbId.append(WebCommonConstants.ITEM_SEPARATOR); 156 157 iIndexStart = sbOrderedItems.indexOf(sbId.toString()) + sbId.length(); 159 iIndexEnd = sbOrderedItems.indexOf(WebCommonConstants.OBJECT_SEPARATOR, iIndexStart); 160 161 iOrderReturn = Integer.parseInt(sbOrderedItems.substring(iIndexStart, iIndexEnd)); 162 163 return iOrderReturn; 164 } 165 166 176 public static String getEncodedOrder( 177 Collection colDataObjects 178 ) 179 { 180 StringBuffer sbOrderedItems = new StringBuffer (); 181 Iterator itHelp; 182 OrderedData data = null; 183 184 Collections.sort((List )colDataObjects, OrderedDataComparator.getInstance()); 187 188 for (itHelp = colDataObjects.iterator(); itHelp.hasNext();) 189 { 190 data = (OrderedData)itHelp.next(); 191 192 if (sbOrderedItems.length() > 0) 193 { 194 sbOrderedItems.append(WebCommonConstants.OBJECT_SEPARATOR); 195 } 196 sbOrderedItems.append(((DataObject)data).getId()); 197 sbOrderedItems.append(WebCommonConstants.ITEM_SEPARATOR); 198 sbOrderedItems.append(data.getOrderNumber()); 199 } 200 201 return sbOrderedItems.toString(); 202 } 203 204 220 public static byte compare( 221 List lstList1, 222 List lstList2 223 ) 224 { 225 byte bReturn = 0; 227 228 Iterator itHelp1; 229 Iterator itHelp2; 230 Object oHelp1; 231 Object oHelp2; 232 233 if ((lstList1 != null && lstList1.size() > 0) 235 && (lstList2 != null && lstList2.size() > 0)) 236 { 237 if (lstList1.size() == lstList2.size()) 239 { 240 itHelp1 = lstList1.iterator(); 242 itHelp2 = lstList2.iterator(); 243 while (((bReturn & DataObjectUtils.COMPARE_ORDER_CHANGED) == 0) 244 && (itHelp1.hasNext()) && (itHelp2.hasNext())) 245 { 246 oHelp1 = itHelp1.next(); 247 oHelp2 = itHelp2.next(); 248 if (((OrderedData) oHelp1).getOrderNumber() 253 != ((OrderedData) oHelp2).getOrderNumber()) 254 { 255 bReturn += DataObjectUtils.COMPARE_ORDER_CHANGED; 256 } 257 else if (!((DataObject) oHelp1).isSame(oHelp2)) 259 { 260 bReturn = DataObjectUtils.COMPARE_ATTRIBUTES_CHANGED; 261 } 262 } 263 264 if (((bReturn & DataObjectUtils.COMPARE_ORDER_CHANGED) != 0)) 266 { 267 Collections.sort(lstList1, OrderedDataComparator.getInstance()); 269 Collections.sort(lstList2, OrderedDataComparator.getInstance()); 270 271 itHelp1 = lstList1.iterator(); 273 itHelp2 = lstList2.iterator(); 274 while (((bReturn & DataObjectUtils.COMPARE_CHANGED) == 0) 275 && (itHelp1.hasNext()) && (itHelp2.hasNext())) 276 { 277 oHelp1 = itHelp1.next(); 278 oHelp2 = itHelp2.next(); 279 280 if (((OrderedData) oHelp1).getOrderNumber() 285 != ((OrderedData) oHelp2).getOrderNumber()) 286 { 287 bReturn = DataObjectUtils.COMPARE_CHANGED; 288 } 289 else 290 { 291 if (!((DataObject) oHelp1).isSame(oHelp2) 293 && ((bReturn & DataObjectUtils.COMPARE_ATTRIBUTES_CHANGED) == 0)) 294 { 295 bReturn += DataObjectUtils.COMPARE_ATTRIBUTES_CHANGED; 296 } 297 } 298 } 299 } 300 } 301 else 302 { 303 bReturn = DataObjectUtils.COMPARE_CHANGED; 305 } 306 } 307 else 308 { 309 if (((lstList1 != null) && (lstList1.size() > 0)) 312 || ((lstList2 != null) && (lstList2.size() > 0))) 313 { 314 bReturn = DataObjectUtils.COMPARE_CHANGED; 315 } 316 } 317 return bReturn; 318 } 319 320 334 public static byte compare( 335 int[] arrIdentifiers, 336 List lstList 337 ) 338 { 339 byte bReturn = 0; 341 342 Iterator itHelp; 343 Object oHelp; 344 int iCounter; 345 346 if ((arrIdentifiers != null && arrIdentifiers.length > 0) 348 && (lstList != null && lstList.size() > 0)) 349 { 350 if (arrIdentifiers.length == lstList.size()) 352 { 353 itHelp = lstList.iterator(); 355 iCounter = 0; 356 while (((bReturn & DataObjectUtils.COMPARE_ORDER_CHANGED) == 0) 357 && (itHelp.hasNext())) 358 { 359 oHelp = itHelp.next(); 360 if (arrIdentifiers[iCounter] != ((OrderedData) oHelp).getOrderNumber()) 365 { 366 bReturn = DataObjectUtils.COMPARE_ORDER_CHANGED; 367 } 368 iCounter++; 369 } 370 371 if (((bReturn & DataObjectUtils.COMPARE_ORDER_CHANGED) != 0)) 373 { 374 Collections.sort(lstList, new DataObjectOrderingComparator(arrIdentifiers)); 376 377 itHelp = lstList.iterator(); 379 iCounter = 0; 380 while (((bReturn & DataObjectUtils.COMPARE_CHANGED) == 0) 381 && (itHelp.hasNext())) 382 { 383 oHelp = itHelp.next(); 384 385 if (arrIdentifiers[iCounter] 390 != ((OrderedData) oHelp).getOrderNumber()) 391 { 392 bReturn = DataObjectUtils.COMPARE_CHANGED; 393 } 394 iCounter++; 395 } 396 } 397 } 398 else 399 { 400 bReturn = DataObjectUtils.COMPARE_CHANGED; 402 } 403 } 404 else 405 { 406 if ((arrIdentifiers != null && arrIdentifiers.length > 0) 409 || (lstList != null && lstList.size() > 0)) 410 { 411 bReturn = DataObjectUtils.COMPARE_CHANGED; 412 } 413 } 414 return bReturn; 415 } 416 } 417 | Popular Tags |