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 }