1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.workflow.service.impl;
24  
25  import com.liferay.portal.kernel.jbi.WorkflowComponent;
26  import com.liferay.portal.kernel.jbi.WorkflowComponentException;
27  import com.liferay.portal.kernel.util.Constants;
28  import com.liferay.portal.kernel.util.StringUtil;
29  import com.liferay.portal.service.impl.PrincipalBean;
30  import com.liferay.portlet.workflow.jbi.WorkflowURL;
31  import com.liferay.portlet.workflow.jbi.WorkflowXMLUtil;
32  import com.liferay.portlet.workflow.service.WorkflowComponentService;
33  
34  import java.util.List;
35  import java.util.Map;
36  
37  /**
38   * <a href="WorkflowComponentServiceImpl.java.html"><b><i>View Source</i></b>
39   * </a>
40   *
41   * @author Brian Wing Shun Chan
42   *
43   */
44  public class WorkflowComponentServiceImpl extends PrincipalBean
45      implements WorkflowComponentService, WorkflowComponent {
46  
47      public List getCurrentTasks(
48              long instanceId, long tokenId)
49          throws WorkflowComponentException {
50  
51          try {
52              String xml = getCurrentTasksXml(instanceId, tokenId);
53  
54              return WorkflowXMLUtil.parseList(xml, "tasks");
55          }
56          catch (Exception e) {
57              throw new WorkflowComponentException(e);
58          }
59      }
60  
61      public String getCurrentTasksXml(
62              long instanceId, long tokenId)
63          throws WorkflowComponentException {
64  
65          try {
66              WorkflowURL url = getWorkflowURL();
67  
68              url.setParameter(Constants.CMD, "getCurrentTasksXml");
69              url.setParameter("instanceId", instanceId);
70              url.setParameter("tokenId", tokenId);
71  
72              return url.getContent();
73          }
74          catch (Exception e) {
75              throw new WorkflowComponentException(e);
76          }
77      }
78  
79      public String deploy(String xml) throws WorkflowComponentException {
80          try {
81              WorkflowURL url = getWorkflowURL();
82  
83              xml = StringUtil.replace(
84                  xml,
85                  new String[] {
86                      "\n", "\r", "\t"
87                  },
88                  new String[] {
89                      "", "", ""
90                  });
91  
92              url.setParameter(Constants.CMD, "deploy");
93              url.setParameter("xml", xml);
94  
95              String content = url.getContent();
96  
97              return WorkflowXMLUtil.parseString(content, "definitionId");
98          }
99          catch (Exception e) {
100             throw new WorkflowComponentException(e);
101         }
102     }
103 
104     public Object getDefinition(long definitionId)
105         throws WorkflowComponentException {
106 
107         try {
108             String xml = getDefinitionXml(definitionId);
109 
110             return WorkflowXMLUtil.parseDefinition(xml);
111         }
112         catch (Exception e) {
113             throw new WorkflowComponentException(e);
114         }
115     }
116 
117     public List getDefinitions(
118             long definitionId, String name, int begin, int end)
119         throws WorkflowComponentException {
120 
121         try {
122             String xml = getDefinitionsXml(definitionId, name, begin, end);
123 
124             return WorkflowXMLUtil.parseList(xml, "definitions");
125         }
126         catch (Exception e) {
127             throw new WorkflowComponentException(e);
128         }
129     }
130 
131     public String getDefinitionsXml(
132             long definitionId, String name, int begin, int end)
133         throws WorkflowComponentException {
134 
135         try {
136             WorkflowURL url = getWorkflowURL();
137 
138             url.setParameter(Constants.CMD, "getDefinitionsXml");
139             url.setParameter("definitionId", definitionId);
140             url.setParameter("name", name);
141             url.setParameter("begin", begin);
142             url.setParameter("end", end);
143 
144             return url.getContent();
145         }
146         catch (Exception e) {
147             throw new WorkflowComponentException(e);
148         }
149     }
150 
151     public int getDefinitionsCount(long definitionId, String name)
152         throws WorkflowComponentException {
153 
154         try {
155             String xml = getDefinitionsCountXml(definitionId, name);
156 
157             return WorkflowXMLUtil.parseInt(xml, "count");
158         }
159         catch (Exception e) {
160             throw new WorkflowComponentException(e);
161         }
162     }
163 
164     public String getDefinitionsCountXml(long definitionId, String name)
165         throws WorkflowComponentException {
166 
167         try {
168             WorkflowURL url = getWorkflowURL();
169 
170             url.setParameter(Constants.CMD, "getDefinitionsCountXml");
171             url.setParameter("definitionId", definitionId);
172             url.setParameter("name", name);
173 
174             return url.getContent();
175         }
176         catch (Exception e) {
177             throw new WorkflowComponentException(e);
178         }
179     }
180 
181     public String getDefinitionXml(long definitionId)
182         throws WorkflowComponentException {
183 
184         try {
185             WorkflowURL url = getWorkflowURL();
186 
187             url.setParameter(Constants.CMD, "getDefinitionXml");
188             url.setParameter("definitionId", definitionId);
189 
190             return url.getContent();
191         }
192         catch (Exception e) {
193             throw new WorkflowComponentException(e);
194         }
195     }
196 
197     public List getInstances(
198             long definitionId, long instanceId, String definitionName,
199             String definitionVersion, String startDateGT, String startDateLT,
200             String endDateGT, String endDateLT, boolean hideEndedTasks,
201             boolean andOperator, int begin, int end)
202         throws WorkflowComponentException {
203 
204         try {
205             String xml = getInstancesXml(
206                 definitionId, instanceId, definitionName, definitionVersion,
207                 startDateGT, startDateLT, endDateGT, endDateLT, hideEndedTasks,
208                 andOperator, begin, end);
209 
210             return WorkflowXMLUtil.parseList(xml, "instances");
211         }
212         catch (Exception e) {
213             throw new WorkflowComponentException(e);
214         }
215     }
216 
217     public int getInstancesCount(
218             long definitionId, long instanceId, String definitionName,
219             String definitionVersion, String startDateGT, String startDateLT,
220             String endDateGT, String endDateLT, boolean hideEndedTasks,
221             boolean andOperator)
222         throws WorkflowComponentException {
223 
224         try {
225             String xml = getInstancesCountXml(
226                 definitionId, instanceId, definitionName, definitionVersion,
227                 startDateGT, startDateLT, endDateGT, endDateLT, hideEndedTasks,
228                 andOperator);
229 
230             return WorkflowXMLUtil.parseInt(xml, "count");
231         }
232         catch (Exception e) {
233             throw new WorkflowComponentException(e);
234         }
235     }
236 
237     public String getInstancesCountXml(
238             long definitionId, long instanceId, String definitionName,
239             String definitionVersion, String startDateGT, String startDateLT,
240             String endDateGT, String endDateLT, boolean hideEndedTasks,
241             boolean andOperator)
242         throws WorkflowComponentException {
243 
244         try {
245             WorkflowURL url = getWorkflowURL();
246 
247             url.setParameter(Constants.CMD, "getInstancesCountXml");
248             url.setParameter("definitionId", definitionId);
249             url.setParameter("instanceId", instanceId);
250             url.setParameter("definitionName", definitionName);
251             url.setParameter("definitionVersion", definitionVersion);
252             url.setParameter("startDateGT", startDateGT);
253             url.setParameter("startDateLT", startDateLT);
254             url.setParameter("endDateGT", endDateGT);
255             url.setParameter("endDateLT", endDateLT);
256             url.setParameter("hideEndedTasks", hideEndedTasks);
257             url.setParameter("andOperator", andOperator);
258 
259             return url.getContent();
260         }
261         catch (Exception e) {
262             throw new WorkflowComponentException(e);
263         }
264     }
265 
266     public String getInstancesXml(
267             long definitionId, long instanceId, String definitionName,
268             String definitionVersion, String startDateGT, String startDateLT,
269             String endDateGT, String endDateLT, boolean hideEndedTasks,
270             boolean andOperator, int begin, int end)
271         throws WorkflowComponentException {
272 
273         try {
274             WorkflowURL url = getWorkflowURL();
275 
276             url.setParameter(Constants.CMD, "getInstancesXml");
277             url.setParameter("definitionId", definitionId);
278             url.setParameter("instanceId", instanceId);
279             url.setParameter("definitionName", definitionName);
280             url.setParameter("definitionVersion", definitionVersion);
281             url.setParameter("startDateGT", startDateGT);
282             url.setParameter("startDateLT", startDateLT);
283             url.setParameter("endDateGT", endDateGT);
284             url.setParameter("endDateLT", endDateLT);
285             url.setParameter("hideEndedTasks", hideEndedTasks);
286             url.setParameter("andOperator", andOperator);
287             url.setParameter("begin", begin);
288             url.setParameter("end", end);
289 
290             return url.getContent();
291         }
292         catch (Exception e) {
293             throw new WorkflowComponentException(e);
294         }
295     }
296 
297     public List getTaskFormElements(long taskId)
298         throws WorkflowComponentException {
299 
300         try {
301             String xml = getTaskFormElementsXml(taskId);
302 
303             return WorkflowXMLUtil.parseList(xml, "taskFormElements");
304         }
305         catch (Exception e) {
306             throw new WorkflowComponentException(e);
307         }
308     }
309 
310     public String getTaskFormElementsXml(long taskId)
311         throws WorkflowComponentException {
312 
313         try {
314             WorkflowURL url = getWorkflowURL();
315 
316             url.setParameter(Constants.CMD, "getTaskFormElementsXml");
317             url.setParameter("taskId", taskId);
318 
319             return url.getContent();
320         }
321         catch (Exception e) {
322             throw new WorkflowComponentException(e);
323         }
324     }
325 
326     public List getTaskTransitions(long taskId)
327         throws WorkflowComponentException {
328 
329         try {
330             String xml = getTaskTransitionsXml(taskId);
331 
332             return WorkflowXMLUtil.parseList(xml, "taskTransitions");
333         }
334         catch (Exception e) {
335             throw new WorkflowComponentException(e);
336         }
337     }
338 
339     public String getTaskTransitionsXml(long taskId)
340         throws WorkflowComponentException {
341 
342         try {
343             WorkflowURL url = getWorkflowURL();
344 
345             url.setParameter(Constants.CMD, "getTaskTransitionsXml");
346             url.setParameter("taskId", taskId);
347 
348             return url.getContent();
349         }
350         catch (Exception e) {
351             throw new WorkflowComponentException(e);
352         }
353     }
354 
355     public List getUserTasks(
356             long instanceId, String taskName, String definitionName,
357             String assignedTo, String createDateGT, String createDateLT,
358             String startDateGT, String startDateLT, String endDateGT,
359             String endDateLT, boolean hideEndedTasks, boolean andOperator,
360             int begin, int end)
361         throws WorkflowComponentException {
362 
363         try {
364             String xml = getUserTasksXml(
365                 instanceId, taskName, definitionName, assignedTo, createDateGT,
366                 createDateLT, startDateGT, startDateLT, endDateGT, endDateLT,
367                 hideEndedTasks, andOperator, begin, end);
368 
369             return WorkflowXMLUtil.parseList(xml, "tasks");
370         }
371         catch (Exception e) {
372             throw new WorkflowComponentException(e);
373         }
374     }
375 
376     public int getUserTasksCount(
377             long instanceId, String taskName, String definitionName,
378             String assignedTo, String createDateGT, String createDateLT,
379             String startDateGT, String startDateLT, String endDateGT,
380             String endDateLT, boolean hideEndedTasks, boolean andOperator)
381         throws WorkflowComponentException {
382 
383         try {
384             String xml = getUserTasksCountXml(
385                 instanceId, taskName, definitionName, assignedTo, createDateGT,
386                 createDateLT, startDateGT, startDateLT, endDateGT, endDateLT,
387                 hideEndedTasks, andOperator);
388 
389             return WorkflowXMLUtil.parseInt(xml, "count");
390         }
391         catch (Exception e) {
392             throw new WorkflowComponentException(e);
393         }
394     }
395 
396     public String getUserTasksCountXml(
397             long instanceId, String taskName, String definitionName,
398             String assignedTo, String createDateGT, String createDateLT,
399             String startDateGT, String startDateLT, String endDateGT,
400             String endDateLT, boolean hideEndedTasks, boolean andOperator)
401         throws WorkflowComponentException {
402 
403         try {
404             WorkflowURL url = getWorkflowURL();
405 
406             url.setParameter(Constants.CMD, "getUserTasksCountXml");
407             url.setParameter("instanceId", instanceId);
408             url.setParameter("taskName", taskName);
409             url.setParameter("definitionName", definitionName);
410             url.setParameter("assignedTo", assignedTo);
411             url.setParameter("createDateGT", createDateGT);
412             url.setParameter("createDateLT", createDateLT);
413             url.setParameter("startDateGT", startDateGT);
414             url.setParameter("startDateLT", startDateLT);
415             url.setParameter("endDateGT", endDateGT);
416             url.setParameter("endDateLT", endDateLT);
417             url.setParameter("hideEndedTasks", hideEndedTasks);
418             url.setParameter("andOperator", andOperator);
419 
420             return url.getContent();
421         }
422         catch (Exception e) {
423             throw new WorkflowComponentException(e);
424         }
425     }
426 
427     public String getUserTasksXml(
428             long instanceId, String taskName, String definitionName,
429             String assignedTo, String createDateGT, String createDateLT,
430             String startDateGT, String startDateLT, String endDateGT,
431             String endDateLT, boolean hideEndedTasks, boolean andOperator,
432             int begin, int end)
433         throws WorkflowComponentException {
434 
435         try {
436             WorkflowURL url = getWorkflowURL();
437 
438             url.setParameter(Constants.CMD, "getUserTasksXml");
439             url.setParameter("instanceId", instanceId);
440             url.setParameter("taskName", taskName);
441             url.setParameter("definitionName", definitionName);
442             url.setParameter("assignedTo", assignedTo);
443             url.setParameter("createDateGT", createDateGT);
444             url.setParameter("createDateLT", createDateLT);
445             url.setParameter("startDateGT", startDateGT);
446             url.setParameter("startDateLT", startDateLT);
447             url.setParameter("endDateGT", endDateGT);
448             url.setParameter("endDateLT", endDateLT);
449             url.setParameter("hideEndedTasks", hideEndedTasks);
450             url.setParameter("andOperator", andOperator);
451             url.setParameter("begin", begin);
452             url.setParameter("end", end);
453 
454             return url.getContent();
455         }
456         catch (Exception e) {
457             throw new WorkflowComponentException(e);
458         }
459     }
460 
461     public void signalInstance(long instanceId)
462         throws WorkflowComponentException {
463 
464         try {
465             WorkflowURL url = getWorkflowURL();
466 
467             url.setParameter(Constants.CMD, "signalInstance");
468             url.setParameter("instanceId", instanceId);
469 
470             url.getContent();
471         }
472         catch (Exception e) {
473             throw new WorkflowComponentException(e);
474         }
475     }
476 
477     public void signalToken(long instanceId, long tokenId)
478         throws WorkflowComponentException {
479 
480         try {
481             WorkflowURL url = getWorkflowURL();
482 
483             url.setParameter(Constants.CMD, "signalToken");
484             url.setParameter("instanceId", instanceId);
485             url.setParameter("tokenId", tokenId);
486 
487             url.getContent();
488         }
489         catch (Exception e) {
490             throw new WorkflowComponentException(e);
491         }
492     }
493 
494     public String startWorkflow(long definitionId)
495         throws WorkflowComponentException {
496 
497         try {
498             WorkflowURL url = getWorkflowURL();
499 
500             url.setParameter(Constants.CMD, "startWorkflow");
501             url.setParameter("definitionId", definitionId);
502 
503             return url.getContent();
504         }
505         catch (Exception e) {
506             throw new WorkflowComponentException(e);
507         }
508     }
509 
510     public Map updateTask(long taskId, String transition, Map parameterMap)
511         throws WorkflowComponentException {
512 
513         try {
514             String xml = updateTaskXml(taskId, transition, parameterMap);
515 
516             return WorkflowXMLUtil.parseErrors(xml);
517         }
518         catch (Exception e) {
519             throw new WorkflowComponentException(e);
520         }
521     }
522 
523     public String updateTaskXml(
524             long taskId, String transition, Map parameterMap)
525         throws WorkflowComponentException {
526 
527         try {
528             WorkflowURL url = getWorkflowURL();
529 
530             url.setParameter(Constants.CMD, "updateTaskXml");
531             url.setParameter("taskId", taskId);
532             url.setParameter("transition", transition);
533             url.addParameterMap(parameterMap);
534 
535             return url.getContent();
536         }
537         catch (Exception e) {
538             throw new WorkflowComponentException(e);
539         }
540     }
541 
542     protected WorkflowURL getWorkflowURL() {
543         WorkflowURL url = null;
544 
545         try {
546             url = new WorkflowURL(getUser());
547         }
548         catch (Exception e) {
549             url = new WorkflowURL();
550         }
551 
552         return url;
553     }
554 
555 }