KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > portlets > workflows > factories > WorkflowsFactory


1 package com.dotmarketing.portlets.workflows.factories;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Date JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Set JavaDoc;
7
8 import com.dotmarketing.beans.Inode;
9 import com.dotmarketing.cms.factories.PublicUserFactory;
10 import com.dotmarketing.db.DotConnect;
11 import com.dotmarketing.factories.InodeFactory;
12 import com.dotmarketing.factories.RoleFactory;
13 import com.dotmarketing.portlets.files.model.File;
14 import com.dotmarketing.portlets.workflows.model.WorkflowComment;
15 import com.dotmarketing.portlets.workflows.model.WorkflowHistory;
16 import com.dotmarketing.portlets.workflows.model.WorkflowTask;
17 import com.dotmarketing.util.Config;
18 import com.dotmarketing.util.Logger;
19 import com.dotmarketing.util.Mailer;
20 import com.dotmarketing.util.UtilMethods;
21 import com.dotmarketing.util.WebKeys;
22 import com.dotmarketing.util.WebKeys.WorkflowStatuses;
23 import com.liferay.portal.model.Role;
24 import com.liferay.portal.model.User;
25
26 /**
27  *
28  * @author David
29  */

30 public class WorkflowsFactory {
31
32     // Workflow tasks methods
33
public static WorkflowTask getWorkflowTaskByInode(String JavaDoc inode) {
34         return (WorkflowTask) InodeFactory.getInode(inode, WorkflowTask.class);
35     }
36
37     public static WorkflowTask getWorkflowTaskByInode(long inode) {
38         return (WorkflowTask) InodeFactory.getInode(inode, WorkflowTask.class);
39     }
40
41     public static List JavaDoc<WorkflowTask> getWorkflowTasksAssignedToUser(String JavaDoc userId) {
42         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId + "'",
43                 "mod_date");
44     }
45
46     public static List JavaDoc<WorkflowTask> getWorkflowTasksAssignedToUser(String JavaDoc userId, WorkflowStatuses status) {
47         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId
48                 + "' and status = '" + status.toString() + "'", "mod_date");
49     }
50
51     public static List JavaDoc<WorkflowTask> getWorkflowTasksCreatedByUser(String JavaDoc userId) {
52         return InodeFactory
53                 .getInodesOfClassByCondition(WorkflowTask.class, "created_by = '" + userId + "'", "mod_date");
54     }
55
56     public static List JavaDoc<WorkflowTask> getWorkflowTasksResolvedByUser(String JavaDoc userId) {
57         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId
58                 + "' and status = " + WorkflowStatuses.RESOLVED.ordinal(), "mod_date");
59     }
60
61     public static List JavaDoc<WorkflowTask> getWorkflowTasksCancelledByUser(String JavaDoc userId) {
62         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "assigned_to = '" + userId
63                 + "' and status = " + WorkflowStatuses.CANCELLED.ordinal(), "mod_date");
64     }
65
66     public static List JavaDoc<WorkflowTask> getWorkflowTasksOpenWithoutAssignee(User user) {
67         List JavaDoc<WorkflowTask> tasks = new ArrayList JavaDoc<WorkflowTask>();
68         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
69         String JavaDoc rolesString = "";
70         for (Role role : userRoles) {
71             if (!rolesString.equals("")) {
72                 rolesString += ",";
73             }
74             rolesString += role.getRoleId();
75         }
76         if (rolesString.equals(""))
77             return tasks;
78         rolesString = "(" + rolesString + ")";
79         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class,
80                 "belongs_to in " + rolesString + " and status = " + WorkflowStatuses.OPEN.ordinal()
81                         + " and (assigned_to is null or assigned_to = '')", "mod_date");
82     }
83
84     public static List JavaDoc<WorkflowTask> getWorkflowTasksOpenWithAssignee(User user) {
85         List JavaDoc<WorkflowTask> tasks = new ArrayList JavaDoc<WorkflowTask>();
86         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
87         String JavaDoc rolesString = "";
88         for (Role role : userRoles) {
89             if (!rolesString.equals("")) {
90                 rolesString += ",";
91             }
92             rolesString += role.getRoleId();
93         }
94         if (rolesString.equals(""))
95             return tasks;
96         rolesString = "(" + rolesString + ")";
97         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "belongs_to in " + rolesString
98                 + " and status = " + WorkflowStatuses.OPEN.ordinal()
99                 + " and (assigned_to is not null and assigned_to <> '')", "mod_date");
100     }
101
102     public static List JavaDoc<WorkflowTask> getWorkflowTasksBelongsToRole(int roleId) {
103         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, "belongs_to = " + roleId, "mod_date");
104     }
105
106     public static List JavaDoc<WorkflowTask> getWorkflowTasksAssociatedWithAsset(Inode asset, User user) {
107         StringBuffer JavaDoc condition = new StringBuffer JavaDoc();
108         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
109         String JavaDoc rolesString = "";
110         for (Role role : userRoles) {
111             if (!rolesString.equals("")) {
112                 rolesString += ",";
113             }
114             rolesString += role.getRoleId();
115         }
116         condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId()
117                 + "' or belongs_to in (" + rolesString + ")) and ");
118         condition.append(" webasset = " + asset.getInode());
119
120         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, condition.toString(), "mod_date");
121     }
122
123     public static List JavaDoc<WorkflowTask> getOpenedWorkflowTasksAssociatedWithAsset(Inode asset, User user) {
124         StringBuffer JavaDoc condition = new StringBuffer JavaDoc();
125         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
126         String JavaDoc rolesString = "";
127         for (Role role : userRoles) {
128             if (!rolesString.equals("")) {
129                 rolesString += ",";
130             }
131             rolesString += role.getRoleId();
132         }
133         condition.append("status = '" + WebKeys.WorkflowStatuses.OPEN.toString() + "' and " +
134                 " (created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId()
135                 + "' or belongs_to in (" + rolesString + ")) and ");
136         condition.append(" webasset = " + asset.getInode());
137
138         return InodeFactory.getInodesOfClassByCondition(WorkflowTask.class, condition.toString(), "mod_date");
139     }
140
141     public static List JavaDoc<WorkflowTask> filterWorkflowTasks(User user, String JavaDoc title, String JavaDoc description, String JavaDoc createdBy,
142             String JavaDoc assignedTo, Date JavaDoc createdFrom, Date JavaDoc createdTo, Date JavaDoc modifiedFrom, Date JavaDoc modifiedTo, int offset,
143             int maxResults, String JavaDoc orderBy) {
144         StringBuffer JavaDoc condition = new StringBuffer JavaDoc();
145         if (UtilMethods.isSet(title)) {
146             condition.append("title like '%" + title + "%' and ");
147         }
148         if (UtilMethods.isSet(description)) {
149             condition.append("description like '%" + description + "%' and ");
150         }
151         if (UtilMethods.isSet(createdBy)) {
152             condition.append("created_by = '" + createdBy + "' and ");
153         }
154         if (UtilMethods.isSet(assignedTo)) {
155             condition.append("assigned_to = '" + assignedTo + "' and ");
156         }
157         if (UtilMethods.isSet(createdFrom)) {
158             condition.append("creation_date >= '" + UtilMethods.dateToJDBC(createdFrom) + "' and ");
159         }
160         if (UtilMethods.isSet(createdTo)) {
161             condition.append("creation_date <= '" + UtilMethods.dateToJDBC(createdTo) + "' and ");
162         }
163         if (UtilMethods.isSet(modifiedFrom)) {
164             condition.append("mod_date >= '" + UtilMethods.dateToJDBC(modifiedFrom) + "' and ");
165         }
166         if (UtilMethods.isSet(modifiedTo)) {
167             condition.append("mod_date <= '" + UtilMethods.dateToJDBC(modifiedTo) + "' and ");
168         }
169         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
170         String JavaDoc rolesString = "";
171         for (Role role : userRoles) {
172             if (!rolesString.equals("")) {
173                 rolesString += ",";
174             }
175             rolesString += role.getRoleId();
176         }
177         condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId()
178                 + "' or belongs_to in (" + rolesString + "))");
179         return InodeFactory.getInodesOfClassByConditionAndOrderBy(WorkflowTask.class, condition.toString(), orderBy,
180                 maxResults, offset);
181     }
182
183     public static int filterWorkflowTasksCount(User user, String JavaDoc title, String JavaDoc description, String JavaDoc createdBy,
184             String JavaDoc assignedTo, Date JavaDoc createdFrom, Date JavaDoc createdTo, Date JavaDoc modifiedFrom, Date JavaDoc modifiedTo) {
185         StringBuffer JavaDoc condition = new StringBuffer JavaDoc();
186         if (UtilMethods.isSet(title)) {
187             condition.append("title = '" + title + "' and ");
188         }
189         if (UtilMethods.isSet(description)) {
190             condition.append("description = '" + description + "' and ");
191         }
192         if (UtilMethods.isSet(createdBy)) {
193             condition.append("created_by = '" + createdBy + "' and ");
194         }
195         if (UtilMethods.isSet(assignedTo)) {
196             condition.append("assigned_to = '" + assignedTo + "' and ");
197         }
198         if (UtilMethods.isSet(createdFrom)) {
199             condition.append("creation_date >= '" + UtilMethods.dateToJDBC(createdFrom) + "' and ");
200         }
201         if (UtilMethods.isSet(createdTo)) {
202             condition.append("creation_date <= '" + UtilMethods.dateToJDBC(createdTo) + "' and ");
203         }
204         if (UtilMethods.isSet(modifiedFrom)) {
205             condition.append("mod_date >= '" + UtilMethods.dateToJDBC(modifiedFrom) + "' and ");
206         }
207         if (UtilMethods.isSet(modifiedTo)) {
208             condition.append("mod_date <= '" + UtilMethods.dateToJDBC(modifiedTo) + "' and ");
209         }
210         List JavaDoc<Role> userRoles = RoleFactory.getAllRolesForUser(user.getUserId());
211         String JavaDoc rolesString = "";
212         for (Role role : userRoles) {
213             if (!rolesString.equals("")) {
214                 rolesString += ",";
215             }
216             rolesString += role.getRoleId();
217         }
218         condition.append("(created_by = '" + user.getUserId() + "' or assigned_to = '" + user.getUserId()
219                 + "' or belongs_to in (" + rolesString + "))");
220         DotConnect dc = new DotConnect();
221         dc.setSQL("select count(*) as count from workflow_task where " + condition);
222         return dc.getInt("count");
223     }
224
225     public static void saveWorkflowTask(WorkflowTask task) {
226         InodeFactory.saveInode(task);
227     }
228
229     public static void deleteWorkflowTask(WorkflowTask task) {
230         InodeFactory.deleteInode(task);
231     }
232
233     public static void sendWorkflowChangeEmails(WorkflowTask task, String JavaDoc subject, String JavaDoc body) {
234         try {
235
236             if (Config.getBooleanProperty("WORKFLOWS_EMAILS_ENABLED")) {
237                 boolean hasRecipients = false;
238                 User createdByUser = PublicUserFactory.findUserByUserId(task.getCreatedBy());
239                 User assignedToUser = PublicUserFactory.findUserByUserId(task.getAssignedTo());
240                 String JavaDoc fromEmail = Config.getStringProperty("EMAIL_SYSTEM_ADDRESS");
241                 Mailer mailer = new Mailer();
242                 mailer.setFromEmail(fromEmail);
243                 if (assignedToUser != null || createdByUser != null) {
244                     if (assignedToUser != null)
245                         mailer.setToEmail(assignedToUser.getEmailAddress());
246                     else
247                         mailer.setToEmail(createdByUser.getEmailAddress());
248                     if (assignedToUser != null && assignedToUser != null)
249                         mailer.setCc(createdByUser.getEmailAddress());
250                     hasRecipients = true;
251                 } else if (UtilMethods.isSet(task.getBelongsTo())) {
252                     Role role = RoleFactory.getRoleById(task.getBelongsTo());
253                     String JavaDoc to = "";
254                     if (UtilMethods.isSet(role.getRoleId())) {
255                         Set JavaDoc<User> users = RoleFactory.getUsers(role.getRoleId());
256                         if (users.size() > 0) {
257                             hasRecipients = true;
258                             for (User user : users) {
259                                 to += user.getEmailAddress() + ";";
260                             }
261                         }
262                     }
263                     mailer.setToEmail(to);
264                 }
265                 mailer.setSubject(subject);
266                 mailer.setHTMLAndTextBody(body);
267                 if (hasRecipients)
268                     mailer.sendMessage();
269             }
270         } catch (Exception JavaDoc e) {
271             Logger.error(WorkflowsFactory.class, "Exception ocurred trying to deliver emails for task "
272                     + task.getInode() + " change");
273         }
274     }
275
276     // Workflow comments methods
277
public static List JavaDoc<WorkflowComment> getWorkflowCommentsOfTask(WorkflowTask task) {
278         return InodeFactory.getChildrenClass(task, WorkflowComment.class, "creation_date");
279     }
280
281     public static void saveWorkflowComment(WorkflowComment comment) {
282         InodeFactory.saveInode(comment);
283     }
284
285     public static void deleteWorkflowComment(WorkflowComment comment) {
286         InodeFactory.deleteInode(comment);
287     }
288
289     // Workflow history methods
290
public static List JavaDoc<WorkflowHistory> getWorkflowHistoryOfTask(WorkflowTask task) {
291         return InodeFactory.getChildrenClass(task, WorkflowHistory.class, "creation_date");
292     }
293
294     public static void saveWorkflowHistory(WorkflowHistory history) {
295         InodeFactory.saveInode(history);
296     }
297
298     public static void deleteWorkflowHistory(WorkflowHistory history) {
299         InodeFactory.deleteInode(history);
300     }
301
302     // Workflow task attached files
303
public static List JavaDoc<File> getWorkflowTaskFiles(WorkflowTask task) {
304         return InodeFactory.getChildrenClass(task, File.class);
305     }
306
307 }
308
Popular Tags