KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > za > org > coefficient > modules > workflow > WorkflowAdmin


1 /*
2  * Coefficient - facilitates project based collaboration
3  * Copyright (C) 2003, Dylan Etkin, CSIR icomtek
4  * PO Box 395
5  * Pretoria 0001, RSA
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */

19
20 package za.org.coefficient.modules.workflow;
21
22 import net.sf.hibernate.HibernateException;
23
24 import za.co.csir.icomtek.workflow.WorkflowEvaluator;
25 import za.co.csir.icomtek.workflow.interfaces.WorkflowFinder;
26 import za.co.csir.icomtek.workflow.model.Workflow;
27
28 import za.org.coefficient.authentication.Role;
29 import za.org.coefficient.interfaces.CoefficientContext;
30 import za.org.coefficient.modules.BaseModule;
31 import net.sf.hibernate.util.HibernateUtil;
32 import za.org.coefficient.util.ejb.SecurityUtil;
33 import za.org.coefficient.util.ejb.VelocityScreenUtil;
34
35 import java.io.ByteArrayInputStream JavaDoc;
36 import java.io.InputStreamReader JavaDoc;
37
38 import java.util.ArrayList JavaDoc;
39 import java.util.HashMap JavaDoc;
40 import java.util.Iterator JavaDoc;
41 import java.util.List JavaDoc;
42
43 /**
44  * @pojo2ejb.class
45  * name="WorkflowAdmin"
46  * jndi-prefix="za/org/coefficient/admin/"
47  * interface-extends="za.org.coefficient.interfaces.Module, za.co.csir.icomtek.workflow.interfaces.WorkflowFinder"
48  * interface-local-extends="za.org.coefficient.interfaces.ModuleLocal, za.co.csir.icomtek.workflow.interfaces.WorkflowFinder"
49  *
50  * @web.resource-env-ref
51  * name="za/org/coefficient/admin/WorkflowAdmin"
52  * type="za.org.coefficient.modules.workflow.WorkflowAdmin"
53  * @web.resource-env-ref
54  * name="WorkflowAdmin"
55  * type="za.org.coefficient.modules.workflow.WorkflowAdmin"
56  */

57 public class WorkflowAdmin extends BaseModule implements WorkflowFinder {
58     //~ Static fields/initializers =============================================
59

60     private static final String JavaDoc SELECT_ALL =
61         "from za.org.coefficient.modules.workflow.WorkflowXMLData as workflowXMLData";
62
63     static {
64         try {
65             HibernateUtil.configureHibernateForClass(WorkflowXMLData.class);
66         } catch (Exception JavaDoc e) {
67             e.printStackTrace();
68         }
69     }
70
71     //~ Methods ================================================================
72

73     public List JavaDoc getAllWorkflows() throws Exception JavaDoc {
74         ArrayList JavaDoc workflows = new ArrayList JavaDoc();
75
76         List JavaDoc workflowDatas = HibernateUtil.findAll(WorkflowXMLData.class);
77         for (Iterator JavaDoc it = workflowDatas.iterator(); it.hasNext();) {
78             WorkflowXMLData xmlData = (WorkflowXMLData) it.next();
79             workflows.add(getProjectFromBytes(xmlData.getData()));
80         }
81
82         return workflows;
83     }
84
85     public String JavaDoc getMainMethod() {
86         return "viewWorkflows";
87     }
88
89     public String JavaDoc getModuleDescription() {
90         return "This module is used to upload and delete workflows in the system";
91     }
92
93     public String JavaDoc getModuleDisplayName() {
94         return "Workflow Administration";
95     }
96
97     public String JavaDoc canExecuteForRole(CoefficientContext ctx, String JavaDoc methodName,
98         Role usersHighestRole) {
99         if ((usersHighestRole.getRoleValue() != SecurityUtil.SITE_ADMIN_ROLE_VAL)
100             && (methodName.equals("viewWorkflows")
101             || methodName.equals("deleteWorkflows")
102             || methodName.equals("doUpload"))) {
103             return "Only the site administrator can upload workflows";
104         } else {
105             return null;
106         }
107     }
108
109     public CoefficientContext deleteWorkflow(CoefficientContext ctx) {
110         long workflowId = ctx.getParameterAsLongPrimitive("workflowId", -1);
111         String JavaDoc workflowName = ctx.getParameter("workflowName");
112         if (workflowId > 0) {
113             try {
114                 WorkflowXMLData data =
115                     (WorkflowXMLData)HibernateUtil.load(WorkflowXMLData.class,
116                                                         new Long JavaDoc(workflowId));
117                 HibernateUtil.delete(data);
118                 WorkflowEvaluator.deregisterWorkflow(workflowName);
119             } catch (HibernateException he) {
120                 he.printStackTrace();
121                 ctx.setError("unable to delete the workflow");
122             }
123         }
124         if (!ctx.isError()) {
125             ctx.setForward("workflowAdmin");
126         }
127         return ctx;
128     }
129
130     public CoefficientContext doUpload(CoefficientContext ctx) {
131         Workflow pw = null;
132         byte[] bytes = null;
133         try {
134             bytes = ctx.getUploadedFile("workflow")
135                        .getContent();
136             pw = getProjectFromBytes(bytes);
137         } catch (Exception JavaDoc e) {
138             e.printStackTrace();
139             ctx.setError(
140                 "uploaded file does not conform to the workflow definition");
141         }
142         if ((pw != null) && (bytes != null)) {
143             WorkflowXMLData xmlData = new WorkflowXMLData(pw.getName(), bytes);
144             try {
145                 HibernateUtil.save(xmlData);
146                 WorkflowEvaluator.registerWorkflow(pw);
147             } catch (HibernateException he) {
148                 he.printStackTrace();
149                 ctx.setError("Could not save the specified file");
150             }
151         }
152         if (!ctx.isError()) {
153             ctx.setForward("workflowAdmin");
154         }
155         return ctx;
156     }
157
158     public void genWorkflow(StringBuffer JavaDoc sb) {
159         Workflow pw = null;
160         byte[] bytes = null;
161         try {
162             bytes = sb.toString()
163                       .getBytes();
164             pw = getProjectFromBytes(bytes);
165         } catch (Exception JavaDoc e) {
166             System.out.println(
167                 "uploaded file does not conform to the workflow definition");
168         }
169         if ((pw != null) && (bytes != null)) {
170             WorkflowXMLData xmlData = new WorkflowXMLData(pw.getName(), bytes);
171             try {
172                 HibernateUtil.save(xmlData);
173                 WorkflowEvaluator.registerWorkflow(pw);
174             } catch (HibernateException he) {
175                 he.printStackTrace();
176                 System.out.println("Could not save the specified file");
177             }
178         }
179     }
180
181     public CoefficientContext viewWorkflows(CoefficientContext ctx) {
182         List JavaDoc workflows = null;
183
184         try {
185             workflows = HibernateUtil.findAll(WorkflowXMLData.class);
186         } catch (HibernateException he) {
187             ctx.setError("Can not load the existing workflows");
188             return ctx;
189         }
190
191         // Get html content
192
HashMap JavaDoc map = new HashMap JavaDoc();
193         map.put("module", this);
194         map.put("workflows", workflows);
195         StringBuffer JavaDoc sb = VelocityScreenUtil.getProcessedScreen("view.vm", map);
196
197         // Set the html into the context
198
ctx.setModuleContent(sb.toString(), getModuleDisplayName());
199         return ctx;
200     }
201
202     private Workflow getProjectFromBytes(byte[] bytes) throws Exception JavaDoc {
203         ByteArrayInputStream JavaDoc is = new ByteArrayInputStream JavaDoc(bytes);
204         InputStreamReader JavaDoc isr = new InputStreamReader JavaDoc(is);
205
206         return Workflow.unmarshal(isr);
207     }
208 }
209
Popular Tags