001 /**
002 * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
003 * Licensed under the Apache License, Version 2.0 (the "License");
004 * you may not use this file except in compliance with the License.
005 * You may obtain a copy of the License at
006 *
007 * http://www.apache.org/licenses/LICENSE-2.0
008 *
009 * Unless required by applicable law or agreed to in writing, software
010 * distributed under the License is distributed on an "AS IS" BASIS,
011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 * See the License for the specific language governing permissions and
013 * limitations under the License. See accompanying LICENSE file.
014 */
015 package org.apache.oozie.client.rest;
016
017 import org.apache.oozie.client.WorkflowAction;
018 import org.json.simple.JSONArray;
019 import org.json.simple.JSONObject;
020
021 import java.text.MessageFormat;
022 import java.util.ArrayList;
023 import java.util.Date;
024 import java.util.List;
025
026 import javax.persistence.*;
027
028 /**
029 * Json Bean that represents an Oozie workflow node.
030 */
031 @Entity
032 @Table(name = "WF_ACTIONS")
033 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)
034
035 public class JsonWorkflowAction implements WorkflowAction, JsonBean {
036 @Id
037 private String id;
038
039 @Basic
040 @Column(name = "name")
041 private String name = null;
042
043 @Basic
044 @Column(name = "type")
045 private String type = null;
046
047 @Basic
048 @Column(name = "conf")
049 @Lob
050 private String conf = null;
051
052 @Transient
053 private Status status = WorkflowAction.Status.PREP;
054
055 @Basic
056 @Column(name = "retries")
057 private int retries;
058
059 @Transient
060 private Date startTime;
061
062 @Transient
063 private Date endTime;
064
065 @Basic
066 @Column(name = "transition")
067 private String transition = null;
068
069 @Column(name = "data")
070 @Lob
071 private String data = null;
072
073 @Basic
074 @Column(name = "external_id")
075 private String externalId = null;
076
077 @Basic
078 @Column(name = "external_status")
079 private String externalStatus = null;
080
081 @Basic
082 @Column(name = "tracker_uri")
083 private String trackerUri = null;
084
085 @Basic
086 @Column(name = "console_url")
087 private String consoleUrl = null;
088
089 @Basic
090 @Column(name = "error_code")
091 private String errorCode = null;
092
093 @Column(name = "error_message")
094 @Lob
095 private String errorMessage = null;
096
097 public JsonWorkflowAction() {
098 }
099
100 public JsonWorkflowAction(JSONObject jsonObject) {
101 id = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_ID);
102 name = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_NAME);
103 type = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_TYPE);
104 conf = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_CONF);
105 status = Status.valueOf((String) jsonObject.get(JsonTags.WORKFLOW_ACTION_STATUS));
106 retries = (int) JsonUtils.getLongValue(jsonObject, JsonTags.WORKFLOW_ACTION_RETRIES);
107 startTime = JsonUtils.parseDateRfc822((String) jsonObject.get(JsonTags.WORKFLOW_ACTION_START_TIME));
108 endTime = JsonUtils.parseDateRfc822((String) jsonObject.get(JsonTags.WORKFLOW_ACTION_END_TIME));
109 transition = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_TRANSITION);
110 data = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_DATA);
111 externalId = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_EXTERNAL_ID);
112 externalStatus = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_EXTERNAL_STATUS);
113 trackerUri = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_TRACKER_URI);
114 consoleUrl = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_CONSOLE_URL);
115 errorCode = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_ERROR_CODE);
116 errorMessage = (String) jsonObject.get(JsonTags.WORKFLOW_ACTION_ERROR_MESSAGE);
117 }
118
119 @SuppressWarnings("unchecked")
120 public JSONObject toJSONObject() {
121 JSONObject json = new JSONObject();
122 json.put(JsonTags.WORKFLOW_ACTION_ID, id);
123 json.put(JsonTags.WORKFLOW_ACTION_NAME, name);
124 json.put(JsonTags.WORKFLOW_ACTION_TYPE, type);
125 json.put(JsonTags.WORKFLOW_ACTION_CONF, conf);
126 json.put(JsonTags.WORKFLOW_ACTION_START_TIME, JsonUtils.formatDateRfc822(startTime));
127 json.put(JsonTags.WORKFLOW_ACTION_STATUS, status.toString());
128 json.put(JsonTags.WORKFLOW_ACTION_RETRIES, (long) retries);
129 json.put(JsonTags.WORKFLOW_ACTION_START_TIME, JsonUtils.formatDateRfc822(startTime));
130 json.put(JsonTags.WORKFLOW_ACTION_END_TIME, JsonUtils.formatDateRfc822(endTime));
131 json.put(JsonTags.WORKFLOW_ACTION_TRANSITION, transition);
132 json.put(JsonTags.WORKFLOW_ACTION_DATA, data);
133 json.put(JsonTags.WORKFLOW_ACTION_EXTERNAL_ID, externalId);
134 json.put(JsonTags.WORKFLOW_ACTION_EXTERNAL_STATUS, externalStatus);
135 json.put(JsonTags.WORKFLOW_ACTION_TRACKER_URI, trackerUri);
136 json.put(JsonTags.WORKFLOW_ACTION_CONSOLE_URL, consoleUrl);
137 json.put(JsonTags.WORKFLOW_ACTION_ERROR_CODE, errorCode);
138 json.put(JsonTags.WORKFLOW_ACTION_ERROR_MESSAGE, errorMessage);
139 return json;
140 }
141
142 public String getId() {
143 return id;
144 }
145
146 public void setId(String id) {
147 this.id = id;
148 }
149
150 public String getName() {
151 return name;
152 }
153
154 public void setName(String name) {
155 this.name = name;
156 }
157
158 public String getType() {
159 return type;
160 }
161
162 public void setType(String type) {
163 this.type = type;
164 }
165
166 public String getConf() {
167 return conf;
168 }
169
170 public void setConf(String conf) {
171 this.conf = conf;
172 }
173
174 public Status getStatus() {
175 return status;
176 }
177
178 public void setStatus(Status status) {
179 this.status = status;
180 }
181
182 public int getRetries() {
183 return retries;
184 }
185
186 public void setRetries(int retries) {
187 this.retries = retries;
188 }
189
190 public Date getStartTime() {
191 return startTime;
192 }
193
194 public void setStartTime(Date startTime) {
195 this.startTime = startTime;
196 }
197
198 public Date getEndTime() {
199 return endTime;
200 }
201
202 public void setEndTime(Date endTime) {
203 this.endTime = endTime;
204 }
205
206 public String getTransition() {
207 return transition;
208 }
209
210 public void setTransition(String transition) {
211 this.transition = transition;
212 }
213
214 public String getData() {
215 return data;
216 }
217
218 public void setData(String data) {
219 this.data = data;
220 }
221
222 public String getExternalId() {
223 return externalId;
224 }
225
226 public void setExternalId(String externalId) {
227 this.externalId = externalId;
228 }
229
230 public String getExternalStatus() {
231 return externalStatus;
232 }
233
234 public void setExternalStatus(String externalStatus) {
235 this.externalStatus = externalStatus;
236 }
237
238 public String getTrackerUri() {
239 return trackerUri;
240 }
241
242 public void setTrackerUri(String trackerUri) {
243 this.trackerUri = trackerUri;
244 }
245
246 public String getConsoleUrl() {
247 return consoleUrl;
248 }
249
250 public void setConsoleUrl(String consoleUrl) {
251 this.consoleUrl = consoleUrl;
252 }
253
254 public String getErrorCode() {
255 return errorCode;
256 }
257
258 public String getErrorMessage() {
259 return errorMessage;
260 }
261
262 public void setErrorInfo(String errorCode, String errorMessage) {
263 this.errorCode = errorCode;
264 this.errorMessage = errorMessage;
265 }
266
267 public String toString() {
268 return MessageFormat.format("Action name[{0}] status[{1}]", getName(), getStatus());
269 }
270
271 /**
272 * Convert a nodes list into a JSONArray.
273 *
274 * @param nodes nodes list.
275 * @return the corresponding JSON array.
276 */
277 @SuppressWarnings("unchecked")
278 public static JSONArray toJSONArray(List<? extends JsonWorkflowAction> nodes) {
279 JSONArray array = new JSONArray();
280 for (JsonWorkflowAction node : nodes) {
281 array.add(node.toJSONObject());
282 }
283 return array;
284 }
285
286 /**
287 * Convert a JSONArray into a nodes list.
288 *
289 * @param array JSON array.
290 * @return the corresponding nodes list.
291 */
292 @SuppressWarnings("unchecked")
293 public static List<JsonWorkflowAction> fromJSONArray(JSONArray array) {
294 List<JsonWorkflowAction> list = new ArrayList<JsonWorkflowAction>();
295 for (Object obj : array) {
296 list.add(new JsonWorkflowAction((JSONObject) obj));
297 }
298 return list;
299 }
300
301 }