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 java.text.MessageFormat;
018 import java.util.ArrayList;
019 import java.util.Date;
020 import java.util.List;
021
022 import javax.persistence.Basic;
023 import javax.persistence.Column;
024 import javax.persistence.DiscriminatorColumn;
025 import javax.persistence.DiscriminatorType;
026 import javax.persistence.Entity;
027 import javax.persistence.Id;
028 import javax.persistence.Lob;
029 import javax.persistence.Table;
030 import javax.persistence.Transient;
031
032 import org.apache.oozie.client.CoordinatorAction;
033 import org.json.simple.JSONArray;
034 import org.json.simple.JSONObject;
035
036 @Entity
037 @Table(name = "COORD_ACTIONS")
038 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)
039 public class JsonCoordinatorAction implements CoordinatorAction, JsonBean {
040
041 @Id
042 private String id;
043
044 @Transient
045 private String jobId;
046
047 @Basic
048 @Column(name = "job_type")
049 private String type;
050
051 @Transient
052 private Status status = CoordinatorAction.Status.WAITING;
053
054 @Basic
055 @Column(name = "action_number")
056 private int actionNumber;
057
058 @Transient
059 private Date createdTime;
060
061 @Column(name = "created_conf")
062 @Lob
063 private String createdConf;
064
065 @Transient
066 private String externalId;
067
068 @Basic
069 @Column(name = "time_out")
070 private int timeOut = 0;
071
072 @Transient
073 private Date lastModifiedTime;
074
075 @Transient
076 private Date nominalTime;
077
078 @Column(name = "run_conf")
079 @Lob
080 private String runConf;
081
082 @Column(name = "action_xml")
083 @Lob
084 private String actionXml;
085
086 @Column(name = "missing_dependencies")
087 @Lob
088 private String missingDependencies;
089
090 @Basic
091 @Column(name = "external_status")
092 private String externalStatus;
093
094 @Basic
095 @Column(name = "tracker_uri")
096 private String trackerUri;
097
098 @Basic
099 @Column(name = "console_url")
100 private String consoleUrl;
101
102 @Basic
103 @Column(name = "error_code")
104 private String errorCode;
105
106 @Basic
107 @Column(name = "error_message")
108 private String errorMessage;
109
110 public JsonCoordinatorAction() {
111
112 }
113
114 public JsonCoordinatorAction(JSONObject jsonObject) {
115 id = (String) jsonObject.get(JsonTags.COORDINATOR_ACTION_ID);
116 jobId = (String) jsonObject.get(JsonTags.COORDINATOR_JOB_ID);
117
118 type = (String) jsonObject.get(JsonTags.COORDINATOR_ACTION_TYPE);
119 actionNumber = (int) JsonUtils.getLongValue(jsonObject,
120 JsonTags.COORDINATOR_ACTION_NUMBER);
121 createdConf = (String) jsonObject
122 .get(JsonTags.COORDINATOR_ACTION_CREATED_CONF);
123 createdTime = JsonUtils.parseDateRfc822((String) jsonObject
124 .get(JsonTags.COORDINATOR_ACTION_CREATED_TIME));
125 nominalTime = JsonUtils.parseDateRfc822((String) jsonObject
126 .get(JsonTags.COORDINATOR_ACTION_NOMINAL_TIME));
127 externalId = (String) jsonObject.get(JsonTags.COORDINATOR_ACTION_EXTERNALID);
128 status = Status.valueOf((String) jsonObject
129 .get(JsonTags.COORDINATOR_ACTION_STATUS));
130 lastModifiedTime = JsonUtils.parseDateRfc822((String) jsonObject
131 .get(JsonTags.COORDINATOR_ACTION_LAST_MODIFIED_TIME));
132 /*
133 * startTime = JsonUtils.parseDateRfc822((String) jsonObject
134 * .get(JsonTags.COORDINATOR_ACTION_START_TIME)); endTime =
135 * JsonUtils.parseDateRfc822((String) jsonObject
136 * .get(JsonTags.COORDINATOR_ACTION_END_TIME));
137 */
138 runConf = (String) jsonObject
139 .get(JsonTags.COORDINATOR_ACTION_RUNTIME_CONF);
140 missingDependencies = (String) jsonObject
141 .get(JsonTags.COORDINATOR_ACTION_MISSING_DEPS);
142 externalStatus = (String) jsonObject
143 .get(JsonTags.COORDINATOR_ACTION_EXTERNAL_STATUS);
144 trackerUri = (String) jsonObject
145 .get(JsonTags.COORDINATOR_ACTION_TRACKER_URI);
146 consoleUrl = (String) jsonObject
147 .get(JsonTags.COORDINATOR_ACTION_CONSOLE_URL);
148 errorCode = (String) jsonObject
149 .get(JsonTags.COORDINATOR_ACTION_ERROR_CODE);
150 errorMessage = (String) jsonObject
151 .get(JsonTags.COORDINATOR_ACTION_ERROR_MESSAGE);
152 }
153
154 @SuppressWarnings("unchecked")
155 public JSONObject toJSONObject() {
156 JSONObject json = new JSONObject();
157 json.put(JsonTags.COORDINATOR_ACTION_ID, id);
158 json.put(JsonTags.COORDINATOR_JOB_ID, jobId);
159 json.put(JsonTags.COORDINATOR_ACTION_TYPE, type);
160 json.put(JsonTags.COORDINATOR_ACTION_NUMBER, actionNumber);
161 json.put(JsonTags.COORDINATOR_ACTION_CREATED_CONF, createdConf);
162 json.put(JsonTags.COORDINATOR_ACTION_CREATED_TIME, JsonUtils
163 .formatDateRfc822(createdTime));
164 json.put(JsonTags.COORDINATOR_ACTION_NOMINAL_TIME, JsonUtils
165 .formatDateRfc822(nominalTime));
166 json.put(JsonTags.COORDINATOR_ACTION_EXTERNALID, externalId);
167 // json.put(JsonTags.COORDINATOR_ACTION_START_TIME, JsonUtils
168 // .formatDateRfc822(startTime));
169 json.put(JsonTags.COORDINATOR_ACTION_STATUS, status.toString());
170 json.put(JsonTags.COORDINATOR_ACTION_RUNTIME_CONF, runConf);
171 json.put(JsonTags.COORDINATOR_ACTION_LAST_MODIFIED_TIME, JsonUtils
172 .formatDateRfc822(lastModifiedTime));
173 // json.put(JsonTags.COORDINATOR_ACTION_START_TIME, JsonUtils
174 // .formatDateRfc822(startTime));
175 // json.put(JsonTags.COORDINATOR_ACTION_END_TIME, JsonUtils
176 // .formatDateRfc822(endTime));
177 json.put(JsonTags.COORDINATOR_ACTION_MISSING_DEPS, missingDependencies);
178 json.put(JsonTags.COORDINATOR_ACTION_EXTERNAL_STATUS, externalStatus);
179 json.put(JsonTags.COORDINATOR_ACTION_TRACKER_URI, trackerUri);
180 json.put(JsonTags.COORDINATOR_ACTION_CONSOLE_URL, consoleUrl);
181 json.put(JsonTags.COORDINATOR_ACTION_ERROR_CODE, errorCode);
182 json.put(JsonTags.COORDINATOR_ACTION_ERROR_MESSAGE, errorMessage);
183 return json;
184 }
185
186 public String getId() {
187 return id;
188 }
189
190 public void setId(String id) {
191 this.id = id;
192 }
193
194 public String getJobId() {
195 return jobId;
196 }
197
198 public void setJobId(String id) {
199 this.jobId = id;
200 }
201
202 public String getType() {
203 return type;
204 }
205
206 public void setType(String type) {
207 this.type = type;
208 }
209
210 public String getExternalId() {
211 return externalId;
212 }
213
214 public void setExternalId(String extId) {
215 this.externalId = extId;
216 }
217
218
219 public void setActionNumber(int actionNumber) {
220 this.actionNumber = actionNumber;
221 }
222
223 public int getActionNumber() {
224 return actionNumber;
225 }
226
227 public String getCreatedConf() {
228 return createdConf;
229 }
230
231 public void setCreatedConf(String createdConf) {
232 this.createdConf = createdConf;
233 }
234
235 public void setCreatedTime(Date createdTime) {
236 this.createdTime = createdTime;
237 }
238
239 public Date getCreatedTime() {
240 return createdTime;
241 }
242
243 public Status getStatus() {
244 return status;
245 }
246
247 public void setStatus(Status status) {
248 this.status = status;
249 }
250
251 public void setLastModifiedTime(Date lastModifiedTime) {
252 this.lastModifiedTime = lastModifiedTime;
253 }
254
255 public Date getLastModifiedTime() {
256 return lastModifiedTime;
257 }
258
259 public void setRunConf(String runConf) {
260 this.runConf = runConf;
261 }
262
263 public String getRunConf() {
264 return runConf;
265 }
266
267 public void setMissingDependencies(String missingDependencies) {
268 this.missingDependencies = missingDependencies;
269 }
270
271 public String getMissingDependencies() {
272 return missingDependencies;
273 }
274
275 public String getExternalStatus() {
276 return externalStatus;
277 }
278
279 public void setExternalStatus(String externalStatus) {
280 this.externalStatus = externalStatus;
281 }
282
283 public String getTrackerUri() {
284 return trackerUri;
285 }
286
287 public void setTrackerUri(String trackerUri) {
288 this.trackerUri = trackerUri;
289 }
290
291 public String getConsoleUrl() {
292 return consoleUrl;
293 }
294
295 public void setConsoleUrl(String consoleUrl) {
296 this.consoleUrl = consoleUrl;
297 }
298
299 public String getErrorCode() {
300 return errorCode;
301 }
302
303 public String getErrorMessage() {
304 return errorMessage;
305 }
306
307 public void setErrorInfo(String errorCode, String errorMessage) {
308 this.errorCode = errorCode;
309 this.errorMessage = errorMessage;
310 }
311
312 public String getActionXml() {
313 return actionXml;
314 }
315
316 public void setActionXml(String actionXml) {
317 this.actionXml = actionXml;
318 }
319
320 @Override
321 public String toString() {
322 return MessageFormat.format("WorkflowAction name[{0}] status[{1}]",
323 getId(), getStatus());
324 }
325
326 public Date getNominalTime() {
327 return nominalTime;
328 }
329
330 public void setNominalTime(Date nominalTime) {
331 this.nominalTime = nominalTime;
332 }
333
334 public int getTimeOut() {
335 return timeOut;
336 }
337
338 public void setTimeOut(int timeOut) {
339 this.timeOut = timeOut;
340 }
341
342
343 public void setErrorCode(String errorCode) {
344 this.errorCode = errorCode;
345 }
346
347 public void setErrorMessage(String errorMessage) {
348 this.errorMessage = errorMessage;
349 }
350
351 /**
352 * Convert a nodes list into a JSONArray.
353 *
354 * @param nodes nodes list.
355 * @return the corresponding JSON array.
356 */
357 @SuppressWarnings("unchecked")
358 public static JSONArray toJSONArray(
359 List<? extends JsonCoordinatorAction> actions) {
360 JSONArray array = new JSONArray();
361 for (JsonCoordinatorAction action : actions) {
362 array.add(action.toJSONObject());
363 }
364 return array;
365 }
366
367 /**
368 * Convert a JSONArray into a nodes list.
369 *
370 * @param array JSON array.
371 * @return the corresponding nodes list.
372 */
373 @SuppressWarnings("unchecked")
374 public static List<JsonCoordinatorAction> fromJSONArray(JSONArray array) {
375 List<JsonCoordinatorAction> list = new ArrayList<JsonCoordinatorAction>();
376 for (Object obj : array) {
377 list.add(new JsonCoordinatorAction((JSONObject) obj));
378 }
379 return list;
380 }
381
382 /*
383 * (non-Javadoc)
384 *
385 * @see java.lang.Object#hashCode()
386 */
387 @Override
388 public int hashCode() {
389 final int prime = 31;
390 int result = 1;
391 result = prime * result + ((id == null) ? 0 : id.hashCode());
392 return result;
393 }
394
395 /*
396 * (non-Javadoc)
397 *
398 * @see java.lang.Object#equals(java.lang.Object)
399 */
400 @Override
401 public boolean equals(Object obj) {
402 if (this == obj) {
403 return true;
404 }
405 if (obj == null) {
406 return false;
407 }
408 if (getClass() != obj.getClass()) {
409 return false;
410 }
411 JsonCoordinatorAction other = (JsonCoordinatorAction) obj;
412 if (id == null) {
413 if (other.id != null) {
414 return false;
415 }
416 }
417 else if (!id.equals(other.id)) {
418 return false;
419 }
420 return true;
421 }
422 }