1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   *
13   */
14  
15  package com.liferay.portal.scheduler.messaging;
16  
17  import com.liferay.portal.kernel.log.Log;
18  import com.liferay.portal.kernel.log.LogFactoryUtil;
19  import com.liferay.portal.kernel.messaging.Message;
20  import com.liferay.portal.kernel.messaging.MessageBusUtil;
21  import com.liferay.portal.kernel.messaging.MessageListener;
22  import com.liferay.portal.kernel.messaging.sender.MessageSender;
23  import com.liferay.portal.kernel.scheduler.SchedulerEngine;
24  import com.liferay.portal.kernel.scheduler.TriggerType;
25  import com.liferay.portal.kernel.scheduler.messaging.SchedulerRequest;
26  
27  import java.util.List;
28  
29  /**
30   * <a href="SchedulerMessageListener.java.html"><b><i>View Source</i></b></a>
31   *
32   * @author Michael C. Han
33   * @author Bruno Farache
34   */
35  public class SchedulerMessageListener implements MessageListener {
36  
37      public SchedulerMessageListener() {
38      }
39  
40      /**
41       * @deprecated
42       */
43      public SchedulerMessageListener(
44          MessageSender messageSender, SchedulerEngine schedulerEngine) {
45  
46          _messageSender = messageSender;
47          _schedulerEngine = schedulerEngine;
48      }
49  
50      public void receive(Message message) {
51          try {
52              doReceive(message);
53          }
54          catch (Exception e) {
55              _log.error("Unable to process message " + message, e);
56          }
57      }
58  
59      public void setMessageSender(MessageSender messageSender) {
60          _messageSender = messageSender;
61      }
62  
63      public void setSchedulerEngine(SchedulerEngine schedulerEngine) {
64          _schedulerEngine = schedulerEngine;
65      }
66  
67      protected void doReceive(Message message) throws Exception {
68          SchedulerRequest schedulerRequest =
69              (SchedulerRequest)message.getPayload();
70  
71          String command = schedulerRequest.getCommand();
72  
73          if (command.equals(SchedulerRequest.COMMAND_REGISTER)) {
74              TriggerType triggerType = schedulerRequest.getTriggerType();
75  
76              if (triggerType.equals(TriggerType.CRON)) {
77                  _schedulerEngine.schedule(
78                      schedulerRequest.getJobName(),
79                      schedulerRequest.getGroupName(),
80                      schedulerRequest.getCronText(),
81                      schedulerRequest.getStartDate(),
82                      schedulerRequest.getEndDate(),
83                      schedulerRequest.getDescription(),
84                      schedulerRequest.getDestination(),
85                      schedulerRequest.getMessageBody());
86              }
87              else if (triggerType.equals(TriggerType.SIMPLE)) {
88                  _schedulerEngine.schedule(
89                      schedulerRequest.getJobName(),
90                      schedulerRequest.getGroupName(),
91                      schedulerRequest.getInterval(),
92                      schedulerRequest.getStartDate(),
93                      schedulerRequest.getEndDate(),
94                      schedulerRequest.getDescription(),
95                      schedulerRequest.getDestination(),
96                      schedulerRequest.getMessageBody());
97              }
98          }
99          else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
100             doCommandRetrieve(message, schedulerRequest);
101         }
102         else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
103             _schedulerEngine.shutdown();
104         }
105         else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
106             _schedulerEngine.start();
107         }
108         else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
109             _schedulerEngine.unschedule(
110                 schedulerRequest.getJobName(), schedulerRequest.getGroupName());
111         }
112     }
113 
114     protected void doCommandRetrieve(
115             Message message, SchedulerRequest schedulerRequest)
116         throws Exception {
117 
118         List<SchedulerRequest> schedulerRequests =
119             _schedulerEngine.getScheduledJobs(schedulerRequest.getGroupName());
120 
121         Message responseMessage = MessageBusUtil.createResponseMessage(
122             message, schedulerRequests);
123 
124         _messageSender.send(
125             responseMessage.getDestinationName(), responseMessage);
126     }
127 
128     private static Log _log = LogFactoryUtil.getLog(
129         SchedulerMessageListener.class);
130 
131     private MessageSender _messageSender;
132     private SchedulerEngine _schedulerEngine;
133 
134 }