1 6 7 package org.contineo.admin.dao; 8 9 import java.util.ArrayList ; 10 import java.util.Collection ; 11 import java.util.Iterator ; 12 import org.apache.log4j.Level; 13 import org.apache.log4j.Logger; 14 import org.apache.ojb.broker.PBKey; 15 import org.apache.ojb.broker.PersistenceBroker; 16 import org.apache.ojb.broker.PersistenceBrokerFactory; 17 import org.apache.ojb.broker.query.Criteria; 18 import org.apache.ojb.broker.query.Query; 19 import org.apache.ojb.broker.query.QueryByCriteria; 20 import org.apache.ojb.broker.query.ReportQueryByCriteria; 21 import org.contineo.admin.ExtMenu; 22 import org.contineo.admin.Menu; 23 import org.contineo.admin.UserGroup; 24 import org.contineo.core.FileBean; 25 import org.contineo.core.LoggingManager; 26 import org.contineo.core.config.SettingConfigurator; 27 import org.contineo.documan.Document; 28 import org.contineo.documan.DownloadTicket; 29 import org.contineo.documan.dao.DocumentDAO; 30 import org.contineo.searchengine.SearchDocument; 31 36 public class MenuDAO { 37 38 42 private PersistenceBroker broker = null; 43 44 48 private PBKey pbkey; 49 50 54 private Logger logger; 55 56 57 58 public MenuDAO() { 59 logger = LoggingManager.getLogger(this.getClass()); 60 pbkey = new PBKey("contineo"); 61 } 62 63 68 public boolean store(Menu menu) { 69 boolean result = true; 70 try { 71 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 72 broker.beginTransaction(); 73 broker.store(menu); 74 broker.commitTransaction(); 75 } 76 catch (Exception e) { 77 broker.abortTransaction(); 78 if (logger.isEnabledFor(Level.ERROR)) 79 logger.error(e.getMessage()); 80 result = false; 81 } finally { 82 if (broker != null) broker.close(); 83 } 84 return result; 85 } 86 87 92 public boolean delete(int menuid) { 93 boolean result = true; 94 try { 95 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 96 Criteria crit = new Criteria(); 97 crit.addEqualTo("co_menuid", new Integer (menuid)); 98 Query query = new QueryByCriteria(org.contineo.admin.Menu.class, crit); 99 Query query_mg = new QueryByCriteria(org.contineo.admin.MenuGroup.class, crit); 100 Query query_sd = new QueryByCriteria(SearchDocument.class); 102 Query query_ti = new QueryByCriteria(DownloadTicket.class); 103 broker.beginTransaction(); 104 broker.deleteByQuery(query_mg); 105 broker.deleteByQuery(query_sd); 107 broker.deleteByQuery(query_ti); 108 broker.deleteByQuery(query); 109 broker.commitTransaction(); 110 } 111 catch (Exception e) { 112 broker.abortTransaction(); 113 if (logger.isEnabledFor(Level.ERROR)) 114 logger.error(e.getMessage()); 115 result = false; 116 } finally { 117 if (broker != null) broker.close(); 118 } 119 return result; 120 } 121 122 127 public Menu findByPrimaryKey(int menuid) { 128 Menu menu = new Menu(); 129 try { 130 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 131 Criteria crit = new Criteria(); 132 crit.addEqualTo("co_menuid", new Integer (menuid)); 133 Query query = new QueryByCriteria(org.contineo.admin.Menu.class, crit); 134 menu = (Menu)broker.getObjectByQuery(query); 135 } 136 catch (Exception e) { 137 if (logger.isEnabledFor(Level.ERROR)) 138 logger.error(e.getMessage()); 139 } finally { 140 if (broker != null) broker.close(); 141 } 142 return menu; 143 } 144 145 150 public Collection findByMenuText(String menutext) { 151 Collection coll = null; 152 try { 153 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 154 Criteria crit = new Criteria(); 155 crit.addEqualTo("co_menutext", menutext); 156 Query query = new QueryByCriteria(org.contineo.admin.Menu.class, crit); 157 coll = broker.getCollectionByQuery(query); 158 } 159 catch (Exception e) { 160 if (logger.isEnabledFor(Level.ERROR)) 161 logger.error(e.getMessage()); 162 } finally { 163 if (broker != null) broker.close(); 164 } 165 return coll; 166 } 167 168 173 @SuppressWarnings ("unchecked") 174 public Collection <Menu> findByUserName(String username) { 175 Collection <Menu> coll = null; 176 try { 177 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 178 Criteria precrit = new Criteria(); 179 precrit.addEqualTo("co_username", username); 180 ReportQueryByCriteria prequery = new ReportQueryByCriteria(org.contineo.admin.UserGroup.class, precrit); 181 Collection precoll = broker.getCollectionByQuery(prequery); 182 Iterator iter = precoll.iterator(); 183 Criteria crit = new Criteria(); 184 Collection <String > coll2 = new ArrayList <String >(); 185 while (iter.hasNext()) { 186 UserGroup ug = (UserGroup)iter.next(); 187 coll2.add(ug.getGroupName()); 188 } 189 crit.addIn("org.contineo.admin.Menu.menuGroup.groupName", coll2); 190 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 191 coll = broker.getCollectionByQuery(query); 192 } 193 catch (Exception e) { 194 if (logger.isEnabledFor(Level.ERROR)) 195 logger.error(e.getMessage()); 196 } finally { 197 if (broker != null) broker.close(); 198 } 199 return coll; 200 } 201 202 208 public Collection findByUserNameAndKeyword(String username, String keyword) { 209 Collection coll = null; 210 try { 211 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 212 Criteria precrit = new Criteria(); 213 precrit.addEqualTo("co_username", username); 214 ReportQueryByCriteria prequery = new ReportQueryByCriteria(org.contineo.admin.UserGroup.class, precrit); 215 Collection precoll = broker.getCollectionByQuery(prequery); 216 Iterator iter = precoll.iterator(); 217 Criteria crit = new Criteria(); 218 Collection <String > coll2 = new ArrayList <String >(); 219 while (iter.hasNext()) { 220 UserGroup ug = (UserGroup)iter.next(); 221 coll2.add(ug.getGroupName()); 222 } 223 crit.addIn("org.contineo.admin.Menu.menuGroup.groupName", coll2); 224 DocumentDAO docDao = new DocumentDAO(); 225 Collection ids = docDao.findMenuIdByKeyword(keyword); 226 crit.addIn("menuId", ids); 227 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 228 coll = broker.getCollectionByQuery(query); 229 } 230 catch (Exception e) { 231 if (logger.isEnabledFor(Level.ERROR)) 232 logger.error(e.getMessage()); 233 } finally { 234 if (broker != null) broker.close(); 235 } 236 return coll; 237 } 238 239 244 public Collection findByUserName(String username, int parentid) { 245 Collection coll = null; 246 try { 247 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 248 Criteria precrit = new Criteria(); 249 precrit.addEqualTo("co_username", username); 250 ReportQueryByCriteria prequery = new ReportQueryByCriteria(org.contineo.admin.UserGroup.class, precrit); 251 Collection precoll = broker.getCollectionByQuery(prequery); 252 Iterator iter = precoll.iterator(); 253 Criteria crit = new Criteria(); 254 Collection <String > coll2 = new ArrayList <String >(); 255 while (iter.hasNext()) { 256 UserGroup ug = (UserGroup)iter.next(); 257 coll2.add(ug.getGroupName()); 258 } 259 crit.addIn("org.contineo.admin.Menu.menuGroup.groupName", coll2); 260 crit.addEqualTo("co_menuparent", new Integer (parentid)); 261 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 262 query.addOrderBy("co_menutype", true); 263 query.addOrderBy("co_menusort", true); 264 query.addOrderBy("co_menutext", true); 265 coll = broker.getCollectionByQuery(query); 266 } 267 catch (Exception e) { 268 if (logger.isEnabledFor(Level.ERROR)) 269 logger.error(e.getMessage()); 270 } finally { 271 if (broker != null) broker.close(); 272 } 273 return coll; 274 } 275 276 281 @SuppressWarnings ("unchecked") 282 protected Collection <Menu> findChildren(int parentid) { 283 Collection <Menu> coll = null; 284 try { 285 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 286 Criteria crit = new Criteria(); 287 crit.addEqualTo("co_menuparent", new Integer (parentid)); 288 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 289 coll = broker.getCollectionByQuery(query); 290 } 291 catch (Exception e) { 292 if (logger.isEnabledFor(Level.ERROR)) 293 logger.error(e.getMessage()); 294 } finally { 295 if (broker != null) broker.close(); 296 } 297 return coll; 298 } 299 300 305 public Collection <Menu> findByParentId(int parentid) { 306 Collection <Menu> coll = new ArrayList <Menu>(); 307 Collection <Menu> temp = findChildren(parentid); 308 Iterator iter = temp.iterator(); 309 while (iter.hasNext()) { 310 Menu menu = (Menu)iter.next(); 311 coll.add(menu); 312 Collection <Menu> coll2 = findChildren(menu.getMenuId()); 313 if (coll2 != null) 314 coll.addAll(coll2); 315 } 316 return coll; 317 } 318 319 324 public boolean isWriteEnable(int menuid, String username) { 325 boolean result = true; 326 try { 327 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 328 Criteria precrit = new Criteria(); 329 precrit.addEqualTo("co_username", username); 330 ReportQueryByCriteria prequery = new ReportQueryByCriteria(org.contineo.admin.UserGroup.class, precrit); 331 Collection precoll = broker.getCollectionByQuery(prequery); 332 Iterator iter = precoll.iterator(); 333 Criteria crit = new Criteria(); 334 Collection <String > coll2 = new ArrayList <String >(); 335 while (iter.hasNext()) { 336 UserGroup ug = (UserGroup)iter.next(); 337 coll2.add(ug.getGroupName()); 338 } 339 crit.addIn("org.contineo.admin.Menu.menuGroup.groupName", coll2); 340 crit.addEqualTo("org.contineo.admin.Menu.menuGroup.writeEnable", new Integer (1)); 341 crit.addEqualTo("org.contineo.admin.Menu.menuGroup.menuId", new Integer (menuid)); 342 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 343 Collection coll = broker.getCollectionByQuery(query); 344 if (coll == null || coll.size() < 1) 345 result = false; 346 } 347 catch (Exception e) { 348 if (logger.isEnabledFor(Level.ERROR)) 349 logger.error(e.getMessage()); 350 result = false; 351 } finally { 352 if (broker != null) broker.close(); 353 } 354 return result; 355 } 356 357 public boolean isReadEnable(int menuid, String username) { 358 boolean result = true; 359 try { 360 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 361 Criteria precrit = new Criteria(); 362 precrit.addEqualTo("co_username", username); 363 ReportQueryByCriteria prequery = new ReportQueryByCriteria(org.contineo.admin.UserGroup.class, precrit); 364 Collection precoll = broker.getCollectionByQuery(prequery); 365 Iterator iter = precoll.iterator(); 366 Criteria crit = new Criteria(); 367 Collection <String > coll2 = new ArrayList <String >(); 368 while (iter.hasNext()) { 369 UserGroup ug = (UserGroup)iter.next(); 370 coll2.add(ug.getGroupName()); 371 } 372 crit.addIn("org.contineo.admin.Menu.menuGroup.groupName", coll2); 373 crit.addEqualTo("org.contineo.admin.Menu.menuGroup.menuId", new Integer (menuid)); 374 QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true); 375 Collection coll = broker.getCollectionByQuery(query); 376 if (coll == null || coll.size() < 1) 377 result = false; 378 } catch (Exception e) { 379 if (logger.isEnabledFor(Level.ERROR)) 380 logger.error(e.getMessage()); 381 result = false; 382 } finally { 383 if (broker != null) broker.close(); 384 } 385 return result; 386 } 387 388 393 public Menu findMenuByMenuId(int menuid) { 394 Menu result = new Menu(); 395 try { 396 broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey); 397 Criteria crit = new Criteria(); 398 crit.addEqualTo("co_menuid", new Integer (menuid)); 399 ReportQueryByCriteria query = new ReportQueryByCriteria(org.contineo.admin.Menu.class, crit); 400 query.setAttributes(new String []{"co_menuid","co_menutext","co_menuparent","co_menusort","co_menuicon","co_menupath","co_menutype","co_menuhier","co_menuref"}); 401 result = (Menu)broker.getObjectByQuery(query); 402 } 403 catch (Exception e) { 404 if (logger.isEnabledFor(Level.ERROR)) 405 logger.error(e.getMessage()); 406 } finally { 407 if (broker != null) broker.close(); 408 } 409 return result; 410 } 411 412 417 public String findMenuTextByMenuId(int menuid) { 418 Menu menu = this.findMenuByMenuId(menuid); 419 return menu.getMenuText(); 420 } 421 422 427 public Collection findMenuIdByUserName(String username) { 428 Collection coll = findByUserName(username); 429 Collection <String > coll2 = new ArrayList <String >(); 430 try { 431 Iterator iter = coll.iterator(); 432 while (iter.hasNext()) { 433 Menu menu = (Menu)iter.next(); 434 coll2.add(String.valueOf(menu.getMenuId())); 435 } 436 } 437 catch (Exception e) { 438 if (logger.isEnabledFor(Level.ERROR)) 439 logger.error(e.getMessage()); 440 } 441 return coll2; 442 } 443 444 450 public Collection <ExtMenu> getContainedMenus(int menuid, String userName) { 451 Collection <ExtMenu> coll2 = new ArrayList <ExtMenu>(); 452 Collection coll = findByUserName(userName, menuid); 453 Iterator iter = coll.iterator(); 454 SettingConfigurator settings = new SettingConfigurator(); 455 String docpath = settings.getValue("docdir"); 456 while (iter.hasNext()) { 457 Menu menu = (Menu)iter.next(); 458 ExtMenu xmenu = new ExtMenu(menu); 459 460 int size = 0; 462 if (menu.getMenuType() == Menu.MENUTYPE_FILE) { 463 long sz = FileBean.getSize(docpath + "/" + menu.getMenuPath() + "/" + menu.getMenuId() + "/" + menu.getMenuRef()); 464 sz = sz/1024; 465 size = (int)sz; 466 } else { 467 size = findByUserName(userName, menu.getMenuId()).size(); 468 } 469 xmenu.setSize(size); 470 471 boolean writable = false; 473 if (isWriteEnable(menu.getMenuId(), userName)) { 474 writable = true; 475 } else { 476 writable = false; 477 } 478 xmenu.setWritable(writable); 479 480 if (menu.getMenuType() == Menu.MENUTYPE_FILE) { 484 DocumentDAO ddao = new DocumentDAO(); 485 Document doc = ddao.findByMenuId(menu.getMenuId()); 486 487 if (doc != null) { 488 xmenu.setDocStatus(doc.getDocStatus()); 489 xmenu.setCheckoutUser(doc.getCheckoutUser()); 490 } 491 } 492 493 coll2.add(xmenu); 494 } 495 return coll2; 496 } 497 498 504 public Integer isMenuWriteable(int menuid, String userName) { 505 boolean writePrivilegeBool = isWriteEnable(menuid, userName); 506 Integer writePrivilegeInt = 0; 507 if (writePrivilegeBool) 508 writePrivilegeInt = 1; 509 return writePrivilegeInt; 510 } 511 512 515 public boolean hasWriteAccess(Menu menu, String p_userName) { 516 if (isWriteEnable(menu.getMenuId(), p_userName) == false) 517 return false; 518 if (menu.getMenuType() == Menu.MENUTYPE_DIRECTORY) { 519 Collection <Menu> children = findByParentId(menu.getMenuId()); 520 for (Menu subMenu : children) { 521 if (!hasWriteAccess(subMenu, p_userName)) 522 return false; 523 } 524 } 525 return true; 526 } 527 }
| Popular Tags
|