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.kernel.bi.reporting.messaging;
16  
17  import com.liferay.portal.kernel.bi.reporting.ReportDesignRetriever;
18  import com.liferay.portal.kernel.bi.reporting.ReportEngine;
19  import com.liferay.portal.kernel.bi.reporting.ReportGenerationException;
20  import com.liferay.portal.kernel.bi.reporting.ReportRequest;
21  import com.liferay.portal.kernel.bi.reporting.ReportResultContainer;
22  import com.liferay.portal.kernel.log.Log;
23  import com.liferay.portal.kernel.log.LogFactoryUtil;
24  import com.liferay.portal.kernel.messaging.Message;
25  import com.liferay.portal.kernel.messaging.MessageBusUtil;
26  import com.liferay.portal.kernel.messaging.MessageListener;
27  
28  /**
29   * <a href="ReportRequestMessageListener.java.html"><b><i>View Source</i></b>
30   * </a>
31   *
32   * @author Michael C. Han
33   */
34  public class ReportRequestMessageListener implements MessageListener {
35  
36      public ReportRequestMessageListener(
37          ReportEngine reportEngine,
38          ReportResultContainer reportResultContainer) {
39  
40          _reportEngine = reportEngine;
41          _reportResultContainer = reportResultContainer;
42      }
43  
44      public void receive(Message message) {
45          ReportRequest reportRequest = (ReportRequest)message.getPayload();
46  
47          ReportDesignRetriever reportDesignRetriever =
48              reportRequest.getReportDesignRetriever();
49  
50          ReportResultContainer reportResultContainer =
51              _reportResultContainer.clone(reportDesignRetriever.getReportName());
52  
53          try {
54              _reportEngine.execute(reportRequest, reportResultContainer);
55          }
56          catch (ReportGenerationException rge) {
57              _log.error("Unable to generate report", rge);
58  
59              reportResultContainer.setReportGenerationException(rge);
60          }
61          finally {
62              Message responseMessage = MessageBusUtil.createResponseMessage(
63                  message);
64  
65              responseMessage.setPayload(reportResultContainer);
66  
67              MessageBusUtil.sendMessage(
68                  responseMessage.getDestinationName(), responseMessage);
69          }
70      }
71  
72      private static Log _log = LogFactoryUtil.getLog(
73          ReportRequestMessageListener.class);
74  
75      private ReportEngine _reportEngine;
76      private ReportResultContainer _reportResultContainer;
77  
78  }