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.event.message;
019    
020    import java.util.Date;
021    
022    import javax.jms.JMSException;
023    import javax.jms.Message;
024    
025    import org.apache.oozie.AppType;
026    import org.apache.oozie.client.event.Event.MessageType;
027    import org.apache.oozie.client.event.SLAEvent;
028    import org.apache.oozie.client.event.jms.JMSHeaderConstants;
029    import org.apache.oozie.client.event.message.EventMessage;
030    import org.codehaus.jackson.annotate.JsonIgnore;
031    import org.codehaus.jackson.annotate.JsonProperty;
032    import org.codehaus.jackson.map.annotate.JsonSerialize;
033    
034    @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
035    public class SLAMessage extends EventMessage {
036    
037        @JsonProperty
038        private String id;
039        @JsonProperty
040        private String parentId;
041        @JsonProperty
042        private Date nominalTime;
043        @JsonProperty
044        private Date expectedStartTime;
045        @JsonProperty
046        private Date actualStartTime;
047        @JsonProperty
048        private Date expectedEndTime;
049        @JsonProperty
050        private Date actualEndTime;
051        @JsonProperty
052        private long expectedDuration;
053        @JsonProperty
054        private long actualDuration;
055        @JsonProperty
056        private String notificationMessage;
057        @JsonProperty
058        private String upstreamApps;
059    
060        private String user;
061        private String appName;
062        private SLAEvent.EventStatus eventStatus;
063        private SLAEvent.SLAStatus slaStatus;
064    
065        public SLAMessage(){
066            // Dummy constructor for JSON
067        }
068    
069        public SLAMessage(SLAEvent.EventStatus eventStatus, SLAEvent.SLAStatus slaStatus, AppType appType, String appName,
070                String user, String jobId, String parentJobId, Date nominalTime, Date expectedStartTime,
071                Date actualStartTime, Date expectedEndTime, Date actualEndTime, long expectedDuration, long actualDuration,
072                String notificationMessage, String upstreamApps) {
073    
074            super(MessageType.SLA, appType);
075            this.eventStatus = eventStatus;
076            this.slaStatus = slaStatus;
077            this.appName = appName;
078            this.user = user;
079            this.id = jobId;
080            this.parentId = parentJobId;
081            this.nominalTime = nominalTime;
082            this.expectedStartTime = expectedStartTime;
083            this.actualStartTime = actualStartTime;
084            this.expectedEndTime = expectedEndTime;
085            this.actualEndTime = actualEndTime;
086            this.expectedDuration = expectedDuration;
087            this.actualDuration = actualDuration;
088            this.notificationMessage = notificationMessage;
089            this.upstreamApps = upstreamApps;
090        }
091    
092        /**
093         * Get the job Id
094         *
095         * @return id the job id
096         */
097        public String getId() {
098            return id;
099        }
100    
101        /**
102         * Set the job Id for message
103         *
104         * @param id the job id
105         */
106        public void setId(String id) {
107            this.id = id;
108        }
109    
110        /**
111         * Gets the parent job id
112         *
113         * @return the parent job Id
114         */
115        public String getParentId() {
116            return parentId;
117        }
118    
119        /**
120         * Set the parent job Id for message
121         *
122         * @param parentId the parent job Id
123         */
124        public void setParentId(String parentId) {
125            this.parentId = parentId;
126        }
127    
128        /**
129         * Get nominal time
130         *
131         * @return nominal time
132         */
133        public Date getNominalTime() {
134            return nominalTime;
135        }
136    
137        /**
138         * Set nominal time for message
139         *
140         * @param nominalTime
141         */
142        public void setNominalTime(Date nominalTime) {
143            this.nominalTime = nominalTime;
144        }
145    
146        /**
147         * Get expected start time
148         *
149         * @return the expected start time
150         */
151        public Date getExpectedStartTime() {
152            return expectedStartTime;
153        }
154    
155        /**
156         * Set expected start time for message
157         *
158         * @param expectedStartTime
159         */
160        public void setExpectedStartTime(Date expectedStartTime) {
161            this.expectedStartTime = expectedStartTime;
162        }
163    
164        /**
165         * Get actual start time
166         *
167         * @return actual start time
168         */
169        public Date getActualStartTime() {
170            return actualStartTime;
171        }
172    
173        /**
174         * Set actual start time for message
175         *
176         * @param actualStartTime
177         */
178        public void setActualStartTime(Date actualStartTime) {
179            this.actualStartTime = actualStartTime;
180        }
181    
182        /**
183         * Get expected end time
184         *
185         * @return expectedEndTime
186         */
187        public Date getExpectedEndTime() {
188            return expectedEndTime;
189        }
190    
191        /**
192         * Set expected end time for message
193         *
194         * @param expectedEndTime
195         */
196        public void setExpectedEndTime(Date expectedEndTime) {
197            this.expectedEndTime = expectedEndTime;
198        }
199    
200        /**
201         * Get actual end time
202         *
203         * @return actual end time
204         */
205        public Date getActualEndTime() {
206            return actualEndTime;
207        }
208    
209        /**
210         * Set actual end time for message
211         *
212         * @param actualEndTime
213         */
214        public void setActualEndTime(Date actualEndTime) {
215            this.actualEndTime = actualEndTime;
216        }
217    
218        /**
219         * Get expected duration time (in milliseconds)
220         *
221         * @return expectedDuration (in milliseconds)
222         */
223        public long getExpectedDuration() {
224            return expectedDuration;
225        }
226    
227        /**
228         * Set expected duration (in milliseconds) for message
229         *
230         * @param expectedDuration (in milliseconds)
231         */
232        public void setExpectedDuration(long expectedDuration) {
233            this.expectedDuration = expectedDuration;
234        }
235    
236        /**
237         * Get actual duration (in milliseconds)
238         *
239         * @return actual duration (in milliseconds)
240         */
241        public long getActualDuration() {
242            return actualDuration;
243        }
244    
245        /**
246         * Set actual duration (in milliseconds) for message
247         *
248         * @param actualDuration (in milliseconds)
249         */
250        public void setActualDuration(long actualDuration) {
251            this.actualDuration = actualDuration;
252        }
253    
254        /**
255         * Get notification message
256         *
257         * @return notification message
258         */
259        public String getNotificationMessage() {
260            return notificationMessage;
261        }
262    
263        /**
264         * Set notification message
265         *
266         * @param notificationMessage
267         */
268        public void setNotificationMessage(String notificationMessage) {
269            this.notificationMessage = notificationMessage;
270        }
271    
272        /**
273         * Get upstream app names
274         *
275         * @return upstreamApps
276         */
277        public String getUpstreamApps() {
278            return upstreamApps;
279        }
280    
281        /**
282         * Set upstream app names
283         *
284         * @param upstreamApps
285         */
286        public void setUpstreamApps(String upstreamApps) {
287            this.upstreamApps = upstreamApps;
288        }
289    
290        /**
291         * Get user name
292         *
293         * @return user name
294         */
295        @JsonIgnore
296        public String getUser() {
297            return user;
298        }
299    
300        /**
301         * Set user name for message
302         *
303         * @param user
304         */
305        public void setUser(String user) {
306            this.user = user;
307        }
308    
309        /**
310         * Get application name
311         *
312         * @return application name
313         */
314        @JsonIgnore
315        public String getAppName() {
316            return appName;
317        }
318    
319        /**
320         * Set application name for message
321         *
322         * @param appName
323         */
324        public void setAppName(String appName) {
325            this.appName = appName;
326        }
327    
328        /**
329         * Get event status
330         *
331         * @return event status
332         */
333        @JsonIgnore
334        public SLAEvent.EventStatus getEventStatus() {
335            return eventStatus;
336        }
337    
338        /**
339         * Set event status
340         *
341         * @param eventStatus
342         */
343        public void setEventStatus(SLAEvent.EventStatus eventStatus){
344            this.eventStatus = eventStatus;
345        }
346    
347        /**
348         * Get SLA status
349         *
350         * @return sla status
351         */
352        @JsonIgnore
353        public SLAEvent.SLAStatus getSLAStatus() {
354            return slaStatus;
355        }
356    
357        /**
358         * Set SLA status for message
359         *
360         * @param slaStatus
361         */
362        public void setSLAStatus(SLAEvent.SLAStatus slaStatus) {
363            this.slaStatus = slaStatus;
364        }
365    
366        /**
367         * Set the JMS properties for SLA message
368         *
369         * @param message the JMS message
370         * @throws JMSException
371         */
372        @Override
373        @JsonIgnore
374        public void setProperties(Message message) throws JMSException {
375            super.setProperties(message);
376            setEventStatus(SLAEvent.EventStatus.valueOf(message.getStringProperty(JMSHeaderConstants.EVENT_STATUS)));
377            setSLAStatus(SLAEvent.SLAStatus.valueOf(message.getStringProperty(JMSHeaderConstants.SLA_STATUS)));
378            setAppName(message.getStringProperty(JMSHeaderConstants.APP_NAME));
379            setUser(message.getStringProperty(JMSHeaderConstants.USER));
380        }
381    }