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