1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.workflow.pages;
35
36 import info.magnolia.cms.beans.config.ContentRepository;
37 import info.magnolia.cms.core.Content;
38 import info.magnolia.module.admininterface.TemplatedMVCHandler;
39 import info.magnolia.module.workflow.WorkflowConstants;
40 import info.magnolia.module.workflow.WorkflowModule;
41 import info.magnolia.module.workflow.WorkflowUtil;
42 import info.magnolia.module.workflow.flows.FlowDefinitionException;
43 import info.magnolia.module.workflow.flows.FlowDefinitionManager;
44 import info.magnolia.cms.core.HierarchyManager;
45 import info.magnolia.context.MgnlContext;
46
47 import java.sql.Date;
48 import java.sql.Timestamp;
49 import java.util.Calendar;
50 import java.util.List;
51
52 import javax.servlet.http.HttpServletRequest;
53 import javax.servlet.http.HttpServletResponse;
54
55 import org.apache.commons.lang.StringEscapeUtils;
56 import org.apache.commons.lang.StringUtils;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60
61
62
63
64 public class WorkflowUtilPage extends TemplatedMVCHandler {
65
66 private static final long serialVersionUID = 222L;
67
68 private static final Logger log = LoggerFactory.getLogger(WorkflowUtilPage.class);
69
70 protected FlowDefinitionManager fdm = WorkflowModule.getFlowDefinitionManager();
71
72 public WorkflowUtilPage(String name, HttpServletRequest request, HttpServletResponse response) {
73 super(name, request, response);
74 }
75
76 public String getCurrentTimeStamp() {
77 return new Timestamp(System.currentTimeMillis()).toString();
78 }
79
80 private String flowName;
81
82 private String query;
83
84 private String path;
85
86 private String startDate;
87
88 private String stopDate;
89
90 private String result;
91
92 private String repository;
93
94 private String flow = "<!-- the name of the definition will get used as the upload name-->";
95
96 public String getFlow() {
97 return this.flow;
98 }
99
100 public void setFlow(String flow) {
101 this.flow = flow;
102 }
103
104 public String getFlowName() {
105 return this.flowName;
106 }
107
108 public void setFlowName(String flowName) {
109 this.flowName = StringEscapeUtils.escapeHtml(flowName);
110 }
111
112 @Override
113 public void setCommand(String command) {
114 super.setCommand(StringEscapeUtils.escapeHtml(command));
115 }
116
117 public String getPath() {
118 return this.path;
119 }
120
121 public void setPath(String path) {
122 this.path = path;
123 }
124
125 public String getQuery() {
126 return this.query;
127 }
128
129 public void setQuery(String query) {
130 this.query = query;
131 }
132
133 public String getRepository() {
134 return this.repository;
135 }
136
137 public void setRepository(String repository) {
138 this.repository = repository;
139 }
140
141 public String getStartDate() {
142 return this.startDate;
143 }
144
145 public void setStartDate(String startDate) {
146 this.startDate = startDate;
147 }
148
149 public String getStopDate() {
150 return this.stopDate;
151 }
152
153 public void setStopDate(String stopDate) {
154 this.stopDate = stopDate;
155 }
156
157 public String getResult() {
158 return this.result;
159 }
160
161 public List getFlowList() throws FlowDefinitionException {
162 return fdm.getDefinitionNames();
163 }
164
165 public String showFlow() throws FlowDefinitionException {
166 String flow;
167 flow = fdm.readDefinition(flowName);
168
169
170 if (StringUtils.isEmpty(flow)) {
171 log.error("can not find flow definition for {}", flowName);
172 result = "can not find flow definition for " + flowName;
173 }
174 setFlow(flow);
175 return VIEW_SHOW;
176 }
177
178 public String doQuery() throws Exception {
179 if (query != null && query.length() > 0) {
180 result = WorkflowUtil.getWorkItemStore().doQuery(query).toString();
181 }
182 return VIEW_SHOW;
183 }
184
185 public String updateDate() throws Exception {
186 result = setDate(path, startDate, stopDate);
187 return VIEW_SHOW;
188 }
189
190 public String launchFlow() throws Exception {
191
192 WorkflowUtil.launchFlow(repository, path, flowName);
193
194 return VIEW_SHOW;
195 }
196
197 public String upload() throws Exception {
198
199 if (flow == null) {
200 return null;
201 }
202 flow = flow.trim();
203
204 fdm.saveDefinition(flow);
205
206 result = "Workflow was uploaded successfully.";
207 return VIEW_SHOW;
208 }
209
210 private String setDate(String pathSelected, String start, String stop) throws Exception {
211
212 HierarchyManager hm = MgnlContext.getSystemContext().getHierarchyManager(ContentRepository.WEBSITE);
213 Content ct;
214 try {
215 ct = hm.getContent(pathSelected);
216 Calendar start_c = Calendar.getInstance();
217 Calendar stop_c = Calendar.getInstance();
218 start_c.setTime(new Date(Timestamp.valueOf(start).getTime()));
219 ct.getNodeData(WorkflowConstants.ATTRIBUTE_START_DATE).setValue(start_c);
220 stop_c.setTime(new Date(Timestamp.valueOf(stop).getTime()));
221 ct.getNodeData(WorkflowConstants.ATTRIBUTE_END_DATE).setValue(stop_c);
222 hm.save();
223 return "set date ok. path " + pathSelected + ", start date " + start + ", stop date " + stop;
224 }
225 catch (Exception e) {
226 log.error("can not get content node for path " + pathSelected, e);
227 }
228 return "set date failed";
229 }
230
231 }