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.BundleJob;
036 import org.apache.oozie.client.CoordinatorJob;
037 import org.apache.oozie.client.Job;
038 import org.json.simple.JSONArray;
039 import org.json.simple.JSONObject;
040
041 @Entity
042 @Table(name = "BUNDLE_JOBS")
043 @DiscriminatorColumn(name = "bean_type", discriminatorType = DiscriminatorType.STRING)
044 public class JsonBundleJob implements BundleJob, JsonBean {
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 = Job.Status.PREP;
066
067 @Transient
068 private Date kickoffTime;
069
070 @Transient
071 private Date startTime;
072
073 @Transient
074 private Date endTime;
075
076 @Transient
077 private Date pauseTime;
078
079 @Transient
080 private Date createdTime;
081
082 @Transient
083 private Timeunit timeUnit = BundleJob.Timeunit.MINUTE;
084
085 @Basic
086 @Column(name = "time_out")
087 private int timeOut = 0;
088
089 @Basic
090 @Column(name = "user_name")
091 private String user = null;
092
093 @Basic
094 @Column(name = "group_name")
095 private String group = null;
096
097 @Transient
098 private String consoleUrl;
099
100 @Transient
101 private int pending = 0;
102
103 @Transient
104 private List<? extends JsonCoordinatorJob> coordJobs;
105
106 public JsonBundleJob() {
107 coordJobs = new ArrayList<JsonCoordinatorJob>();
108 }
109
110 /**
111 * Get the value from the json object.
112 *
113 * @param json
114 public JsonBundleJob(JSONObject json) {
115 appPath = (String) json.get(JsonTags.BUNDLE_JOB_PATH);
116 appName = (String) json.get(JsonTags.BUNDLE_JOB_NAME);
117 id = (String) json.get(JsonTags.BUNDLE_JOB_ID);
118 externalId = (String) json.get(JsonTags.BUNDLE_JOB_EXTERNAL_ID);
119 conf = (String) json.get(JsonTags.BUNDLE_JOB_CONF);
120 status = Status.valueOf((String) json.get(JsonTags.BUNDLE_JOB_STATUS));
121 kickoffTime = JsonUtils.parseDateRfc822((String) json.get(JsonTags.BUNDLE_JOB_KICKOFF_TIME));
122 startTime = JsonUtils.parseDateRfc822((String) json.get(JsonTags.BUNDLE_JOB_START_TIME));
123 endTime = JsonUtils.parseDateRfc822((String) json.get(JsonTags.BUNDLE_JOB_END_TIME));
124 pauseTime = JsonUtils.parseDateRfc822((String) json.get(JsonTags.BUNDLE_JOB_PAUSE_TIME));
125 createdTime = JsonUtils.parseDateRfc822((String) json.get(JsonTags.BUNDLE_JOB_CREATED_TIME));
126 timeUnit = Timeunit.valueOf((String) json.get(JsonTags.BUNDLE_JOB_TIMEUNIT));
127 timeOut = (int) JsonUtils.getLongValue(json, JsonTags.BUNDLE_JOB_TIMEOUT);
128 user = (String) json.get(JsonTags.BUNDLE_JOB_USER);
129 group = (String) json.get(JsonTags.BUNDLE_JOB_GROUP);
130 consoleUrl = (String) json.get(JsonTags.BUNDLE_JOB_CONSOLE_URL);
131 coordJobs = JsonCoordinatorJob.fromJSONArray((JSONArray) json.get(JsonTags.BUNDLE_COORDINATOR_JOBS));
132 }
133 */
134
135 /* (non-Javadoc)
136 * @see org.apache.oozie.client.rest.JsonBean#toJSONObject()
137 */
138 @Override
139 @SuppressWarnings("unchecked")
140 public JSONObject toJSONObject() {
141 return toJSONObject("GMT");
142 }
143
144 /* (non-Javadoc)
145 * @see org.apache.oozie.client.rest.JsonBean#toJSONObject(String timeZoneId)
146 */
147 @Override
148 @SuppressWarnings("unchecked")
149 public JSONObject toJSONObject(String timeZoneId) {
150 JSONObject json = new JSONObject();
151 json.put(JsonTags.BUNDLE_JOB_PATH, appPath);
152 json.put(JsonTags.BUNDLE_JOB_NAME, appName);
153 json.put(JsonTags.BUNDLE_JOB_ID, id);
154 json.put(JsonTags.BUNDLE_JOB_EXTERNAL_ID, externalId);
155 json.put(JsonTags.BUNDLE_JOB_CONF, conf);
156 json.put(JsonTags.BUNDLE_JOB_STATUS, getStatus().toString());
157 json.put(JsonTags.BUNDLE_JOB_TIMEUNIT, getTimeUnit().toString());
158 json.put(JsonTags.BUNDLE_JOB_TIMEOUT, timeOut);
159 json.put(JsonTags.BUNDLE_JOB_KICKOFF_TIME, JsonUtils.formatDateRfc822(getKickoffTime(), timeZoneId));
160 json.put(JsonTags.BUNDLE_JOB_START_TIME, JsonUtils.formatDateRfc822(getStartTime(), timeZoneId));
161 json.put(JsonTags.BUNDLE_JOB_END_TIME, JsonUtils.formatDateRfc822(getEndTime(), timeZoneId));
162 json.put(JsonTags.BUNDLE_JOB_PAUSE_TIME, JsonUtils.formatDateRfc822(getPauseTime(), timeZoneId));
163 json.put(JsonTags.BUNDLE_JOB_CREATED_TIME, JsonUtils.formatDateRfc822(getCreatedTime(), timeZoneId));
164 json.put(JsonTags.BUNDLE_JOB_USER, getUser());
165 json.put(JsonTags.BUNDLE_JOB_GROUP, getGroup());
166 json.put(JsonTags.BUNDLE_JOB_ACL, getAcl());
167 json.put(JsonTags.BUNDLE_JOB_CONSOLE_URL, getConsoleUrl());
168 json.put(JsonTags.BUNDLE_COORDINATOR_JOBS, JsonCoordinatorJob.toJSONArray(coordJobs, timeZoneId));
169 json.put(JsonTags.TO_STRING, toString());
170
171 return json;
172 }
173
174 /* (non-Javadoc)
175 * @see org.apache.oozie.client.Job#getAppName()
176 */
177 @Override
178 public String getAppName() {
179 return appName;
180 }
181
182 /* (non-Javadoc)
183 * @see org.apache.oozie.client.Job#getAppPath()
184 */
185 @Override
186 public String getAppPath() {
187 return appPath;
188 }
189
190 /* (non-Javadoc)
191 * @see org.apache.oozie.client.Job#getConf()
192 */
193 @Override
194 public String getConf() {
195 return conf;
196 }
197
198 /* (non-Javadoc)
199 * @see org.apache.oozie.client.Job#getConsoleUrl()
200 */
201 @Override
202 public String getConsoleUrl() {
203 return consoleUrl;
204 }
205
206 /* (non-Javadoc)
207 * @see org.apache.oozie.client.BundleJob#getCoordinators()
208 */
209 @Override
210 @SuppressWarnings("unchecked")
211 public List<CoordinatorJob> getCoordinators() {
212 return (List) coordJobs;
213 }
214
215 /* (non-Javadoc)
216 * @see org.apache.oozie.client.Job#getEndTime()
217 */
218 @Override
219 public Date getEndTime() {
220 return endTime;
221 }
222
223 /* (non-Javadoc)
224 * @see org.apache.oozie.client.Job#getGroup()
225 */
226 @Override
227 @Deprecated
228 public String getGroup() {
229 return group;
230 }
231
232 @Override
233 public String getAcl() {
234 return getGroup();
235 }
236
237 /* (non-Javadoc)
238 * @see org.apache.oozie.client.Job#getId()
239 */
240 @Override
241 public String getId() {
242 return id;
243 }
244
245 /* (non-Javadoc)
246 * @see org.apache.oozie.client.Job#getKickoffTime()
247 */
248 @Override
249 public Date getKickoffTime() {
250 return kickoffTime;
251 }
252
253 /* (non-Javadoc)
254 * @see org.apache.oozie.client.Job#getStatus()
255 */
256 @Override
257 public Status getStatus() {
258 return status;
259 }
260
261 /* (non-Javadoc)
262 * @see org.apache.oozie.client.BundleJob#getTimeUnit()
263 */
264 @Override
265 public Timeunit getTimeUnit() {
266 return timeUnit;
267 }
268
269 /* (non-Javadoc)
270 * @see org.apache.oozie.client.BundleJob#getTimeout()
271 */
272 @Override
273 public int getTimeout() {
274 return timeOut;
275 }
276
277 /* (non-Javadoc)
278 * @see org.apache.oozie.client.Job#getUser()
279 */
280 @Override
281 public String getUser() {
282 return user;
283 }
284
285 /**
286 * Set id
287 *
288 * @param id the id to set
289 */
290 public void setId(String id) {
291 this.id = id;
292 }
293
294 /**
295 * Set bundlePath
296 *
297 * @param bundlePath the bundlePath to set
298 */
299 public void setAppPath(String bundlePath) {
300 this.appPath = bundlePath;
301 }
302
303 /**
304 * Set bundleName
305 *
306 * @param bundleName the bundleName to set
307 */
308 public void setAppName(String bundleName) {
309 this.appName = bundleName;
310 }
311
312 /**
313 * Return externalId
314 *
315 * @return externalId
316 */
317 public String getExternalId() {
318 return this.externalId;
319 }
320
321 /**
322 * Set externalId
323 *
324 * @param externalId the externalId to set
325 */
326 public void setExternalId(String externalId) {
327 this.externalId = externalId;
328 }
329
330 /**
331 * Set conf
332 *
333 * @param conf the conf to set
334 */
335 public void setConf(String conf) {
336 this.conf = conf;
337 }
338
339 /**
340 * Set status
341 *
342 * @param status the status to set
343 */
344 @Override
345 public void setStatus(Status status) {
346 this.status = status;
347 }
348
349 /**
350 * Set kickoffTime
351 *
352 * @param kickoffTime the kickoffTime to set
353 */
354 public void setKickoffTime(Date kickoffTime) {
355 this.kickoffTime = kickoffTime;
356 }
357
358 /**
359 * Set startTime
360 *
361 * @param kickoffTime the kickoffTime to set
362 */
363 public void setStartTime(Date startTime) {
364 this.startTime = startTime;
365 }
366
367 /**
368 * Set endTime
369 *
370 * @param endTime the endTime to set
371 */
372 public void setEndTime(Date endTime) {
373 this.endTime = endTime;
374 }
375
376 /**
377 * Get pauseTime
378 *
379 * @return pauseTime
380 */
381 public Date getPauseTime() {
382 return pauseTime;
383 }
384
385 /**
386 * Set pauseTime
387 *
388 * @param pauseTime the pauseTime to set
389 */
390 public void setPauseTime(Date pauseTime) {
391 this.pauseTime = pauseTime;
392 }
393
394 /**
395 * Get createdTime
396 *
397 * @return createdTime
398 */
399 public Date getCreatedTime() {
400 return createdTime;
401 }
402
403 /**
404 * Set createdTime
405 *
406 * @param createdTime the createdTime to set
407 */
408 public void setCreatedTime(Date createdTime) {
409 this.createdTime = createdTime;
410 }
411
412 /**
413 * Set timeUnit
414 *
415 * @param timeUnit the timeUnit to set
416 */
417 public void setTimeUnit(Timeunit timeUnit) {
418 this.timeUnit = timeUnit;
419 }
420
421 /**
422 * Set timeOut
423 *
424 * @param timeOut the timeOut to set
425 */
426 public void setTimeOut(int timeOut) {
427 this.timeOut = timeOut;
428 }
429
430 /**
431 * Set user
432 *
433 * @param user the user to set
434 */
435 public void setUser(String user) {
436 this.user = user;
437 }
438
439 /**
440 * Set group
441 *
442 * @param group the group to set
443 */
444 public void setGroup(String group) {
445 this.group = group;
446 }
447
448 /**
449 * Set consoleUrl
450 *
451 * @param consoleUrl the consoleUrl to set
452 */
453 public void setConsoleUrl(String consoleUrl) {
454 this.consoleUrl = consoleUrl;
455 }
456
457 /**
458 * Set coordJobs
459 *
460 * @param coordJobs the coordJobs to set
461 */
462 public void setCoordJobs(List<? extends JsonCoordinatorJob> coordJobs) {
463 this.coordJobs = (coordJobs != null) ? coordJobs : new ArrayList<JsonCoordinatorJob>();
464 }
465
466 /**
467 * Convert a Bundle job list into a JSONArray.
468 *
469 * @param application list.
470 * @param timeZoneId time zone to use for dates in the JSON array.
471 * @return the corresponding JSON array.
472 */
473 @SuppressWarnings("unchecked")
474 public static JSONArray toJSONArray(List<? extends JsonBundleJob> applications, String timeZoneId) {
475 JSONArray array = new JSONArray();
476 if (applications != null) {
477 for (JsonBundleJob application : applications) {
478 array.add(application.toJSONObject(timeZoneId));
479 }
480 }
481 return array;
482 }
483
484 /* (non-Javadoc)
485 * @see org.apache.oozie.client.Job#getStartTime()
486 */
487 @Override
488 public Date getStartTime() {
489 return startTime;
490 }
491
492 /**
493 * Set pending to true
494 *
495 * @param pending set pending to true
496 */
497 public void setPending() {
498 this.pending = 1;
499 }
500
501 /**
502 * Set pending to false
503 *
504 * @param pending set pending to false
505 */
506 public void resetPending() {
507 this.pending = 0;
508 }
509
510 @Override
511 public String toString() {
512 return MessageFormat.format("Bundle id[{0}] status[{1}]", getId(), getStatus());
513 }
514 }