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