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 */
018package org.apache.oozie;
019
020import java.io.DataInput;
021import java.io.DataOutput;
022import java.io.IOException;
023import java.text.MessageFormat;
024import java.util.Date;
025
026import javax.persistence.Basic;
027import javax.persistence.Column;
028import javax.persistence.Entity;
029import javax.persistence.NamedQueries;
030import javax.persistence.NamedQuery;
031
032import org.apache.hadoop.io.Writable;
033import org.apache.oozie.client.rest.JsonSLAEvent;
034import org.apache.oozie.util.DateUtils;
035import org.apache.oozie.util.XLog;
036import org.jdom.Element;
037
038@Deprecated
039@Entity
040@NamedQueries({
041        @NamedQuery(name = "GET_SLA_EVENT_NEWER_SEQ_LIMITED", query = "select OBJECT(w) from SLAEventBean w where w.event_id > :id order by w.event_id"),
042        @NamedQuery(name = "GET_SLA_EVENTS", query = "select OBJECT(w) from SLAEventBean w") })
043
044public class SLAEventBean extends JsonSLAEvent implements Writable {
045
046    @Basic
047    @Column(name = "job_status")
048    private String jobStatusStr = null;
049
050    @Basic
051    @Column(name = "app_type")
052    private String appTypeStr = null;
053
054    @Basic
055    @Column(name = "expected_start")
056    private java.sql.Timestamp expectedStartTS = null;
057
058    @Basic
059    @Column(name = "expected_end")
060    private java.sql.Timestamp expectedEndTS = null;
061
062    @Basic
063    @Column(name = "status_timestamp")
064    private java.sql.Timestamp statusTimestampTS = null;
065
066    @Basic
067    @Column(name = "event_type")
068    private String eventType = null;
069
070    public SLAEventBean() {
071
072    }
073
074    public String getJobStatusStr() {
075        return jobStatusStr;
076    }
077
078    public void setJobStatusStr(String jobStatusStr) {
079        this.jobStatusStr = jobStatusStr;
080    }
081
082    @Override
083    public Status getJobStatus() {
084        return Status.valueOf(this.jobStatusStr);
085    }
086
087    @Override
088    public void setJobStatus(Status jobStatus) {
089        super.setJobStatus(jobStatus);
090        this.jobStatusStr = jobStatus.toString();
091    }
092
093    public String getAppTypeStr() {
094        return appTypeStr;
095    }
096
097    public void setAppTypeStr(String appTypeStr) {
098        this.appTypeStr = appTypeStr;
099    }
100
101    @Override
102    public SlaAppType getAppType() {
103        return SlaAppType.valueOf(appTypeStr);
104    }
105
106    @Override
107    public void setAppType(SlaAppType appType) {
108        super.setAppType(appType);
109        this.appTypeStr = appType.toString();
110    }
111
112    public java.sql.Timestamp getExpectedStartTS() {
113        return expectedStartTS;
114    }
115
116    @Override
117    public Date getExpectedStart() {
118        return DateUtils.toDate(expectedStartTS);
119    }
120
121    @Override
122    public void setExpectedStart(Date expectedStart) {
123        super.setExpectedStart(expectedStart);
124        this.expectedStartTS = DateUtils.convertDateToTimestamp(expectedStart);
125    }
126
127    public java.sql.Timestamp getExpectedEndTS() {
128        return expectedEndTS;
129    }
130
131    @Override
132    public Date getExpectedEnd() {
133        return DateUtils.toDate(expectedEndTS);
134    }
135
136    @Override
137    public void setExpectedEnd(Date expectedEnd) {
138        super.setExpectedEnd(expectedEnd);
139        this.expectedEndTS = DateUtils.convertDateToTimestamp(expectedEnd);
140    }
141
142    public java.sql.Timestamp getStatusTimestampTS() {
143        return statusTimestampTS;
144    }
145
146    @Override
147    public Date getStatusTimestamp() {
148        return DateUtils.toDate(statusTimestampTS);
149    }
150
151    @Override
152    public void setStatusTimestamp(Date statusTimestamp) {
153        super.setStatusTimestamp(statusTimestamp);
154        this.statusTimestampTS = DateUtils.convertDateToTimestamp(statusTimestamp);
155    }
156
157    public String getEventType() {
158        return eventType;
159    }
160
161    public void setEventType(String eventType) {
162        this.eventType = eventType;
163    }
164
165    @Override
166    public void readFields(DataInput arg0) throws IOException {
167        // TODO Auto-generated method stub
168
169    }
170
171    @Override
172    public void write(DataOutput arg0) throws IOException {
173        // TODO Auto-generated method stub
174
175    }
176
177    @Override
178    public String toString() {
179        return MessageFormat.format("Event id[{0}] status[{1}]", getEvent_id(), getJobStatus());
180    }
181
182    public Element toXml() {
183        Element retElem = null;
184        if (getJobStatus() == Status.CREATED) {
185            retElem = getRegistrationEvent("event");
186        }
187        else {
188            retElem = getStatusEvent("event");
189        }
190        return retElem;
191    }
192
193    private Element getRegistrationEvent(String tag) {
194        Element eReg = new Element(tag);
195        eReg.addContent(createATagElement("sequence-id", String.valueOf(getEvent_id())));
196        Element e = new Element("registration");
197        e.addContent(createATagElement("sla-id", getSlaId()));
198        e.addContent(createATagElement("app-type", getAppType().toString()));
199        e.addContent(createATagElement("app-name", getAppName()));
200        e.addContent(createATagElement("user", getUser()));
201        e.addContent(createATagElement("group", getGroupName()));
202        e.addContent(createATagElement("parent-sla-id", String
203                .valueOf(getParentSlaId())));
204        e.addContent(createATagElement("expected-start",
205                                       getDateString(getExpectedStart())));
206        e.addContent(createATagElement("expected-end",
207                                       getDateString(getExpectedEnd())));
208        e.addContent(createATagElement("status-timestamp",
209                                       getDateString(getStatusTimestamp())));
210        e.addContent(createATagElement("notification-msg", getNotificationMsg()));
211
212        e.addContent(createATagElement("alert-contact", getAlertContact()));
213        e.addContent(createATagElement("dev-contact", getDevContact()));
214        e.addContent(createATagElement("qa-contact", getQaContact()));
215        e.addContent(createATagElement("se-contact", getSeContact()));
216
217        e.addContent(createATagElement("alert-percentage", getAlertPercentage()));
218        e.addContent(createATagElement("alert-frequency", getAlertFrequency()));
219
220        e.addContent(createATagElement("upstream-apps", getUpstreamApps()));
221        e.addContent(createATagElement("job-status", getJobStatus().toString()));
222        e.addContent(createATagElement("job-data", getJobData()));
223        eReg.addContent(e);
224        return eReg;
225    }
226
227    private Element getStatusEvent(String tag) {
228        Element eStat = new Element(tag);
229        eStat.addContent(createATagElement("sequence-id", String.valueOf(getEvent_id())));
230        Element e = new Element("status");
231        e.addContent(createATagElement("sla-id", getSlaId()));
232        e.addContent(createATagElement("status-timestamp", getDateString(getStatusTimestamp())));
233        e.addContent(createATagElement("job-status", getJobStatus().toString()));
234        e.addContent(createATagElement("job-data", getJobData()));
235        e.addContent(createATagElement("user", getUser()));
236        e.addContent(createATagElement("group", getGroupName()));
237        e.addContent(createATagElement("app-name", getAppName()));
238        eStat.addContent(e);
239        return eStat;
240    }
241
242    private Element createATagElement(String tag, String content) {
243        if (content == null) {
244            content = "";
245        }
246        Element e = new Element(tag);
247        e.addContent(content);
248        return e;
249    }
250
251    private String getDateString(Date d) {
252        try {
253            return DateUtils.formatDateOozieTZ(d);
254        }
255        catch (Exception e) {
256            e.printStackTrace();
257            XLog.getLog(getClass()).error("Date formatting error " + d, e);
258            throw new RuntimeException("Date formatting error " + d + e);
259        }
260    }
261
262}