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 java.text.MessageFormat;
021 import java.util.ArrayList;
022 import java.util.Date;
023 import java.util.List;
024
025 import javax.persistence.Basic;
026 import javax.persistence.Column;
027 import javax.persistence.DiscriminatorColumn;
028 import javax.persistence.DiscriminatorType;
029 import javax.persistence.Entity;
030 import javax.persistence.Id;
031 import javax.persistence.Lob;
032 import javax.persistence.Table;
033 import javax.persistence.Transient;
034
035 import org.apache.oozie.client.CoordinatorAction;
036 import org.apache.oozie.client.CoordinatorJob;
037 import org.json.simple.JSONArray;
038 import org.json.simple.JSONObject;
039
040 @Entity
041 @Table(name = "COORD_JOBS")
042 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)
043 public class JsonCoordinatorJob implements CoordinatorJob, JsonBean {
044
045 @Id
046 private String id;
047
048 @Basic
049 @Column(name = "app_path")
050 private String appPath = null;
051
052 @Basic
053 @Column(name = "app_name")
054 private String appName = null;
055
056 @Basic
057 @Column(name = "external_id")
058 private String externalId = null;
059
060 @Column(name = "conf")
061 @Lob
062 private String conf = null;
063
064 @Transient
065 private Status status = CoordinatorJob.Status.PREP;
066
067 @Transient
068 private Execution executionOrder = CoordinatorJob.Execution.FIFO;
069
070 @Transient
071 private Date startTime;
072
073 @Transient
074 private Date endTime;
075
076 @Transient
077 private Date pauseTime;
078
079 @Basic
080 @Column(name = "frequency")
081 private String frequency = "0";
082
083 @Basic
084 @Column(name = "time_zone")
085 private String timeZone = null;
086
087 @Basic
088 @Column(name = "concurrency")
089 private int concurrency = 0;
090
091 @Basic
092 @Column(name = "mat_throttling")
093 private int matThrottling = 0;
094
095 @Transient
096 private Timeunit timeUnit = CoordinatorJob.Timeunit.MINUTE;
097
098 @Basic
099 @Column(name = "time_out")
100 private int timeOut = 0;
101
102 @Transient
103 private Date lastAction;
104
105 @Basic
106 @Column(name = "last_action_number")
107 private int lastActionNumber;
108
109 @Transient
110 private Date nextMaterializedTime;
111
112 @Basic
113 @Column(name = "user_name")
114 private String user = null;
115
116 @Basic
117 @Column(name = "group_name")
118 private String group = null;
119
120 @Basic
121 @Column(name = "bundle_id")
122 private String bundleId = null;
123
124 @Transient
125 private String consoleUrl;
126
127 @Transient
128 private List<? extends JsonCoordinatorAction> actions;
129
130 @Transient
131 private int pending = 0;
132
133 @Transient
134 private int numActions = 0;
135
136 public JsonCoordinatorJob() {
137 actions = new ArrayList<JsonCoordinatorAction>();
138 }
139
140 @SuppressWarnings("unchecked")
141 public JSONObject toJSONObject() {
142 return toJSONObject("GMT");
143 }
144
145 @SuppressWarnings("unchecked")
146 public JSONObject toJSONObject(String timeZoneId) {
147 JSONObject json = new JSONObject();
148 json.put(JsonTags.COORDINATOR_JOB_PATH, getAppPath());
149 json.put(JsonTags.COORDINATOR_JOB_NAME, getAppName());
150 json.put(JsonTags.COORDINATOR_JOB_ID, getId());
151 json.put(JsonTags.COORDINATOR_JOB_EXTERNAL_ID, getExternalId());
152 json.put(JsonTags.COORDINATOR_JOB_BUNDLE_ID, getBundleId());
153 json.put(JsonTags.COORDINATOR_JOB_CONF, getConf());
154 json.put(JsonTags.COORDINATOR_JOB_STATUS, getStatus().toString());
155 json.put(JsonTags.COORDINATOR_JOB_EXECUTIONPOLICY, getExecutionOrder().toString());
156 json.put(JsonTags.COORDINATOR_JOB_FREQUENCY, getFrequency());
157 json.put(JsonTags.COORDINATOR_JOB_TIMEUNIT, getTimeUnit().toString());
158 json.put(JsonTags.COORDINATOR_JOB_TIMEZONE, getTimeZone());
159 json.put(JsonTags.COORDINATOR_JOB_CONCURRENCY, getConcurrency());
160 json.put(JsonTags.COORDINATOR_JOB_TIMEOUT, getTimeout());
161 json.put(JsonTags.COORDINATOR_JOB_LAST_ACTION_TIME, JsonUtils.formatDateRfc822(getLastActionTime(), timeZoneId));
162 json.put(JsonTags.COORDINATOR_JOB_NEXT_MATERIALIZED_TIME,
163 JsonUtils.formatDateRfc822(getNextMaterializedTime(), timeZoneId));
164 json.put(JsonTags.COORDINATOR_JOB_START_TIME, JsonUtils.formatDateRfc822(getStartTime(), timeZoneId));
165 json.put(JsonTags.COORDINATOR_JOB_END_TIME, JsonUtils.formatDateRfc822(getEndTime(), timeZoneId));
166 json.put(JsonTags.COORDINATOR_JOB_PAUSE_TIME, JsonUtils.formatDateRfc822(getPauseTime(), timeZoneId));
167 json.put(JsonTags.COORDINATOR_JOB_USER, getUser());
168 json.put(JsonTags.COORDINATOR_JOB_GROUP, getGroup());
169 json.put(JsonTags.COORDINATOR_JOB_ACL, getAcl());
170 json.put(JsonTags.COORDINATOR_JOB_CONSOLE_URL, getConsoleUrl());
171 json.put(JsonTags.COORDINATOR_JOB_MAT_THROTTLING, getMatThrottling());
172 json.put(JsonTags.COORDINATOR_ACTIONS, JsonCoordinatorAction.toJSONArray(actions, timeZoneId));
173 json.put(JsonTags.TO_STRING,toString());
174 json.put(JsonTags.COORDINATOR_JOB_NUM_ACTION, numActions);
175
176 return json;
177 }
178
179 public String getAppPath() {
180 return appPath;
181 }
182
183 public void setAppPath(String appPath) {
184 this.appPath = appPath;
185 }
186
187 public String getAppName() {
188 return appName;
189 }
190
191 public void setAppName(String appName) {
192 this.appName = appName;
193 }
194
195 public String getId() {
196 return id;
197 }
198
199 public void setId(String id) {
200 this.id = id;
201 }
202
203 public void setExternalId(String externalId) {
204 this.externalId = externalId;
205 }
206
207 public String getExternalId() {
208 return externalId;
209 }
210
211 public String getConf() {
212 return conf;
213 }
214
215 public void setConf(String conf) {
216 this.conf = conf;
217 }
218
219 public Status getStatus() {
220 return status;
221 }
222
223 public void setStatus(Status status) {
224 this.status = status;
225 }
226
227 public void setFrequency(String frequency) {
228 this.frequency = frequency;
229 }
230
231 public String getFrequency() {
232 return frequency;
233 }
234
235 public void setTimeUnit(Timeunit timeUnit) {
236 this.timeUnit = timeUnit;
237 }
238
239 public Timeunit getTimeUnit() {
240 return timeUnit;
241 }
242
243 public void setTimeZone(String timeZone) {
244 this.timeZone = timeZone;
245 }
246
247 public String getTimeZone() {
248 return timeZone;
249 }
250
251 public void setConcurrency(int concurrency) {
252 this.concurrency = concurrency;
253 }
254
255 public int getConcurrency() {
256 return concurrency;
257 }
258
259 public int getMatThrottling() {
260 return matThrottling;
261 }
262
263 public void setMatThrottling(int matThrottling) {
264 this.matThrottling = matThrottling;
265 }
266
267 public void setExecutionOrder(Execution order) {
268 this.executionOrder = order;
269 }
270
271 public Execution getExecutionOrder() {
272 return executionOrder;
273 }
274
275 public void setTimeout(int timeOut) {
276 this.timeOut = timeOut;
277 }
278
279 public int getTimeout() {
280 return timeOut;
281 }
282
283 public void setLastActionTime(Date lastAction) {
284 this.lastAction = lastAction;
285 }
286
287 public Date getLastActionTime() {
288 return lastAction;
289 }
290
291 public Date getNextMaterializedTime() {
292 return nextMaterializedTime;
293 }
294
295 public void setNextMaterializedTime(Date nextMaterializedTime) {
296 this.nextMaterializedTime = nextMaterializedTime;
297 }
298
299 public Date getStartTime() {
300 return startTime;
301 }
302
303 public void setStartTime(Date startTime) {
304 this.startTime = startTime;
305 }
306
307 public Date getEndTime() {
308 return endTime;
309 }
310
311 public void setEndTime(Date endTime) {
312 this.endTime = endTime;
313 }
314
315 public Date getPauseTime() {
316 return pauseTime;
317 }
318
319 public void setPauseTime(Date pauseTime) {
320 this.pauseTime = pauseTime;
321 }
322
323 public String getUser() {
324 return user;
325 }
326
327 public void setUser(String user) {
328 this.user = user;
329 }
330
331 public String getGroup() {
332 return group;
333 }
334
335 @Override
336 public String getAcl() {
337 return getGroup();
338 }
339
340 public void setGroup(String group) {
341 this.group = group;
342 }
343
344 public String getBundleId() {
345 return bundleId;
346 }
347
348 public void setBundleId(String bundleId) {
349 this.bundleId = bundleId;
350 }
351
352 /**
353 * Return the coordinate application console URL.
354 *
355 * @return the coordinate application console URL.
356 */
357 public String getConsoleUrl() {
358 return consoleUrl;
359 }
360
361 /**
362 * Set the coordinate application console URL.
363 *
364 * @param consoleUrl the coordinate application console URL.
365 */
366 public void setConsoleUrl(String consoleUrl) {
367 this.consoleUrl = consoleUrl;
368 }
369
370 @Override
371 public String toString() {
372 return MessageFormat.format("Coordinator application id[{0}] status[{1}]", getId(), getStatus());
373 }
374
375 public void setActions(List<? extends JsonCoordinatorAction> nodes) {
376 this.actions = (nodes != null) ? nodes : new ArrayList<JsonCoordinatorAction>();
377 }
378
379 @SuppressWarnings("unchecked")
380 public List<CoordinatorAction> getActions() {
381 return (List) actions;
382 }
383
384 /**
385 * Convert a coordinator application list into a JSONArray.
386 *
387 * @param applications list.
388 * @param timeZoneId time zone to use for dates in the JSON array.
389 * @return the corresponding JSON array.
390 */
391 @SuppressWarnings("unchecked")
392 public static JSONArray toJSONArray(List<? extends JsonCoordinatorJob> applications, String timeZoneId) {
393 JSONArray array = new JSONArray();
394 if (applications != null) {
395 for (JsonCoordinatorJob application : applications) {
396 array.add(application.toJSONObject(timeZoneId));
397 }
398 }
399 return array;
400 }
401
402 public int getLastActionNumber() {
403 return lastActionNumber;
404 }
405
406 public void setLastActionNumber(int lastActionNumber) {
407 this.lastActionNumber = lastActionNumber;
408 }
409
410 /**
411 * Set pending to true
412 */
413 public void setPending() {
414 this.pending = 1;
415 }
416
417 /**
418 * Set pending to false
419 */
420 public void resetPending() {
421 this.pending = 0;
422 }
423
424 public int getNumActions() {
425 return numActions;
426 }
427
428 public void setNumActions(int numAction) {
429 this.numActions = numAction;
430 }
431
432 }