001    /**
002     * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
003     *
004     * The contents of this file are subject to the terms of the Liferay Enterprise
005     * Subscription License ("License"). You may not use this file except in
006     * compliance with the License. You can obtain a copy of the License by
007     * contacting Liferay, Inc. See the License for the specific language governing
008     * permissions and limitations under the License, including but not limited to
009     * distribution rights of the Software.
010     *
011     *
012     *
013     */
014    
015    package com.liferay.portal.kernel.cluster;
016    
017    import com.liferay.portal.kernel.util.MethodHandler;
018    import com.liferay.portal.kernel.util.StringBundler;
019    import com.liferay.portal.kernel.uuid.PortalUUIDUtil;
020    
021    import java.io.Serializable;
022    
023    import java.util.Collection;
024    import java.util.HashSet;
025    import java.util.Set;
026    
027    /**
028     * @author Tina Tian
029     */
030    public class ClusterRequest implements Serializable {
031    
032            public static ClusterRequest createClusterNotifyRequest(
033                    ClusterNode originatingClusterNode) {
034    
035                    ClusterRequest clusterRequest = new ClusterRequest();
036    
037                    clusterRequest.setClusterMessageType(ClusterMessageType.NOTIFY);
038                    clusterRequest.setMulticast(true);
039                    clusterRequest.setOriginatingClusterNode(originatingClusterNode);
040                    clusterRequest.setSkipLocal(true);
041                    clusterRequest.setUuid(PortalUUIDUtil.generate());
042    
043                    return clusterRequest;
044            }
045    
046            public static ClusterRequest createMulticastRequest(
047                    MethodHandler methodHandler) {
048    
049                    return createMulticastRequest(methodHandler, false);
050            }
051    
052            public static ClusterRequest createMulticastRequest(
053                    MethodHandler methodHandler, boolean skipLocal) {
054    
055                    ClusterRequest clusterRequest = new ClusterRequest();
056    
057                    clusterRequest.setClusterMessageType(ClusterMessageType.EXECUTE);
058                    clusterRequest.setMethodHandler(methodHandler);
059                    clusterRequest.setMulticast(true);
060                    clusterRequest.setSkipLocal(skipLocal);
061                    clusterRequest.setUuid(PortalUUIDUtil.generate());
062    
063                    return clusterRequest;
064            }
065    
066            public static ClusterRequest createUnicastRequest(
067                    MethodHandler methodHandler, Address... targetClusterNodeAddresses) {
068    
069                    ClusterRequest clusterRequest = new ClusterRequest();
070    
071                    clusterRequest.addTargetClusterNodeAddresses(
072                            targetClusterNodeAddresses);
073                    clusterRequest.setClusterMessageType(ClusterMessageType.EXECUTE);
074                    clusterRequest.setMethodHandler(methodHandler);
075                    clusterRequest.setMulticast(false);
076                    clusterRequest.setSkipLocal(false);
077                    clusterRequest.setUuid(PortalUUIDUtil.generate());
078    
079                    return clusterRequest;
080            }
081    
082            public static ClusterRequest createUnicastRequest(
083                    MethodHandler methodHandler, String... targetClusterNodeIds) {
084    
085                    ClusterRequest clusterRequest = new ClusterRequest();
086    
087                    clusterRequest.addTargetClusterNodeIds(targetClusterNodeIds);
088                    clusterRequest.setClusterMessageType(ClusterMessageType.EXECUTE);
089                    clusterRequest.setMethodHandler(methodHandler);
090                    clusterRequest.setMulticast(false);
091                    clusterRequest.setSkipLocal(false);
092                    clusterRequest.setUuid(PortalUUIDUtil.generate());
093    
094                    return clusterRequest;
095            }
096    
097            public void addTargetClusterNodeAddresses(
098                    Address... targetClusterNodeAddresses) {
099    
100                    if (_targetClusterNodeAddresses == null) {
101                            _targetClusterNodeAddresses = new HashSet<Address>(
102                                    targetClusterNodeAddresses.length);
103                    }
104    
105                    for (Address targetClusterNodeAddress : targetClusterNodeAddresses) {
106                            _targetClusterNodeAddresses.add(targetClusterNodeAddress);
107                    }
108            }
109    
110            public void addTargetClusterNodeIds(String... targetClusterNodeIds) {
111                    if (_targetClusterNodeIds == null) {
112                            _targetClusterNodeIds = new HashSet<String>(
113                                    targetClusterNodeIds.length);
114                    }
115    
116                    for (String targetClusterNodeId : targetClusterNodeIds) {
117                            _targetClusterNodeIds.add(targetClusterNodeId);
118                    }
119            }
120    
121            public String getBeanIdentifier() {
122                    return _beanIdentifier;
123            }
124    
125            public ClusterMessageType getClusterMessageType() {
126                    return _clusterMessageType;
127            }
128    
129            public MethodHandler getMethodHandler() {
130                    return _methodHandler;
131            }
132    
133            public ClusterNode getOriginatingClusterNode() {
134                    return _originatingClusterNode;
135            }
136    
137            public String getServletContextName() {
138                    return _servletContextName;
139            }
140    
141            public Collection<Address> getTargetClusterNodeAddresses() {
142                    return _targetClusterNodeAddresses;
143            }
144    
145            public Collection<String> getTargetClusterNodeIds() {
146                    return _targetClusterNodeIds;
147            }
148    
149            public String getUuid() {
150                    return _uuid;
151            }
152    
153            public boolean isFireAndForget() {
154                    return _fireAndForget;
155            }
156    
157            public boolean isMulticast() {
158                    return _multicast;
159            }
160    
161            public boolean isSkipLocal() {
162                    return _skipLocal;
163            }
164    
165            public void setBeanIdentifier(String beanIdentifier) {
166                    _beanIdentifier = beanIdentifier;
167            }
168    
169            public void setClusterMessageType(ClusterMessageType clusterMessageType) {
170                    _clusterMessageType = clusterMessageType;
171            }
172    
173            public void setFireAndForget(boolean fireAndForget) {
174                    _fireAndForget = fireAndForget;
175            }
176    
177            public void setMethodHandler(MethodHandler methodHandler) {
178                    _methodHandler = methodHandler;
179            }
180    
181            public void setMulticast(boolean multicast) {
182                    _multicast = multicast;
183            }
184    
185            public void setOriginatingClusterNode(ClusterNode originatingClusterNode) {
186                    _originatingClusterNode = originatingClusterNode;
187            }
188    
189            public void setServletContextName(String servletContextName) {
190                    _servletContextName = servletContextName;
191            }
192    
193            public void setSkipLocal(boolean skipLocal) {
194                    _skipLocal = skipLocal;
195            }
196    
197            public void setUuid(String uuid) {
198                    _uuid = uuid;
199            }
200    
201            @Override
202            public String toString() {
203                    StringBundler sb = new StringBundler(15);
204    
205                    sb.append("{clusterMessageType=");
206                    sb.append(_clusterMessageType);
207                    sb.append(", methodHandler=");
208                    sb.append(_methodHandler);
209                    sb.append(", multicast=");
210                    sb.append(_multicast);
211    
212                    if (_clusterMessageType.equals(ClusterMessageType.NOTIFY)) {
213                            sb.append(", originatingClusterNode=");
214                            sb.append(_originatingClusterNode);
215                    }
216    
217                    sb.append(", servletContextName=");
218                    sb.append(_servletContextName);
219                    sb.append(", skipLocal=");
220                    sb.append(_skipLocal);
221                    sb.append(", uuid=");
222                    sb.append(_uuid);
223                    sb.append("}");
224    
225                    return sb.toString();
226            }
227    
228            private ClusterRequest() {
229            }
230    
231            private String _beanIdentifier;
232            private ClusterMessageType _clusterMessageType;
233            private boolean _fireAndForget;
234            private MethodHandler _methodHandler;
235            private boolean _multicast;
236            private ClusterNode _originatingClusterNode;
237            private String _servletContextName;
238            private boolean _skipLocal;
239            private Set<Address> _targetClusterNodeAddresses;
240            private Set<String> _targetClusterNodeIds;
241            private String _uuid;
242    
243    }