KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > contineo > admin > dao > MenuDAO


1 /*
2  * MenuDAO.java
3  *
4  * Created on 19. August 2003, 14:10
5  */

6
7 package org.contineo.admin.dao;
8
9 import java.util.ArrayList JavaDoc;
10 import java.util.Collection JavaDoc;
11 import java.util.Iterator JavaDoc;
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 /**
32  * This class is a DAO-service for menu objects.
33  * @author Michael Scholz
34  * @version 1.0
35  */

36 public class MenuDAO {
37
38     /**
39      * @uml.property name="broker"
40      * @uml.associationEnd
41      */

42     private PersistenceBroker broker = null;
43
44     /**
45      * @uml.property name="pbkey"
46      * @uml.associationEnd
47      */

48     private PBKey pbkey;
49
50     /**
51      * @uml.property name="logger"
52      * @uml.associationEnd
53      */

54     private Logger logger;
55
56     
57     /** Creates a new instance of MenuDAO */
58     public MenuDAO() {
59         logger = LoggingManager.getLogger(this.getClass());
60         pbkey = new PBKey("contineo");
61     }
62
63     /**
64      * This method persists the menu object.
65      * @param menu Menu to be stored.
66      * @return True if successful stored in a database.
67      */

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 JavaDoc 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     /**
88      * This method deletes a menu in database.
89      * @param menuid Menu to be deleted.
90      * @return True if successful deleted.
91      */

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 JavaDoc(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_te = new QueryByCriteria(Term.class);
101
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_te);
106
broker.deleteByQuery(query_sd);
107             broker.deleteByQuery(query_ti);
108             broker.deleteByQuery(query);
109             broker.commitTransaction();
110         }
111         catch (Exception JavaDoc 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     /**
123      * Finds a menu by primarykey.
124      * @param menuid Primarykey of wanted menu.
125      * @return Wanted menu or null.
126      */

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 JavaDoc(menuid));
133             Query query = new QueryByCriteria(org.contineo.admin.Menu.class, crit);
134             menu = (Menu)broker.getObjectByQuery(query);
135         }
136         catch (Exception JavaDoc 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     /**
146      * Finds all menus by menutext.
147      * @param menutext
148      * @return Collection of menus with given menutext.
149      */

150     public Collection JavaDoc findByMenuText(String JavaDoc menutext) {
151         Collection JavaDoc 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 JavaDoc 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     /**
169      * Finds authorized menus for a user.
170      * @param username Name of the user.
171      * @return Collection of found menus.
172      */

173     @SuppressWarnings JavaDoc("unchecked")
174     public Collection JavaDoc<Menu> findByUserName(String JavaDoc username) {
175         Collection JavaDoc<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 JavaDoc precoll = broker.getCollectionByQuery(prequery);
182             Iterator JavaDoc iter = precoll.iterator();
183             Criteria crit = new Criteria();
184             Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc 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     /**
203      * Finds authorized menus for a user having a specified keyword.
204      * @param username Name of the user.
205      * @param keyword Keyword of the document bind with the menu.
206      * @return Collection of found menus.
207      */

208     public Collection JavaDoc findByUserNameAndKeyword(String JavaDoc username, String JavaDoc keyword) {
209         Collection JavaDoc 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 JavaDoc precoll = broker.getCollectionByQuery(prequery);
216             Iterator JavaDoc iter = precoll.iterator();
217             Criteria crit = new Criteria();
218             Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc 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 JavaDoc 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     /**
240      * Finds direct children of a menu.
241      * @param parentid Menuid of the menu which children are wanted.
242      * @return Collection of found menus.
243      */

244     public Collection JavaDoc findByUserName(String JavaDoc username, int parentid) {
245         Collection JavaDoc 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 JavaDoc precoll = broker.getCollectionByQuery(prequery);
252             Iterator JavaDoc iter = precoll.iterator();
253             Criteria crit = new Criteria();
254             Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc(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 JavaDoc 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     /**
277      * Finds direct children of a menu.
278      * @param parentid Menuid of the menu which children are wanted.
279      * @return Collection of found menus.
280      */

281     @SuppressWarnings JavaDoc("unchecked")
282     protected Collection JavaDoc<Menu> findChildren(int parentid) {
283         Collection JavaDoc<Menu> coll = null;
284         try {
285             broker = PersistenceBrokerFactory.createPersistenceBroker(pbkey);
286             Criteria crit = new Criteria();
287             crit.addEqualTo("co_menuparent", new Integer JavaDoc(parentid));
288             QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true);
289             coll = broker.getCollectionByQuery(query);
290         }
291         catch (Exception JavaDoc 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     /**
301      * Finds all children by parentid
302      * @param parentid
303      * @return
304      */

305     public Collection JavaDoc<Menu> findByParentId(int parentid) {
306         Collection JavaDoc<Menu> coll = new ArrayList JavaDoc<Menu>();
307         Collection JavaDoc<Menu> temp = findChildren(parentid);
308         Iterator JavaDoc iter = temp.iterator();
309         while (iter.hasNext()) {
310             Menu menu = (Menu)iter.next();
311             coll.add(menu);
312             Collection JavaDoc<Menu> coll2 = findChildren(menu.getMenuId());
313             if (coll2 != null)
314                 coll.addAll(coll2);
315         }
316         return coll;
317     }
318
319     /**
320      * This method is looking up for writing rights for a menu and an user.
321      * @param menuid ID of the menu.
322      * @param username Name of the user.
323      */

324     public boolean isWriteEnable(int menuid, String JavaDoc 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 JavaDoc precoll = broker.getCollectionByQuery(prequery);
332             Iterator JavaDoc iter = precoll.iterator();
333             Criteria crit = new Criteria();
334             Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc(1));
341             crit.addEqualTo("org.contineo.admin.Menu.menuGroup.menuId", new Integer JavaDoc(menuid));
342             QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true);
343             Collection JavaDoc coll = broker.getCollectionByQuery(query);
344             if (coll == null || coll.size() < 1)
345                 result = false;
346         }
347         catch (Exception JavaDoc 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 JavaDoc 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 JavaDoc precoll = broker.getCollectionByQuery(prequery);
365             Iterator JavaDoc iter = precoll.iterator();
366             Criteria crit = new Criteria();
367             Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
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 JavaDoc(menuid));
374             QueryByCriteria query = new QueryByCriteria(org.contineo.admin.Menu.class, crit, true);
375             Collection JavaDoc coll = broker.getCollectionByQuery(query);
376             if (coll == null || coll.size() < 1)
377                 result = false;
378         } catch (Exception JavaDoc 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     /**
389      * This method selects a menu without any relationobject.
390      * @param menuid Id of the menu.
391      * @return Selected menu.
392      */

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 JavaDoc(menuid));
399             ReportQueryByCriteria query = new ReportQueryByCriteria(org.contineo.admin.Menu.class, crit);
400             query.setAttributes(new String JavaDoc[]{"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 JavaDoc 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     /**
413      * This method selects only the menutext from a menu.
414      * @param menuid Id of the menu.
415      * @return Selected menutext.
416      */

417     public String JavaDoc findMenuTextByMenuId(int menuid) {
418         Menu menu = this.findMenuByMenuId(menuid);
419         return menu.getMenuText();
420     }
421     
422     /**
423      * This method selects only the menuid from the menus for which a user is authorized.
424      * @param username Name of the user.
425      * @return Collection of selected menuid's.
426      */

427     public Collection JavaDoc findMenuIdByUserName(String JavaDoc username) {
428         Collection JavaDoc coll = findByUserName(username);
429         Collection JavaDoc<String JavaDoc> coll2 = new ArrayList JavaDoc<String JavaDoc>();
430         try {
431             Iterator JavaDoc 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 JavaDoc e) {
438             if (logger.isEnabledFor(Level.ERROR))
439                 logger.error(e.getMessage());
440         }
441         return coll2;
442     }
443     
444     /**
445      * returns a collection with sub-menus contained in menu with the given id
446      * @param menuid return all menus in this menu
447      * @param userName only return those menus the user has at least read access to
448      * @return a collection containing elements of type {@link ExtMenu}
449      */

450     public Collection JavaDoc<ExtMenu> getContainedMenus(int menuid, String JavaDoc userName) {
451         Collection JavaDoc<ExtMenu> coll2 = new ArrayList JavaDoc<ExtMenu>();
452         Collection JavaDoc coll = findByUserName(userName, menuid);
453         Iterator JavaDoc iter = coll.iterator();
454         SettingConfigurator settings = new SettingConfigurator();
455         String JavaDoc docpath = settings.getValue("docdir");
456         while (iter.hasNext()) {
457             Menu menu = (Menu)iter.next();
458             ExtMenu xmenu = new ExtMenu(menu);
459             
460             // calculate size of menu
461
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             // check if menu is writable
472
boolean writable = false;
473             if (isWriteEnable(menu.getMenuId(), userName)) {
474                 writable = true;
475             } else {
476                 writable = false;
477             }
478             xmenu.setWritable(writable);
479             
480             // only done on documents
481
// set the checkout/checkin status of the document
482
// set the checkout user, if the document is checked out
483
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     /**
499      * returns if a menu is writeable for a user
500      * @param menuid check this menu
501      * @param userName privileges for this should be checked
502      * @return a 0 if false, a 1 if true
503      */

504     public Integer JavaDoc isMenuWriteable(int menuid, String JavaDoc userName) {
505         boolean writePrivilegeBool = isWriteEnable(menuid, userName);
506         Integer JavaDoc writePrivilegeInt = 0;
507         if (writePrivilegeBool)
508             writePrivilegeInt = 1;
509         return writePrivilegeInt;
510     }
511     
512     /**
513      * checks that the user has access to the menu and all its sub-items
514      */

515     public boolean hasWriteAccess(Menu menu, String JavaDoc p_userName) {
516         if (isWriteEnable(menu.getMenuId(), p_userName) == false)
517             return false;
518         if (menu.getMenuType() == Menu.MENUTYPE_DIRECTORY) {
519             Collection JavaDoc<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