1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
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.messaging.SchedulerRequest;
25  
26  import java.util.List;
27  
28  /**
29   * <a href="SchedulerMessageListener.java.html"><b><i>View Source</i></b></a>
30   *
31   * @author Michael C. Han
32   * @author Bruno Farache
33   * @author Shuyang Zhou
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              _schedulerEngine.schedule(
75                  schedulerRequest.getTrigger(),
76                  schedulerRequest.getDescription(),
77                  schedulerRequest.getDestination(),
78                  schedulerRequest.getMessage());
79          }
80          else if (command.equals(SchedulerRequest.COMMAND_RETRIEVE)) {
81              doCommandRetrieve(message, schedulerRequest);
82          }
83          else if (command.equals(SchedulerRequest.COMMAND_SHUTDOWN)) {
84              _schedulerEngine.shutdown();
85          }
86          else if (command.equals(SchedulerRequest.COMMAND_STARTUP)) {
87              _schedulerEngine.start();
88          }
89          else if (command.equals(SchedulerRequest.COMMAND_UNREGISTER)) {
90              _schedulerEngine.unschedule(schedulerRequest.getTrigger());
91          }
92      }
93  
94      protected void doCommandRetrieve(
95              Message message, SchedulerRequest schedulerRequest)
96          throws Exception {
97  
98          List<SchedulerRequest> schedulerRequests =
99              _schedulerEngine.getScheduledJobs(
100                 schedulerRequest.getTrigger().getGroupName());
101 
102         Message responseMessage = MessageBusUtil.createResponseMessage(
103             message, schedulerRequests);
104 
105         _messageSender.send(
106             responseMessage.getDestinationName(), responseMessage);
107     }
108 
109     private static Log _log = LogFactoryUtil.getLog(
110         SchedulerMessageListener.class);
111 
112     private MessageSender _messageSender;
113     private SchedulerEngine _schedulerEngine;
114 
115 }