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