This project has retired. For details please refer to its
Attic page.
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.apache.oozie.client.WorkflowJob;
022 import org.json.simple.JSONArray;
023 import org.json.simple.JSONObject;
024
025 import java.text.MessageFormat;
026 import java.util.ArrayList;
027 import java.util.Date;
028 import java.util.List;
029
030 import javax.persistence.*;
031
032 /**
033 * Json Bean that represents an Oozie workflow job.
034 */
035
036 @Entity
037 @Table(name = "WF_JOBS")
038 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
039 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)
040 public class JsonWorkflowJob implements WorkflowJob, JsonBean {
041
042 @Id
043 private String id;
044
045 @Basic
046 @Column(name = "app_name")
047 private String appName = null;
048
049 @Basic
050 @Column(name = "app_path")
051 private String appPath = null;
052
053 @Transient
054 private String externalId = null;
055
056 @Column(name = "conf")
057 @Lob
058 private String conf = null;
059
060 @Transient
061 private Status status = WorkflowJob.Status.PREP;
062
063 @Transient
064 private Date createdTime;
065
066 @Transient
067 private Date startTime;
068
069 @Transient
070 private Date endTime;
071
072 @Transient
073 private Date lastModifiedTime;
074
075 @Basic
076 @Column(name = "user_name")
077 private String user = null;
078
079 @Basic
080 @Column(name = "group_name")
081 private String group;
082
083 @Basic
084 @Column(name = "run")
085 private int run = 1;
086
087 @Basic
088 @Column(name = "parent_id")
089 private String parentId;
090
091 @Transient
092 private String consoleUrl;
093
094 @Transient
095 private List<? extends JsonWorkflowAction> actions;
096
097 public JsonWorkflowJob() {
098 actions = new ArrayList<JsonWorkflowAction>();
099 }
100
101 @SuppressWarnings("unchecked")
102 public JSONObject toJSONObject() {
103 return toJSONObject("GMT");
104 }
105
106 @SuppressWarnings("unchecked")
107 public JSONObject toJSONObject(String timeZoneId) {
108 JSONObject json = new JSONObject();
109 json.put(JsonTags.WORKFLOW_APP_PATH, getAppPath());
110 json.put(JsonTags.WORKFLOW_APP_NAME, getAppName());
111 json.put(JsonTags.WORKFLOW_ID, getId());
112 json.put(JsonTags.WORKFLOW_EXTERNAL_ID, getExternalId());
113 json.put(JsonTags.WORKFLOW_PARENT_ID, getParentId());
114 json.put(JsonTags.WORKFLOW_CONF, getConf());
115 json.put(JsonTags.WORKFLOW_STATUS, getStatus().toString());
116 json.put(JsonTags.WORKFLOW_LAST_MOD_TIME, JsonUtils.formatDateRfc822(getLastModifiedTime(), timeZoneId));
117 json.put(JsonTags.WORKFLOW_CREATED_TIME, JsonUtils.formatDateRfc822(getCreatedTime(), timeZoneId));
118 json.put(JsonTags.WORKFLOW_START_TIME, JsonUtils.formatDateRfc822(getStartTime(), timeZoneId));
119 json.put(JsonTags.WORKFLOW_END_TIME, JsonUtils.formatDateRfc822(getEndTime(), timeZoneId));
120 json.put(JsonTags.WORKFLOW_USER, getUser());
121 json.put(JsonTags.WORKFLOW_GROUP, getGroup());
122 json.put(JsonTags.WORKFLOW_ACL, getAcl());
123 json.put(JsonTags.WORKFLOW_RUN, (long) getRun());
124 json.put(JsonTags.WORKFLOW_CONSOLE_URL, getConsoleUrl());
125 json.put(JsonTags.WORKFLOW_ACTIONS, JsonWorkflowAction.toJSONArray(actions, timeZoneId));
126 json.put(JsonTags.TO_STRING, toString());
127 return json;
128 }
129
130 public String getAppPath() {
131 return appPath;
132 }
133
134 public void setAppPath(String appPath) {
135 this.appPath = appPath;
136 }
137
138 public String getAppName() {
139 return appName;
140 }
141
142 public void setAppName(String appName) {
143 this.appName = appName;
144 }
145
146 public String getId() {
147 return id;
148 }
149
150 public void setId(String id) {
151 this.id = id;
152 }
153
154 public void setExternalId(String externalId) {
155 this.externalId = externalId;
156 }
157
158 public String getExternalId() {
159 return externalId;
160 }
161
162 public String getConf() {
163 return conf;
164 }
165
166 public void setConf(String conf) {
167 this.conf = conf;
168 }
169
170 public Status getStatus() {
171 return status;
172 }
173
174 public void setStatus(Status status) {
175 this.status = status;
176 }
177
178 public Date getLastModifiedTime() {
179 return lastModifiedTime;
180 }
181
182 public void setLastModifiedTime(Date lastModTime) {
183 this.lastModifiedTime = lastModTime;
184 }
185
186 public Date getCreatedTime() {
187 return createdTime;
188 }
189
190 public void setCreatedTime(Date createdTime) {
191 this.createdTime = createdTime;
192 }
193
194 public Date getStartTime() {
195 return startTime;
196 }
197
198 public void setStartTime(Date startTime) {
199 this.startTime = startTime;
200 }
201
202 public Date getEndTime() {
203 return endTime;
204 }
205
206 public void setEndTime(Date endTime) {
207 this.endTime = endTime;
208 }
209
210 public String getUser() {
211 return user;
212 }
213
214 public void setUser(String user) {
215 this.user = user;
216 }
217
218 public String getGroup() {
219 return group;
220 }
221
222 @Override
223 public String getAcl() {
224 return getGroup();
225 }
226
227 public void setGroup(String group) {
228 this.group = group;
229 }
230
231 public int getRun() {
232 return run;
233 }
234
235 public void setRun(int run) {
236 this.run = run;
237 }
238
239 /**
240 * Return the workflow job console URL.
241 *
242 * @return the workflow job console URL.
243 */
244 public String getConsoleUrl() {
245 return consoleUrl;
246 }
247
248 /**
249 * Return the corresponding Action ID, if any.
250 *
251 * @return the coordinator Action Id.
252 */
253 public String getParentId() {
254 return parentId;
255 }
256
257 /**
258 * Set coordinator action id
259 *
260 * @param parentId : coordinator action id
261 */
262 public void setParentId(String parentId) {
263 this.parentId = parentId;
264 }
265
266 /**
267 * Set the workflow job console URL.
268 *
269 * @param consoleUrl the workflow job console URL.
270 */
271 public void setConsoleUrl(String consoleUrl) {
272 this.consoleUrl = consoleUrl;
273 }
274
275 @SuppressWarnings("unchecked")
276 public List<WorkflowAction> getActions() {
277 return (List) actions;
278 }
279
280 public void setActions(List<? extends JsonWorkflowAction> nodes) {
281 this.actions = (nodes != null) ? nodes : new ArrayList<JsonWorkflowAction>();
282 }
283
284 @Override
285 public String toString() {
286 return MessageFormat.format("Workflow id[{0}] status[{1}]", getId(), getStatus());
287 }
288
289 /**
290 * Convert a workflows list into a JSONArray.
291 *
292 * @param workflows workflows list.
293 * @param timeZoneId time zone to use for dates in the JSON array.
294 * @return the corresponding JSON array.
295 */
296 @SuppressWarnings("unchecked")
297 public static JSONArray toJSONArray(List<? extends JsonWorkflowJob> workflows, String timeZoneId) {
298 JSONArray array = new JSONArray();
299 if (workflows != null) {
300 for (JsonWorkflowJob node : workflows) {
301 array.add(node.toJSONObject(timeZoneId));
302 }
303 }
304 return array;
305 }
306
307 }