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.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  }