1   /**
2    * Copyright (c) 2000-2008 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.portlet.workflow.jbi.WorkflowURL;
30  import com.liferay.portlet.workflow.jbi.WorkflowXMLUtil;
31  import com.liferay.portlet.workflow.model.WorkflowTask;
32  import com.liferay.portlet.workflow.service.base.WorkflowComponentServiceBaseImpl;
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
45      extends WorkflowComponentServiceBaseImpl implements WorkflowComponent {
46  
47      public List getCurrentTasks(long instanceId, long tokenId)
48          throws WorkflowComponentException {
49  
50          try {
51              String xml = getCurrentTasksXml(instanceId, tokenId);
52  
53              return WorkflowXMLUtil.parseList(xml, "tasks");
54          }
55          catch (Exception e) {
56              throw new WorkflowComponentException(e);
57          }
58      }
59  
60      public String getCurrentTasksXml(long instanceId, long tokenId)
61          throws WorkflowComponentException {
62  
63          try {
64              WorkflowURL url = getWorkflowURL();
65  
66              url.setParameter(Constants.CMD, "getCurrentTasksXml");
67              url.setParameter("instanceId", instanceId);
68              url.setParameter("tokenId", tokenId);
69  
70              return url.getContent();
71          }
72          catch (Exception e) {
73              throw new WorkflowComponentException(e);
74          }
75      }
76  
77      public String deploy(String xml) throws WorkflowComponentException {
78          try {
79              WorkflowURL url = getWorkflowURL();
80  
81              xml = StringUtil.replace(
82                  xml,
83                  new String[] {
84                      "\n", "\r", "\t"
85                  },
86                  new String[] {
87                      "", "", ""
88                  });
89  
90              url.setParameter(Constants.CMD, "deploy");
91              url.setParameter("xml", xml);
92  
93              String content = url.getContent();
94  
95              return WorkflowXMLUtil.parseString(content, "definitionId");
96          }
97          catch (Exception e) {
98              throw new WorkflowComponentException(e);
99          }
100     }
101 
102     public Object getDefinition(long definitionId)
103         throws WorkflowComponentException {
104 
105         try {
106             String xml = getDefinitionXml(definitionId);
107 
108             return WorkflowXMLUtil.parseDefinition(xml);
109         }
110         catch (Exception e) {
111             throw new WorkflowComponentException(e);
112         }
113     }
114 
115     public List getDefinitions(
116             long definitionId, String name, int start, int end)
117         throws WorkflowComponentException {
118 
119         try {
120             String xml = getDefinitionsXml(definitionId, name, start, end);
121 
122             return WorkflowXMLUtil.parseList(xml, "definitions");
123         }
124         catch (Exception e) {
125             throw new WorkflowComponentException(e);
126         }
127     }
128 
129     public String getDefinitionsXml(
130             long definitionId, String name, int start, int end)
131         throws WorkflowComponentException {
132 
133         try {
134             WorkflowURL url = getWorkflowURL();
135 
136             url.setParameter(Constants.CMD, "getDefinitionsXml");
137             url.setParameter("definitionId", definitionId);
138             url.setParameter("name", name);
139             url.setParameter("start", start);
140             url.setParameter("end", end);
141 
142             return url.getContent();
143         }
144         catch (Exception e) {
145             throw new WorkflowComponentException(e);
146         }
147     }
148 
149     public int getDefinitionsCount(long definitionId, String name)
150         throws WorkflowComponentException {
151 
152         try {
153             String xml = getDefinitionsCountXml(definitionId, name);
154 
155             return WorkflowXMLUtil.parseInt(xml, "count");
156         }
157         catch (Exception e) {
158             throw new WorkflowComponentException(e);
159         }
160     }
161 
162     public String getDefinitionsCountXml(long definitionId, String name)
163         throws WorkflowComponentException {
164 
165         try {
166             WorkflowURL url = getWorkflowURL();
167 
168             url.setParameter(Constants.CMD, "getDefinitionsCountXml");
169             url.setParameter("definitionId", definitionId);
170             url.setParameter("name", name);
171 
172             return url.getContent();
173         }
174         catch (Exception e) {
175             throw new WorkflowComponentException(e);
176         }
177     }
178 
179     public String getDefinitionXml(long definitionId)
180         throws WorkflowComponentException {
181 
182         try {
183             WorkflowURL url = getWorkflowURL();
184 
185             url.setParameter(Constants.CMD, "getDefinitionXml");
186             url.setParameter("definitionId", definitionId);
187 
188             return url.getContent();
189         }
190         catch (Exception e) {
191             throw new WorkflowComponentException(e);
192         }
193     }
194 
195     public List getInstances(
196             long definitionId, long instanceId, String definitionName,
197             String definitionVersion, String startDateGT, String startDateLT,
198             String endDateGT, String endDateLT, boolean hideEndedTasks,
199             boolean retrieveUserInstances, boolean andOperator, int start,
200             int end)
201         throws WorkflowComponentException {
202 
203         try {
204             String xml = getInstancesXml(
205                 definitionId, instanceId, definitionName, definitionVersion,
206                 startDateGT, startDateLT, endDateGT, endDateLT, hideEndedTasks,
207                 retrieveUserInstances, andOperator, start, end);
208 
209             return WorkflowXMLUtil.parseList(xml, "instances");
210         }
211         catch (Exception e) {
212             throw new WorkflowComponentException(e);
213         }
214     }
215 
216     public int getInstancesCount(
217             long definitionId, long instanceId, String definitionName,
218             String definitionVersion, String startDateGT, String startDateLT,
219             String endDateGT, String endDateLT, boolean hideEndedTasks,
220             boolean retrieveUserInstances, boolean andOperator)
221         throws WorkflowComponentException {
222 
223         try {
224             String xml = getInstancesCountXml(
225                 definitionId, instanceId, definitionName, definitionVersion,
226                 startDateGT, startDateLT, endDateGT, endDateLT, hideEndedTasks,
227                 retrieveUserInstances, andOperator);
228 
229             return WorkflowXMLUtil.parseInt(xml, "count");
230         }
231         catch (Exception e) {
232             throw new WorkflowComponentException(e);
233         }
234     }
235 
236     public String getInstancesCountXml(
237             long definitionId, long instanceId, String definitionName,
238             String definitionVersion, String startDateGT, String startDateLT,
239             String endDateGT, String endDateLT, boolean hideEndedTasks,
240             boolean retrieveUserInstances, boolean andOperator)
241         throws WorkflowComponentException {
242 
243         try {
244             WorkflowURL url = getWorkflowURL();
245 
246             url.setParameter(Constants.CMD, "getInstancesCountXml");
247             url.setParameter("definitionId", definitionId);
248             url.setParameter("instanceId", instanceId);
249             url.setParameter("definitionName", definitionName);
250             url.setParameter("definitionVersion", definitionVersion);
251             url.setParameter("startDateGT", startDateGT);
252             url.setParameter("startDateLT", startDateLT);
253             url.setParameter("endDateGT", endDateGT);
254             url.setParameter("endDateLT", endDateLT);
255             url.setParameter("hideEndedTasks", hideEndedTasks);
256             url.setParameter("retrieveUserInstances", retrieveUserInstances);
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 retrieveUserInstances, boolean andOperator, int start,
271             int end)
272         throws WorkflowComponentException {
273 
274         try {
275             WorkflowURL url = getWorkflowURL();
276 
277             url.setParameter(Constants.CMD, "getInstancesXml");
278             url.setParameter("definitionId", definitionId);
279             url.setParameter("instanceId", instanceId);
280             url.setParameter("definitionName", definitionName);
281             url.setParameter("definitionVersion", definitionVersion);
282             url.setParameter("startDateGT", startDateGT);
283             url.setParameter("startDateLT", startDateLT);
284             url.setParameter("endDateGT", endDateGT);
285             url.setParameter("endDateLT", endDateLT);
286             url.setParameter("hideEndedTasks", hideEndedTasks);
287             url.setParameter("retrieveUserInstances", retrieveUserInstances);
288             url.setParameter("andOperator", andOperator);
289             url.setParameter("start", start);
290             url.setParameter("end", end);
291 
292             return url.getContent();
293         }
294         catch (Exception e) {
295             throw new WorkflowComponentException(e);
296         }
297     }
298 
299     public WorkflowTask getTask(long taskId) throws WorkflowComponentException {
300         try {
301             String xml = getTaskXml(taskId);
302 
303             return WorkflowXMLUtil.parseTask(xml);
304         }
305         catch (Exception e) {
306             throw new WorkflowComponentException(e);
307         }
308     }
309 
310     public String getTaskXml(long taskId) throws WorkflowComponentException {
311         try {
312             WorkflowURL url = getWorkflowURL();
313 
314             url.setParameter(Constants.CMD, "getTaskXml");
315             url.setParameter("taskId", taskId);
316 
317             return url.getContent();
318         }
319         catch (Exception e) {
320             throw new WorkflowComponentException(e);
321         }
322     }
323 
324     public List getTaskFormElements(long taskId)
325         throws WorkflowComponentException {
326 
327         try {
328             String xml = getTaskFormElementsXml(taskId);
329 
330             return WorkflowXMLUtil.parseList(xml, "taskFormElements");
331         }
332         catch (Exception e) {
333             throw new WorkflowComponentException(e);
334         }
335     }
336 
337     public String getTaskFormElementsXml(long taskId)
338         throws WorkflowComponentException {
339 
340         try {
341             WorkflowURL url = getWorkflowURL();
342 
343             url.setParameter(Constants.CMD, "getTaskFormElementsXml");
344             url.setParameter("taskId", taskId);
345 
346             return url.getContent();
347         }
348         catch (Exception e) {
349             throw new WorkflowComponentException(e);
350         }
351     }
352 
353     public List getTaskTransitions(long taskId)
354         throws WorkflowComponentException {
355 
356         try {
357             String xml = getTaskTransitionsXml(taskId);
358 
359             return WorkflowXMLUtil.parseList(xml, "taskTransitions");
360         }
361         catch (Exception e) {
362             throw new WorkflowComponentException(e);
363         }
364     }
365 
366     public String getTaskTransitionsXml(long taskId)
367         throws WorkflowComponentException {
368 
369         try {
370             WorkflowURL url = getWorkflowURL();
371 
372             url.setParameter(Constants.CMD, "getTaskTransitionsXml");
373             url.setParameter("taskId", taskId);
374 
375             return url.getContent();
376         }
377         catch (Exception e) {
378             throw new WorkflowComponentException(e);
379         }
380     }
381 
382     public List getUserTasks(
383             long instanceId, String taskName, String definitionName,
384             String assignedTo, String createDateGT, String createDateLT,
385             String startDateGT, String startDateLT, String endDateGT,
386             String endDateLT, boolean hideEndedTasks, boolean andOperator,
387             int start, int end)
388         throws WorkflowComponentException {
389 
390         try {
391             String xml = getUserTasksXml(
392                 instanceId, taskName, definitionName, assignedTo, createDateGT,
393                 createDateLT, startDateGT, startDateLT, endDateGT, endDateLT,
394                 hideEndedTasks, andOperator, start, end);
395 
396             return WorkflowXMLUtil.parseList(xml, "tasks");
397         }
398         catch (Exception e) {
399             throw new WorkflowComponentException(e);
400         }
401     }
402 
403     public int getUserTasksCount(
404             long instanceId, String taskName, String definitionName,
405             String assignedTo, String createDateGT, String createDateLT,
406             String startDateGT, String startDateLT, String endDateGT,
407             String endDateLT, boolean hideEndedTasks, boolean andOperator)
408         throws WorkflowComponentException {
409 
410         try {
411             String xml = getUserTasksCountXml(
412                 instanceId, taskName, definitionName, assignedTo, createDateGT,
413                 createDateLT, startDateGT, startDateLT, endDateGT, endDateLT,
414                 hideEndedTasks, andOperator);
415 
416             return WorkflowXMLUtil.parseInt(xml, "count");
417         }
418         catch (Exception e) {
419             throw new WorkflowComponentException(e);
420         }
421     }
422 
423     public String getUserTasksCountXml(
424             long instanceId, String taskName, String definitionName,
425             String assignedTo, String createDateGT, String createDateLT,
426             String startDateGT, String startDateLT, String endDateGT,
427             String endDateLT, boolean hideEndedTasks, boolean andOperator)
428         throws WorkflowComponentException {
429 
430         try {
431             WorkflowURL url = getWorkflowURL();
432 
433             url.setParameter(Constants.CMD, "getUserTasksCountXml");
434             url.setParameter("instanceId", instanceId);
435             url.setParameter("taskName", taskName);
436             url.setParameter("definitionName", definitionName);
437             url.setParameter("assignedTo", assignedTo);
438             url.setParameter("createDateGT", createDateGT);
439             url.setParameter("createDateLT", createDateLT);
440             url.setParameter("startDateGT", startDateGT);
441             url.setParameter("startDateLT", startDateLT);
442             url.setParameter("endDateGT", endDateGT);
443             url.setParameter("endDateLT", endDateLT);
444             url.setParameter("hideEndedTasks", hideEndedTasks);
445             url.setParameter("andOperator", andOperator);
446 
447             return url.getContent();
448         }
449         catch (Exception e) {
450             throw new WorkflowComponentException(e);
451         }
452     }
453 
454     public String getUserTasksXml(
455             long instanceId, String taskName, String definitionName,
456             String assignedTo, String createDateGT, String createDateLT,
457             String startDateGT, String startDateLT, String endDateGT,
458             String endDateLT, boolean hideEndedTasks, boolean andOperator,
459             int start, int end)
460         throws WorkflowComponentException {
461 
462         try {
463             WorkflowURL url = getWorkflowURL();
464 
465             url.setParameter(Constants.CMD, "getUserTasksXml");
466             url.setParameter("instanceId", instanceId);
467             url.setParameter("taskName", taskName);
468             url.setParameter("definitionName", definitionName);
469             url.setParameter("assignedTo", assignedTo);
470             url.setParameter("createDateGT", createDateGT);
471             url.setParameter("createDateLT", createDateLT);
472             url.setParameter("startDateGT", startDateGT);
473             url.setParameter("startDateLT", startDateLT);
474             url.setParameter("endDateGT", endDateGT);
475             url.setParameter("endDateLT", endDateLT);
476             url.setParameter("hideEndedTasks", hideEndedTasks);
477             url.setParameter("andOperator", andOperator);
478             url.setParameter("start", start);
479             url.setParameter("end", end);
480 
481             return url.getContent();
482         }
483         catch (Exception e) {
484             throw new WorkflowComponentException(e);
485         }
486     }
487 
488     public void signalInstance(long instanceId)
489         throws WorkflowComponentException {
490 
491         try {
492             WorkflowURL url = getWorkflowURL();
493 
494             url.setParameter(Constants.CMD, "signalInstance");
495             url.setParameter("instanceId", instanceId);
496 
497             url.getContent();
498         }
499         catch (Exception e) {
500             throw new WorkflowComponentException(e);
501         }
502     }
503 
504     public void signalToken(long instanceId, long tokenId)
505         throws WorkflowComponentException {
506 
507         try {
508             WorkflowURL url = getWorkflowURL();
509 
510             url.setParameter(Constants.CMD, "signalToken");
511             url.setParameter("instanceId", instanceId);
512             url.setParameter("tokenId", tokenId);
513 
514             url.getContent();
515         }
516         catch (Exception e) {
517             throw new WorkflowComponentException(e);
518         }
519     }
520 
521     public String startWorkflow(long definitionId)
522         throws WorkflowComponentException {
523 
524         try {
525             WorkflowURL url = getWorkflowURL();
526 
527             url.setParameter(Constants.CMD, "startWorkflow");
528             url.setParameter("definitionId", definitionId);
529 
530             return url.getContent();
531         }
532         catch (Exception e) {
533             throw new WorkflowComponentException(e);
534         }
535     }
536 
537     public Map updateTask(long taskId, String transition, Map parameterMap)
538         throws WorkflowComponentException {
539 
540         try {
541             String xml = updateTaskXml(taskId, transition, parameterMap);
542 
543             return WorkflowXMLUtil.parseErrors(xml);
544         }
545         catch (Exception e) {
546             throw new WorkflowComponentException(e);
547         }
548     }
549 
550     public String updateTaskXml(
551             long taskId, String transition, Map parameterMap)
552         throws WorkflowComponentException {
553 
554         try {
555             WorkflowURL url = getWorkflowURL();
556 
557             url.setParameter(Constants.CMD, "updateTaskXml");
558             url.setParameter("taskId", taskId);
559             url.setParameter("transition", transition);
560             url.addParameterMap(parameterMap);
561 
562             return url.getContent();
563         }
564         catch (Exception e) {
565             throw new WorkflowComponentException(e);
566         }
567     }
568 
569     protected WorkflowURL getWorkflowURL() {
570         WorkflowURL url = null;
571 
572         try {
573             url = new WorkflowURL(getUser());
574         }
575         catch (Exception e) {
576             url = new WorkflowURL();
577         }
578 
579         return url;
580     }
581 
582 }