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 JSONObject json = new JSONObject();
142 json.put(JsonTags.BUNDLE_JOB_PATH, appPath);
143 json.put(JsonTags.BUNDLE_JOB_NAME, appName);
144 json.put(JsonTags.BUNDLE_JOB_ID, id);
145 json.put(JsonTags.BUNDLE_JOB_EXTERNAL_ID, externalId);
146 json.put(JsonTags.BUNDLE_JOB_CONF, conf);
147 json.put(JsonTags.BUNDLE_JOB_STATUS, getStatus().toString());
148 json.put(JsonTags.BUNDLE_JOB_TIMEUNIT, getTimeUnit().toString());
149 json.put(JsonTags.BUNDLE_JOB_TIMEOUT, timeOut);
150 json.put(JsonTags.BUNDLE_JOB_KICKOFF_TIME, JsonUtils.formatDateRfc822(getKickoffTime()));
151 json.put(JsonTags.BUNDLE_JOB_START_TIME, JsonUtils.formatDateRfc822(getStartTime()));
152 json.put(JsonTags.BUNDLE_JOB_END_TIME, JsonUtils.formatDateRfc822(getEndTime()));
153 json.put(JsonTags.BUNDLE_JOB_PAUSE_TIME, JsonUtils.formatDateRfc822(getPauseTime()));
154 json.put(JsonTags.BUNDLE_JOB_CREATED_TIME, JsonUtils.formatDateRfc822(getCreatedTime()));
155 json.put(JsonTags.BUNDLE_JOB_USER, getUser());
156 json.put(JsonTags.BUNDLE_JOB_GROUP, getGroup());
157 json.put(JsonTags.BUNDLE_JOB_CONSOLE_URL, getConsoleUrl());
158 json.put(JsonTags.BUNDLE_COORDINATOR_JOBS, JsonCoordinatorJob.toJSONArray(coordJobs));
159 json.put(JsonTags.TO_STRING, toString());
160
161 return json;
162 }
163
164 /* (non-Javadoc)
165 * @see org.apache.oozie.client.Job#getAppName()
166 */
167 @Override
168 public String getAppName() {
169 return appName;
170 }
171
172 /* (non-Javadoc)
173 * @see org.apache.oozie.client.Job#getAppPath()
174 */
175 @Override
176 public String getAppPath() {
177 return appPath;
178 }
179
180 /* (non-Javadoc)
181 * @see org.apache.oozie.client.Job#getConf()
182 */
183 @Override
184 public String getConf() {
185 return conf;
186 }
187
188 /* (non-Javadoc)
189 * @see org.apache.oozie.client.Job#getConsoleUrl()
190 */
191 @Override
192 public String getConsoleUrl() {
193 return consoleUrl;
194 }
195
196 /* (non-Javadoc)
197 * @see org.apache.oozie.client.BundleJob#getCoordinators()
198 */
199 @Override
200 @SuppressWarnings("unchecked")
201 public List<CoordinatorJob> getCoordinators() {
202 return (List) coordJobs;
203 }
204
205 /* (non-Javadoc)
206 * @see org.apache.oozie.client.Job#getEndTime()
207 */
208 @Override
209 public Date getEndTime() {
210 return endTime;
211 }
212
213 /* (non-Javadoc)
214 * @see org.apache.oozie.client.Job#getGroup()
215 */
216 @Override
217 public String getGroup() {
218 return group;
219 }
220
221 /* (non-Javadoc)
222 * @see org.apache.oozie.client.Job#getId()
223 */
224 @Override
225 public String getId() {
226 return id;
227 }
228
229 /* (non-Javadoc)
230 * @see org.apache.oozie.client.Job#getKickoffTime()
231 */
232 @Override
233 public Date getKickoffTime() {
234 return kickoffTime;
235 }
236
237 /* (non-Javadoc)
238 * @see org.apache.oozie.client.Job#getStatus()
239 */
240 @Override
241 public Status getStatus() {
242 return status;
243 }
244
245 /* (non-Javadoc)
246 * @see org.apache.oozie.client.BundleJob#getTimeUnit()
247 */
248 @Override
249 public Timeunit getTimeUnit() {
250 return timeUnit;
251 }
252
253 /* (non-Javadoc)
254 * @see org.apache.oozie.client.BundleJob#getTimeout()
255 */
256 @Override
257 public int getTimeout() {
258 return timeOut;
259 }
260
261 /* (non-Javadoc)
262 * @see org.apache.oozie.client.Job#getUser()
263 */
264 @Override
265 public String getUser() {
266 return user;
267 }
268
269 /**
270 * Set id
271 *
272 * @param id the id to set
273 */
274 public void setId(String id) {
275 this.id = id;
276 }
277
278 /**
279 * Set bundlePath
280 *
281 * @param bundlePath the bundlePath to set
282 */
283 public void setAppPath(String bundlePath) {
284 this.appPath = bundlePath;
285 }
286
287 /**
288 * Set bundleName
289 *
290 * @param bundleName the bundleName to set
291 */
292 public void setAppName(String bundleName) {
293 this.appName = bundleName;
294 }
295
296 /**
297 * Return externalId
298 *
299 * @return externalId
300 */
301 public String getExternalId() {
302 return this.externalId;
303 }
304
305 /**
306 * Set externalId
307 *
308 * @param externalId the externalId to set
309 */
310 public void setExternalId(String externalId) {
311 this.externalId = externalId;
312 }
313
314 /**
315 * Set conf
316 *
317 * @param conf the conf to set
318 */
319 public void setConf(String conf) {
320 this.conf = conf;
321 }
322
323 /**
324 * Set status
325 *
326 * @param status the status to set
327 */
328 @Override
329 public void setStatus(Status status) {
330 this.status = status;
331 }
332
333 /**
334 * Set kickoffTime
335 *
336 * @param kickoffTime the kickoffTime to set
337 */
338 public void setKickoffTime(Date kickoffTime) {
339 this.kickoffTime = kickoffTime;
340 }
341
342 /**
343 * Set startTime
344 *
345 * @param kickoffTime the kickoffTime to set
346 */
347 public void setStartTime(Date startTime) {
348 this.startTime = startTime;
349 }
350
351 /**
352 * Set endTime
353 *
354 * @param endTime the endTime to set
355 */
356 public void setEndTime(Date endTime) {
357 this.endTime = endTime;
358 }
359
360 /**
361 * Get pauseTime
362 *
363 * @return pauseTime
364 */
365 public Date getPauseTime() {
366 return pauseTime;
367 }
368
369 /**
370 * Set pauseTime
371 *
372 * @param pauseTime the pauseTime to set
373 */
374 public void setPauseTime(Date pauseTime) {
375 this.pauseTime = pauseTime;
376 }
377
378 /**
379 * Get createdTime
380 *
381 * @return createdTime
382 */
383 public Date getCreatedTime() {
384 return createdTime;
385 }
386
387 /**
388 * Set createdTime
389 *
390 * @param createdTime the createdTime to set
391 */
392 public void setCreatedTime(Date createdTime) {
393 this.createdTime = createdTime;
394 }
395
396 /**
397 * Set timeUnit
398 *
399 * @param timeUnit the timeUnit to set
400 */
401 public void setTimeUnit(Timeunit timeUnit) {
402 this.timeUnit = timeUnit;
403 }
404
405 /**
406 * Set timeOut
407 *
408 * @param timeOut the timeOut to set
409 */
410 public void setTimeOut(int timeOut) {
411 this.timeOut = timeOut;
412 }
413
414 /**
415 * Set user
416 *
417 * @param user the user to set
418 */
419 public void setUser(String user) {
420 this.user = user;
421 }
422
423 /**
424 * Set group
425 *
426 * @param group the group to set
427 */
428 public void setGroup(String group) {
429 this.group = group;
430 }
431
432 /**
433 * Set consoleUrl
434 *
435 * @param consoleUrl the consoleUrl to set
436 */
437 public void setConsoleUrl(String consoleUrl) {
438 this.consoleUrl = consoleUrl;
439 }
440
441 /**
442 * Set coordJobs
443 *
444 * @param coordJobs the coordJobs to set
445 */
446 public void setCoordJobs(List<? extends JsonCoordinatorJob> coordJobs) {
447 this.coordJobs = (coordJobs != null) ? coordJobs : new ArrayList<JsonCoordinatorJob>();
448 }
449
450 /**
451 * Convert a Bundle job list into a JSONArray.
452 *
453 * @param application list.
454 * @return the corresponding JSON array.
455 */
456 @SuppressWarnings("unchecked")
457 public static JSONArray toJSONArray(List<? extends JsonBundleJob> applications) {
458 JSONArray array = new JSONArray();
459 if (applications != null) {
460 for (JsonBundleJob application : applications) {
461 array.add(application.toJSONObject());
462 }
463 }
464 return array;
465 }
466
467 /* (non-Javadoc)
468 * @see org.apache.oozie.client.Job#getStartTime()
469 */
470 @Override
471 public Date getStartTime() {
472 return startTime;
473 }
474
475 /**
476 * Set pending to true
477 *
478 * @param pending set pending to true
479 */
480 public void setPending() {
481 this.pending = 1;
482 }
483
484 /**
485 * Set pending to false
486 *
487 * @param pending set pending to false
488 */
489 public void resetPending() {
490 this.pending = 0;
491 }
492
493 @Override
494 public String toString() {
495 return MessageFormat.format("Bundle id[{0}] status[{1}]", getId(), getStatus());
496 }
497 }