1 package org.apache.commons.jcs3.auxiliary.lateral;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import java.io.Serializable;
23
24 import org.apache.commons.jcs3.engine.behavior.ICacheElement;
25
26 /**
27 * This class wraps command to other laterals. It is essentially a
28 * JCS-TCP-Lateral packet. The headers specify the action the receiver should
29 * take.
30 */
31 public class LateralElementDescriptor<K, V>
32 implements Serializable
33 {
34 /** Don't change */
35 private static final long serialVersionUID = 5268222498076063575L;
36
37 /** The Cache Element that we are distributing. */
38 public ICacheElement<K, V> ce;
39
40 /**
41 * The id of the source of the request. This is used to prevent infinite
42 * loops.
43 */
44 public long requesterId;
45
46 /** The operation has been requested by the client. */
47 public LateralCommand command = LateralCommand.UPDATE;
48
49 /**
50 * The hash code value for this element.
51 */
52 public int valHashCode = -1;
53
54 /** Constructor for the LateralElementDescriptor object
55 * @deprecated
56 */
57 @Deprecated // Not used
58 public LateralElementDescriptor()
59 {
60 }
61
62 /**
63 * Constructor for the LateralElementDescriptor object
64 * <p>
65 * @param ce ICacheElement<K, V> payload
66 */
67 public LateralElementDescriptor( final ICacheElement<K, V> ce )
68 {
69 this.ce = ce;
70 }
71
72 /**
73 * Constructor for the LateralElementDescriptor object
74 * <p>
75 * @param ce ICacheElement<K, V> payload
76 * @param command operation requested by the client
77 * @since 3.1
78 */
79 public LateralElementDescriptor( final ICacheElement<K, V> ce, LateralCommand command)
80 {
81 this(ce);
82 this.command = command;
83 }
84
85 /**
86 * Constructor for the LateralElementDescriptor object
87 * <p>
88 * @param ce ICacheElement<K, V> payload
89 * @param command operation requested by the client
90 * @param requesterId id of the source of the request
91 * @since 3.1
92 */
93 public LateralElementDescriptor( final ICacheElement<K, V> ce, LateralCommand command, long requesterId)
94 {
95 this(ce, command);
96 this.requesterId = requesterId;
97 }
98
99 /**
100 * Return payload
101 *
102 * @return the ce
103 * @since 3.1
104 */
105 public ICacheElement<K, V> getPayload()
106 {
107 return ce;
108 }
109
110 /**
111 * Return id of the source of the request
112 *
113 * @return the requesterId
114 * @since 3.1
115 */
116 public long getRequesterId()
117 {
118 return requesterId;
119 }
120
121 /**
122 * Return operation requested by the client
123 *
124 * @return the command
125 * @since 3.1
126 */
127 public LateralCommand getCommand()
128 {
129 return command;
130 }
131
132 /**
133 * @return the valHashCode
134 * @since 3.1
135 */
136 public int getValHashCode()
137 {
138 return valHashCode;
139 }
140
141 /**
142 * @return String, all the important values that can be configured
143 */
144 @Override
145 public String toString()
146 {
147 final StringBuilder buf = new StringBuilder();
148 buf.append( "\n LateralElementDescriptor " );
149 buf.append( "\n command = [" + this.command + "]" );
150 buf.append( "\n valHashCode = [" + this.valHashCode + "]" );
151 buf.append( "\n ICacheElement = [" + this.ce + "]" );
152 return buf.toString();
153 }
154 }