/**
*Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*Unless required by applicable law or agreed to in writing,
*software distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
*either express or implied. See the License for the specific language governing permissions and limitations under the License
*/
/**
*Copyright [2009-2010] [dennis zhuang(killme2008@gmail.com)]
*Licensed under the Apache License, Version 2.0 (the "License");
*you may not use this file except in compliance with the License.
*You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*Unless required by applicable law or agreed to in writing,
*software distributed under the License is distributed on an "AS IS" BASIS,
*WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
*either express or implied. See the License for the specific language governing permissions and limitations under the License
*/
package net.rubyeye.xmemcached.command.binary;
/**
* Binary protocol response status.
*
* @author dennis
*
*/
public enum ResponseStatus {
NO_ERROR {
@Override
public short fieldValue() {
return 0x0000;
}
@Override
public String errorMessage() {
return "No error";
}
},
KEY_NOT_FOUND {
@Override
public short fieldValue() {
return 0x0001;
}
@Override
public String errorMessage() {
return "Key is not found.";
}
},
KEY_EXISTS {
@Override
public short fieldValue() {
return 0x0002;
}
@Override
public String errorMessage() {
return "Key is already existed.";
}
},
VALUE_TOO_BIG {
@Override
public short fieldValue() {
return 0x0003;
}
@Override
public String errorMessage() {
return "Value is too big.";
}
},
INVALID_ARGUMENTS {
@Override
public short fieldValue() {
return 0x0004;
}
@Override
public String errorMessage() {
return "Invalid arguments.";
}
},
ITEM_NOT_STORED {
@Override
public short fieldValue() {
return 0x0005;
}
@Override
public String errorMessage() {
return "Item is not stored.";
}
},
INC_DEC_NON_NUM {
@Override
public short fieldValue() {
return 0x0006;
}
@Override
public String errorMessage() {
return "Incr/Decr on non-numeric value.";
}
},
BELONGS_TO_ANOTHER_SRV {
@Override
public short fieldValue() {
return 0x0007;
}
@Override
public String errorMessage() {
return "The vbucket belongs to another server.";
}
},
AUTH_ERROR {
@Override
public short fieldValue() {
return 0x0008;
}
@Override
public String errorMessage() {
return "Authentication error .";
}
},
AUTH_CONTINUE {
@Override
public short fieldValue() {
return 0x0009;
}
@Override
public String errorMessage() {
return "Authentication continue .";
}
},
UNKNOWN_COMMAND {
@Override
public short fieldValue() {
return 0x0081;
}
@Override
public String errorMessage() {
return "Unknown command error.";
}
},
OUT_OF_MEMORY {
@Override
public short fieldValue() {
return 0x0082;
}
@Override
public String errorMessage() {
return "Out of memory .";
}
},
NOT_SUPPORTED {
@Override
public short fieldValue() {
return 0x0083;
}
@Override
public String errorMessage() {
return "Not supported .";
}
},
INTERNAL_ERROR {
@Override
public short fieldValue() {
return 0x0084;
}
@Override
public String errorMessage() {
return "Internal error .";
}
},
BUSY {
@Override
public short fieldValue() {
return 0x0085;
}
@Override
public String errorMessage() {
return "Busy.";
}
},
TEMP_FAILURE {
@Override
public short fieldValue() {
return 0x0086;
}
@Override
public String errorMessage() {
return "Temporary failure .";
}
},
AUTH_REQUIRED {
@Override
public short fieldValue() {
return 0x20;
}
@Override
public String errorMessage() {
return "Authentication required or not successful";
}
},
FUTHER_AUTH_REQUIRED {
@Override
public short fieldValue() {
return 0x21;
}
@Override
public String errorMessage() {
return "Further authentication steps required. ";
}
};
abstract short fieldValue();
/**
* Get status from short value
*
* @param value
* @return
*/
public static ResponseStatus parseShort(short value) {
switch (value) {
case 0x0000:
return NO_ERROR;
case 0x0001:
return KEY_NOT_FOUND;
case 0x0002:
return KEY_EXISTS;
case 0x0003:
return VALUE_TOO_BIG;
case 0x0004:
return INVALID_ARGUMENTS;
case 0x0005:
return ITEM_NOT_STORED;
case 0x0006:
return INC_DEC_NON_NUM;
case 0x0007:
return BELONGS_TO_ANOTHER_SRV;
case 0x0008:
return AUTH_ERROR;
case 0x0009:
return AUTH_CONTINUE;
case 0x0081:
return UNKNOWN_COMMAND;
case 0x0082:
return OUT_OF_MEMORY;
case 0x0083:
return NOT_SUPPORTED;
case 0x0084:
return INTERNAL_ERROR;
case 0x0085:
return BUSY;
case 0x0086:
return TEMP_FAILURE;
case 0x20:
return AUTH_REQUIRED;
case 0x21:
return FUTHER_AUTH_REQUIRED;
default:
throw new IllegalArgumentException("Unknow Response status:"
+ value);
}
}
/**
* The status error message
*
* @return
*/
abstract String errorMessage();
}