View Javadoc

1   /**
2    *Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
3    *Licensed under the Apache License, Version 2.0 (the "License");
4    *you may not use this file except in compliance with the License. 
5    *You may obtain a copy of the License at 
6    *             http://www.apache.org/licenses/LICENSE-2.0 
7    *Unless required by applicable law or agreed to in writing, 
8    *software distributed under the License is distributed on an "AS IS" BASIS, 
9    *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
10   *either express or implied. See the License for the specific language governing permissions and limitations under the License
11   */
12  /**
13   *Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
14   *Licensed under the Apache License, Version 2.0 (the "License");
15   *you may not use this file except in compliance with the License.
16   *You may obtain a copy of the License at
17   *             http://www.apache.org/licenses/LICENSE-2.0
18   *Unless required by applicable law or agreed to in writing,
19   *software distributed under the License is distributed on an "AS IS" BASIS,
20   *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
21   *either express or implied. See the License for the specific language governing permissions and limitations under the License
22   */
23  package net.rubyeye.xmemcached.command.binary;
24  
25  /**
26   * Binary protocol response status.
27   * 
28   * @author dennis
29   * 
30   */
31  public enum ResponseStatus {
32  
33  	NO_ERROR {
34  		@Override
35  		public short fieldValue() {
36  			return 0x0000;
37  		}
38  
39  		@Override
40  		public String errorMessage() {
41  			return "No error";
42  		}
43  	},
44  	KEY_NOT_FOUND {
45  		@Override
46  		public short fieldValue() {
47  			return 0x0001;
48  		}
49  
50  		@Override
51  		public String errorMessage() {
52  			return "Key is not found.";
53  		}
54  	},
55  	KEY_EXISTS {
56  		@Override
57  		public short fieldValue() {
58  			return 0x0002;
59  		}
60  
61  		@Override
62  		public String errorMessage() {
63  			return "Key is already existed.";
64  		}
65  	},
66  	VALUE_TOO_BIG {
67  		@Override
68  		public short fieldValue() {
69  			return 0x0003;
70  		}
71  
72  		@Override
73  		public String errorMessage() {
74  			return "Value is too big.";
75  		}
76  	},
77  	INVALID_ARGUMENTS {
78  		@Override
79  		public short fieldValue() {
80  			return 0x0004;
81  		}
82  
83  		@Override
84  		public String errorMessage() {
85  			return "Invalid arguments.";
86  		}
87  	},
88  	ITEM_NOT_STORED {
89  		@Override
90  		public short fieldValue() {
91  			return 0x0005;
92  		}
93  
94  		@Override
95  		public String errorMessage() {
96  			return "Item is not stored.";
97  		}
98  	},
99  	INC_DEC_NON_NUM {
100 		@Override
101 		public short fieldValue() {
102 			return 0x0006;
103 		}
104 
105 		@Override
106 		public String errorMessage() {
107 			return "Incr/Decr on non-numeric value.";
108 		}
109 	},
110 	BELONGS_TO_ANOTHER_SRV {
111 		@Override
112 		public short fieldValue() {
113 			return 0x0007;
114 		}
115 
116 		@Override
117 		public String errorMessage() {
118 			return "The vbucket belongs to another server.";
119 		}
120 	},
121 	AUTH_ERROR {
122 		@Override
123 		public short fieldValue() {
124 			return 0x0008;
125 		}
126 
127 		@Override
128 		public String errorMessage() {
129 			return "Authentication error .";
130 		}
131 	},
132 	AUTH_CONTINUE {
133 		@Override
134 		public short fieldValue() {
135 			return 0x0009;
136 		}
137 
138 		@Override
139 		public String errorMessage() {
140 			return "Authentication continue .";
141 		}
142 	},
143 	UNKNOWN_COMMAND {
144 		@Override
145 		public short fieldValue() {
146 			return 0x0081;
147 		}
148 
149 		@Override
150 		public String errorMessage() {
151 			return "Unknown command error.";
152 		}
153 	},
154 	OUT_OF_MEMORY {
155 		@Override
156 		public short fieldValue() {
157 			return 0x0082;
158 		}
159 
160 		@Override
161 		public String errorMessage() {
162 			return "Out of memory .";
163 		}
164 	},
165 	NOT_SUPPORTED {
166 		@Override
167 		public short fieldValue() {
168 			return 0x0083;
169 		}
170 
171 		@Override
172 		public String errorMessage() {
173 			return "Not supported .";
174 		}
175 	},
176 	INTERNAL_ERROR {
177 		@Override
178 		public short fieldValue() {
179 			return 0x0084;
180 		}
181 
182 		@Override
183 		public String errorMessage() {
184 			return "Internal error .";
185 		}
186 	},
187 	BUSY {
188 		@Override
189 		public short fieldValue() {
190 			return 0x0085;
191 		}
192 
193 		@Override
194 		public String errorMessage() {
195 			return "Busy.";
196 		}
197 	},
198 
199 	TEMP_FAILURE {
200 		@Override
201 		public short fieldValue() {
202 			return 0x0086;
203 		}
204 
205 		@Override
206 		public String errorMessage() {
207 			return "Temporary failure .";
208 		}
209 	},
210 
211 	AUTH_REQUIRED {
212 		@Override
213 		public short fieldValue() {
214 			return 0x20;
215 		}
216 
217 		@Override
218 		public String errorMessage() {
219 			return "Authentication required or not successful";
220 		}
221 	},
222 	FUTHER_AUTH_REQUIRED {
223 		@Override
224 		public short fieldValue() {
225 			return 0x21;
226 		}
227 
228 		@Override
229 		public String errorMessage() {
230 			return "Further authentication steps required. ";
231 		}
232 	};
233 	abstract short fieldValue();
234 
235 	/**
236 	 * Get status from short value
237 	 * 
238 	 * @param value
239 	 * @return
240 	 */
241 	public static ResponseStatus parseShort(short value) {
242 		switch (value) {
243 		case 0x0000:
244 			return NO_ERROR;
245 		case 0x0001:
246 			return KEY_NOT_FOUND;
247 		case 0x0002:
248 			return KEY_EXISTS;
249 		case 0x0003:
250 			return VALUE_TOO_BIG;
251 		case 0x0004:
252 			return INVALID_ARGUMENTS;
253 		case 0x0005:
254 			return ITEM_NOT_STORED;
255 		case 0x0006:
256 			return INC_DEC_NON_NUM;
257 		case 0x0007:
258 			return BELONGS_TO_ANOTHER_SRV;
259 		case 0x0008:
260 			return AUTH_ERROR;
261 		case 0x0009:
262 			return AUTH_CONTINUE;
263 		case 0x0081:
264 			return UNKNOWN_COMMAND;
265 		case 0x0082:
266 			return OUT_OF_MEMORY;
267 		case 0x0083:
268 			return NOT_SUPPORTED;
269 		case 0x0084:
270 			return INTERNAL_ERROR;
271 		case 0x0085:
272 			return BUSY;
273 		case 0x0086:
274 			return TEMP_FAILURE;
275 		case 0x20:
276 			return AUTH_REQUIRED;
277 		case 0x21:
278 			return FUTHER_AUTH_REQUIRED;
279 		default:
280 			throw new IllegalArgumentException("Unknow Response status:"
281 					+ value);
282 		}
283 	}
284 
285 	/**
286 	 * The status error message
287 	 * 
288 	 * @return
289 	 */
290 	abstract String errorMessage();
291 }