KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nemesis > forum > webapp > admin > action > MenuAction


1
2 package org.nemesis.forum.webapp.admin.action;
3
4 import java.io.InputStream JavaDoc;
5 import java.io.StringWriter JavaDoc;
6 import java.util.HashMap JavaDoc;
7 import java.util.Iterator JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import javax.servlet.http.HttpServletRequest JavaDoc;
11 import javax.servlet.http.HttpServletResponse JavaDoc;
12 import javax.xml.parsers.DocumentBuilder JavaDoc;
13 import javax.xml.parsers.DocumentBuilderFactory JavaDoc;
14 import javax.xml.transform.Transformer JavaDoc;
15 import javax.xml.transform.TransformerFactory JavaDoc;
16 import javax.xml.transform.dom.DOMSource JavaDoc;
17 import javax.xml.transform.stream.StreamResult JavaDoc;
18 import javax.xml.transform.stream.StreamSource JavaDoc;
19
20 import org.apache.struts.action.ActionForm;
21 import org.apache.struts.action.ActionForward;
22 import org.apache.struts.action.ActionMapping;
23 import org.nemesis.forum.util.SecurityTools;
24 import org.w3c.dom.Document JavaDoc;
25 import org.w3c.dom.Element JavaDoc;
26 import org.w3c.dom.Node JavaDoc;
27 import org.w3c.dom.NodeList JavaDoc;
28
29
30
31
32
33 /**
34  * controller de Menu
35  *
36  * @author dlaurent
37  * 15:06:28
38  * :TODO: optimize menu system ??? any idea ???
39  */

40 public class MenuAction extends BaseAction {
41
42     public ActionForward execute(ActionMapping mapping,
43                  ActionForm form,
44                  HttpServletRequest JavaDoc request,
45                  HttpServletResponse JavaDoc response)
46     throws Exception JavaDoc {
47
48         checkUser(request);
49
50         try {
51             
52             Map JavaDoc parameters =new HashMap JavaDoc();
53             if (request.getParameter("tab")==null)
54                  parameters.put("selectedTab","NULL");
55             else
56                 parameters.put("selectedTab",request.getParameter("tab"));
57             
58             
59             parameters.put("langage",getLocale(request)+"");
60
61             
62             InputStream JavaDoc in = getClass().getClassLoader().getResourceAsStream("resources/menu.xml");
63             DocumentBuilderFactory JavaDoc factory = DocumentBuilderFactory.newInstance();
64             DocumentBuilder JavaDoc builder = factory.newDocumentBuilder();
65             Document JavaDoc doc =builder.parse(in);
66             Element JavaDoc root = doc.getDocumentElement();
67             if (parameters != null) {
68                 Iterator JavaDoc i = parameters.keySet().iterator();
69                 while (i.hasNext()) {
70                     Object JavaDoc key = i.next();
71                     Object JavaDoc value = parameters.get(key);
72                     root.setAttribute(key.toString(), value.toString());
73                 }
74             }
75             
76             //replace ressources &check permission
77
process(doc.getDocumentElement(),request);
78
79
80             InputStream JavaDoc in_xsl = getClass().getClassLoader().getResourceAsStream("resources/menu.xsl");
81             TransformerFactory JavaDoc tf = TransformerFactory.newInstance();
82             Transformer JavaDoc t = tf.newTransformer(new StreamSource JavaDoc(in_xsl));
83             
84             StringWriter JavaDoc result = new StringWriter JavaDoc();
85             t.transform(new DOMSource JavaDoc(doc), new StreamResult JavaDoc(result));
86
87             
88             request.setAttribute("menu_xml",result.toString());
89
90         } catch (Exception JavaDoc e) {
91             e.printStackTrace();
92             
93         }
94                 
95         return (mapping.findForward("view"));
96         
97
98     }
99
100     private void process(Element JavaDoc el,HttpServletRequest JavaDoc request){
101         if(!"".equals(el.getAttribute("label")))
102             el.setAttribute("label",getResources(request).getMessage(getLocale(request),el.getAttribute("label")));
103         
104         NodeList JavaDoc l =el.getChildNodes();
105         
106         for(int i=0;i<l.getLength();i++) {
107             if(l.item(i).getNodeType()!=Node.ELEMENT_NODE) continue;
108             String JavaDoc perms =((Element JavaDoc)l.item(i)).getAttribute("permission");
109             if(! isAllowed(perms,request)){
110                     el.removeChild(l.item(i)) ;
111             }
112         }
113         
114         l =el.getChildNodes();
115         for(int i=0;i<l.getLength();i++) {
116             if(l.item(i).getNodeType()==Node.ELEMENT_NODE){
117                 process((Element JavaDoc)l.item(i),request);
118             }
119                 
120         }
121     }
122     
123     private boolean isAllowed(String JavaDoc perms,HttpServletRequest JavaDoc request){
124         if("".equals(perms))return true;
125
126         if(perms.indexOf("systemAdmin")!=-1 && SecurityTools.isSystemAdmin(getAuthToken(request)))
127             return true;
128         if(perms.indexOf("forumAdmin")!=-1 && SecurityTools.isForumAdmin(getAuthToken(request)))
129             return true;
130         if(perms.indexOf("forumModerator")!=-1 && SecurityTools.isForumModerator(getAuthToken(request)))
131             return true;
132         if(perms.indexOf("groupAdmin")!=-1 && SecurityTools.isGroupAdmin(getAuthToken(request)))
133             return true;
134         
135         return false;
136     }
137
138 }
139
Popular Tags