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.client.event.message;
019
020import java.util.Date;
021import java.util.HashMap;
022import java.util.Map;
023
024import javax.jms.JMSException;
025import javax.jms.Message;
026
027import org.apache.oozie.AppType;
028import org.apache.oozie.client.event.Event.MessageType;
029import org.apache.oozie.client.event.JobEvent.EventStatus;
030import org.apache.oozie.client.event.JobEvent;
031import org.apache.oozie.client.event.jms.JMSHeaderConstants;
032import org.codehaus.jackson.annotate.JsonIgnore;
033import org.codehaus.jackson.annotate.JsonProperty;
034import org.codehaus.jackson.map.annotate.JsonSerialize;
035
036
037/**
038 * Class holding attributes related to a job message
039 *
040 */
041@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
042public class JobMessage extends EventMessage {
043
044    @JsonProperty
045    private String id;
046    @JsonProperty
047    private String parentId;
048    @JsonProperty
049    private Date startTime;
050    @JsonProperty
051    private Date endTime;
052
053    private Map<String, String> jmsMessageProperties = new HashMap<String, String>();
054    private JobEvent.EventStatus eventStatus;
055    private String appName;
056    private String user;
057
058    /**
059     * Default constructor
060     */
061    public JobMessage() {
062        // Default constructor for jackson
063    }
064
065    /**
066     * Constructs a job message
067     *
068     * @param eventStatus the event status
069     * @param appType the appType for event
070     * @param id the id of job
071     * @param parentId the parent id of job
072     * @param startTime the start time of job
073     * @param endTime the end time of job
074     * @param user user of the job
075     * @param appName appName for job
076     */
077    public JobMessage(JobEvent.EventStatus eventStatus, AppType appType, String id, String parentId, Date startTime,
078            Date endTime, String user, String appName) {
079        super(MessageType.JOB, appType);
080        this.eventStatus = eventStatus;
081        this.id = id;
082        this.parentId = parentId;
083        this.startTime = startTime;
084        this.appName = appName;
085        this.user = user;
086        this.endTime = endTime;
087
088        jmsMessageProperties = new HashMap<String, String>();
089        jmsMessageProperties.put(JMSHeaderConstants.APP_TYPE, appType.toString());
090        jmsMessageProperties.put(JMSHeaderConstants.MESSAGE_TYPE, MessageType.JOB.toString());
091        jmsMessageProperties.put(JMSHeaderConstants.EVENT_STATUS, eventStatus.toString());
092        jmsMessageProperties.put(JMSHeaderConstants.APP_NAME, appName);
093        jmsMessageProperties.put(JMSHeaderConstants.USER, user);
094    }
095
096    /**
097     * Sets the Job id for message
098     *
099     * @param id the job id
100     */
101    public void setId(String id) {
102        this.id = id;
103    }
104
105    /**
106     * Gets the job id
107     *
108     * @return the Job id
109     */
110    public String getId() {
111        return id;
112    }
113
114    /**
115     * Sets the parent job id for message
116     *
117     * @param parentId the parent job id
118     */
119    public void setParentId(String parentId) {
120        this.parentId = parentId;
121    }
122
123    /**
124     * Gets the parent job id
125     *
126     * @return the parentId
127     */
128    public String getParentId() {
129        return parentId;
130    }
131
132    /**
133     * Sets the job start time for message
134     *
135     * @param startTime
136     */
137    public void setStartTime(Date startTime) {
138        this.startTime = startTime;
139    }
140
141    /**
142     * Gets the job start time
143     *
144     * @return the start time
145     */
146    public Date getStartTime() {
147        return startTime;
148    }
149
150    /**
151     * Sets the job end time for message
152     *
153     * @param endTime
154     */
155    public void setEndTime(Date endTime) {
156        this.endTime = endTime;
157    }
158
159    /**
160     * Gets the job end time
161     *
162     * @return the end time
163     */
164    public Date getEndTime() {
165        return endTime;
166    }
167
168    /**
169     * Sets the job's app name for message
170     *
171     * @param appName
172     */
173    public void setAppName(String appName) {
174        this.appName = appName;
175    }
176
177    /**
178     * Gets the job's app name
179     *
180     * @return the app name
181     */
182    @JsonIgnore
183    public String getAppName() {
184        return appName;
185    }
186
187    /**
188     * Sets the JMS selectors for message
189     *
190     * @param properties the jms selector key value pair
191     */
192    void setMessageProperties(Map<String, String> properties) {
193        jmsMessageProperties = properties;
194    }
195
196    /**
197     * Gets the message properties
198     *
199     * @return the message properties
200     */
201    @JsonIgnore
202    public Map<String, String> getMessageProperties() {
203        return jmsMessageProperties;
204    }
205
206    /**
207     * sets the job user for the msg
208     *
209     * @param user
210     */
211    public void setUser(String user) {
212        this.user = user;
213    }
214
215    /**
216     * Gets the job user
217     *
218     * @return the user
219     */
220    @JsonIgnore
221    public String getUser() {
222        return user;
223    }
224
225    /**
226     * Sets the event status
227     *
228     * @param eventStatus
229     */
230    public void setEventStatus(JobEvent.EventStatus eventStatus) {
231        this.eventStatus = eventStatus;
232    }
233
234    /**
235     * Gets the event status
236     *
237     * @return the event status
238     */
239    @JsonIgnore
240    public JobEvent.EventStatus getEventStatus() {
241        return eventStatus;
242    }
243
244    @Override
245    public void setProperties(Message message) throws JMSException {
246        super.setProperties(message);
247        setEventStatus(EventStatus.valueOf(message.getStringProperty(JMSHeaderConstants.EVENT_STATUS)));
248        setAppName(message.getStringProperty(JMSHeaderConstants.APP_NAME));
249        setUser(message.getStringProperty(JMSHeaderConstants.USER));
250    }
251}