1
22
23 package com.liferay.portal.kernel.bi.rules.proxy;
24
25 import com.liferay.portal.kernel.bi.rules.AdminRequestMessage;
26 import com.liferay.portal.kernel.bi.rules.AdminRequestType;
27 import com.liferay.portal.kernel.bi.rules.ExecutionRequestMessage;
28 import com.liferay.portal.kernel.bi.rules.Query;
29 import com.liferay.portal.kernel.bi.rules.RulesEngine;
30 import com.liferay.portal.kernel.bi.rules.RulesEngineException;
31 import com.liferay.portal.kernel.messaging.MessageBusException;
32 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
33 import com.liferay.portal.kernel.messaging.sender.SingleDestinationSynchronousMessageSender;
34 import com.liferay.portal.kernel.resource.ResourceRetriever;
35
36 import java.util.List;
37
38
43 public class RulesEngineProxy implements RulesEngine {
44
45 public RulesEngineProxy(
46 SingleDestinationMessageSender ruleEngineAdminMessageSender,
47 SingleDestinationMessageSender asyncExecutionSender,
48 SingleDestinationSynchronousMessageSender ruleEngineExecutionSender) {
49
50 _adminRequestMessageSender = ruleEngineAdminMessageSender;
51 _executionRequestMessageSender = asyncExecutionSender;
52 _synchronousExecutionRequestMessageSender = ruleEngineExecutionSender;
53 }
54
55 public void add(String domainName, ResourceRetriever resourceRetriever) {
56 _sendAdminMessage(AdminRequestType.ADD, domainName, resourceRetriever);
57 }
58
59 public void execute(ResourceRetriever resourceRetriever, List<?> facts) {
60 ExecutionRequestMessage executionRequestMessage =
61 new ExecutionRequestMessage(resourceRetriever);
62
63 executionRequestMessage.addFact(facts);
64
65 _executionRequestMessageSender.send(executionRequestMessage);
66 }
67
68 public List<?> execute(
69 ResourceRetriever resourceRetriever, List<?> facts, Query query)
70 throws RulesEngineException {
71
72 ExecutionRequestMessage executionRequestMessage =
73 new ExecutionRequestMessage(resourceRetriever);
74
75 return _sendExecutionMessage(executionRequestMessage, facts, query);
76 }
77
78 public void execute(String domainName, List<?> facts) {
79 ExecutionRequestMessage executionRequestMessage =
80 new ExecutionRequestMessage(domainName);
81
82 executionRequestMessage.addFact(facts);
83
84 _executionRequestMessageSender.send(executionRequestMessage);
85 }
86
87 public List<?> execute(String domainName, List<?> facts, Query query)
88 throws RulesEngineException {
89
90 ExecutionRequestMessage executionRequestMessage =
91 new ExecutionRequestMessage(domainName);
92
93 return _sendExecutionMessage(executionRequestMessage, facts, query);
94 }
95
96 public void remove(String domainName) {
97 _sendAdminMessage(AdminRequestType.REMOVE, domainName, null);
98 }
99
100 public void update(String domainName, ResourceRetriever resourceRetriever) {
101 _sendAdminMessage(
102 AdminRequestType.UPDATE, domainName, resourceRetriever);
103 }
104
105 private void _sendAdminMessage(
106 AdminRequestType adminRequestType, String domainName,
107 ResourceRetriever resourceRetriever) {
108
109 AdminRequestMessage adminRequestMessage = null;
110
111 if (AdminRequestType.ADD.equals(adminRequestType)) {
112 adminRequestMessage = AdminRequestMessage.add(
113 domainName, resourceRetriever);
114 }
115 else if (AdminRequestType.REMOVE.equals(adminRequestType)) {
116 adminRequestMessage = AdminRequestMessage.remove(domainName);
117 }
118 else if (AdminRequestType.UPDATE.equals(adminRequestType)) {
119 adminRequestMessage = AdminRequestMessage.update(
120 domainName, resourceRetriever);
121 }
122
123 _adminRequestMessageSender.send(adminRequestMessage);
124 }
125
126 private List<?> _sendExecutionMessage(
127 ExecutionRequestMessage executionRequestMessage,
128 List<?> facts, Query query)
129 throws RulesEngineException {
130
131 executionRequestMessage.addFact(facts);
132 executionRequestMessage.setQuery(query);
133
134 try {
135 return (List<?>)_synchronousExecutionRequestMessageSender.send(
136 executionRequestMessage);
137 }
138 catch (MessageBusException mbe) {
139 throw new RulesEngineException("Unable to execute rules", mbe);
140 }
141 }
142
143 private SingleDestinationMessageSender _adminRequestMessageSender;
144 private SingleDestinationMessageSender _executionRequestMessageSender;
145 private SingleDestinationSynchronousMessageSender
146 _synchronousExecutionRequestMessageSender;
147
148 }