INVALID_TOKEN, PARSE_ERROR,
// general exception
- INHERITED, ;
+ INHERITED, HAS_AN_EXTENDED_ERROR_CODE;
private final String description;
return null;
}
- public Enum< ? > getCode() {
- return this;
- }
-
}
*
*/
public class XerialException extends Exception {
+
private static final long serialVersionUID = 1L;
private final ErrorCode errorCode;
public XerialException(XerialException e) {
super(e.getErrorMessage());
this.errorCode = e.errorCode;
-
}
public XerialException(ErrorCode errorCode) {
this.errorCode = errorCode;
}
- /**
- * Get the error code of this exception
- *
- * @return
- */
public ErrorCode getErrorCode() {
return errorCode;
}
+ private boolean hasXerialErrorCode() {
+ return XerialErrorCode.class.isInstance(errorCode);
+ }
+
+ public XerialErrorCode getXerialErrorCode() {
+ if (hasXerialErrorCode())
+ return XerialErrorCode.class.cast(errorCode);
+ else
+ return XerialErrorCode.HAS_AN_EXTENDED_ERROR_CODE;
+ }
+
+ public <T extends Enum<T>> T getErrorCodeOfTheType(Class<T> errorCodeType) {
+ return errorCodeType.cast(errorCode);
+ }
+
@Override
public String getMessage() {
return ExceptionHelper.getMessage(errorCode, super.getMessage());
return description;
}
- public Enum< ? > getCode() {
- return this;
- }
-
}
* @author leo\r
* \r
*/\r
-public class JSONException extends XerialException\r
-{\r
+public class JSONException extends XerialException {\r
private static final long serialVersionUID = 1L;\r
\r
/**\r
* @param errorCode\r
*/\r
- public JSONException(JSONErrorCode errorCode)\r
- {\r
+ public JSONException(JSONErrorCode errorCode) {\r
super(errorCode);\r
}\r
\r
- public JSONException(JSONErrorCode errorCode, String message)\r
- {\r
+ public JSONException(JSONErrorCode errorCode, String message) {\r
super(errorCode, message);\r
}\r
\r
* @param message\r
* @param e\r
*/\r
- public JSONException(JSONErrorCode errorCode, String message, Throwable e)\r
- {\r
+ public JSONException(JSONErrorCode errorCode, String message, Throwable e) {\r
super(errorCode, message, e);\r
}\r
\r
* @param errorCode\r
* @param e\r
*/\r
- public JSONException(JSONErrorCode errorCode, Throwable e)\r
- {\r
+ public JSONException(JSONErrorCode errorCode, Throwable e) {\r
super(errorCode);\r
}\r
\r
* \r
* @return the error code\r
*/\r
- public JSONErrorCode getErrorCode()\r
- {\r
+ public JSONErrorCode getErrorCode() {\r
return (JSONErrorCode) super.getErrorCode();\r
}\r
}\r
return description;
}
- public Enum< ? > getCode() {
- return this;
- }
-
}
import java.lang.reflect.Field;\r
import java.lang.reflect.Method;\r
\r
+import org.xerial.core.XerialException;\r
import org.xerial.util.Range;\r
import org.xerial.util.bean.TypeInfo;\r
\r
* @author leo\r
* \r
*/\r
-public class ArgumentItem\r
-{\r
- private final Argument argumentDescriptor;\r
+public class ArgumentItem {\r
+ private final Argument argumentDescriptor;\r
private final OptionSetter argumentSetter;\r
\r
- public ArgumentItem(Method setter)\r
- {\r
+ public ArgumentItem(Method setter) {\r
argumentDescriptor = setter.getAnnotation(Argument.class);\r
if (argumentDescriptor == null)\r
throw new IllegalArgumentException(setter + " is not for an option argument");\r
argumentSetter = new OptionSetterViaMethod(setter);\r
}\r
\r
- public ArgumentItem(Field field)\r
- {\r
+ public ArgumentItem(Field field) {\r
argumentDescriptor = field.getAnnotation(Argument.class);\r
if (argumentDescriptor == null)\r
throw new IllegalArgumentException(field + " is not for an option argument");\r
}\r
\r
@Override\r
- public boolean equals(Object obj)\r
- {\r
- if (obj instanceof ArgumentItem)\r
- {\r
+ public boolean equals(Object obj) {\r
+ if (obj instanceof ArgumentItem) {\r
ArgumentItem other = (ArgumentItem) obj;\r
return argumentDescriptor.equals(other.argumentDescriptor);\r
}\r
}\r
\r
@Override\r
- public int hashCode()\r
- {\r
+ public int hashCode() {\r
return argumentDescriptor.hashCode();\r
}\r
\r
- public boolean takesMultipleArguments()\r
- {\r
+ public boolean takesMultipleArguments() {\r
return TypeInfo.isCollection(argumentSetter.getOptionDataType());\r
}\r
\r
- public static Range getRangeOf(ArgumentItem arg)\r
- {\r
+ public static Range getRangeOf(ArgumentItem arg) {\r
int start = arg.getArgumentDescriptor().index();\r
int end = arg.takesMultipleArguments() ? Integer.MAX_VALUE : start;\r
return new Range(start, end);\r
}\r
\r
- public Range getRange()\r
- {\r
+ public Range getRange() {\r
return getRangeOf(this);\r
}\r
\r
- public void set(Object bean, Object value) throws OptionParserException\r
- {\r
+ public void set(Object bean, Object value) throws XerialException {\r
argumentSetter.setOption(bean, value);\r
}\r
\r
- public Argument getArgumentDescriptor()\r
- {\r
+ public Argument getArgumentDescriptor() {\r
return argumentDescriptor;\r
}\r
\r
- public void initialize(Object optionHolder) throws OptionParserException\r
- {\r
+ public void initialize(Object optionHolder) throws OptionParserException {\r
argumentSetter.initialize(optionHolder);\r
}\r
\r
@Override\r
- public String toString()\r
- {\r
- return String.format("name=%s, index=%s, required=%s", argumentDescriptor.name(), getRange().toString(),\r
- argumentDescriptor.required());\r
+ public String toString() {\r
+ return String.format("name=%s, index=%s, required=%s", argumentDescriptor.name(),\r
+ getRange().toString(), argumentDescriptor.required());\r
}\r
\r
- public String getArgumentName()\r
- {\r
+ public String getArgumentName() {\r
String name = argumentDescriptor.name();\r
if (name == null || name.length() <= 0)\r
name = argumentSetter.getParameterName();\r
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import org.xerial.core.XerialException;
import org.xerial.util.bean.TypeInfo;
/**
return TypeInfo.isCollection(optionSetter.getOptionDataType());
}
- public void setOption(Object bean, String value) throws OptionParserException {
+ public void setOption(Object bean, String value) throws XerialException {
optionSetter.setOption(bean, value);
- // Class< ? > optionType = optionSetter.getOptionDataType();
- // try
- // {
- // Object convertedValue = TypeConverter.convertType(optionType, value);
- // optionSetter.setOption(bean, convertedValue);
- // }
- // catch (BeanException e)
- // {
- // throw new OptionParserException(ShellError.WRONG_DATA_TYPE, e);
- // }
-
}
public void initialize(Object optionHolder) throws OptionParserException {
import org.xerial.core.XerialError;
import org.xerial.core.XerialErrorCode;
+import org.xerial.core.XerialException;
import org.xerial.util.bean.BeanErrorCode;
import org.xerial.util.bean.BeanException;
import org.xerial.util.bean.TypeInfo;
throw new OptionParserException(XerialErrorCode.SYNTAX_ERROR,
"parameter value is required for --" + longOptionName);
- optionItem.setOption(optionHolder, "true");
+ setOption(optionItem, "true");
if (!optionItem.takesMultipleArguments()
&& activatedOption.contains(optionItem.getOption()))
"syntax error --" + longOptionName);
}
- optionItem.setOption(optionHolder, value);
+ setOption(optionItem, value);
if (!optionItem.takesMultipleArguments()
&& activatedOption.contains(optionItem.getOption()))
throw new OptionParserException(XerialErrorCode.DUPLICATE_OPTION,
"unused argument: " + currentArg);
}
- argItem.set(optionHolder, currentArg);
+ try {
+ argItem.set(optionHolder, currentArg);
+ }
+ catch (XerialException e) {
+ throw new OptionParserException(XerialErrorCode.INVALID_ARGUMENT, e
+ .getMessage());
+ }
+
if (!argItem.takesMultipleArguments()
&& activatedArgument.contains(argItem.getArgumentDescriptor()))
throw new OptionParserException(XerialErrorCode.DUPLICATE_OPTION, argItem
try {
item.setOption(optionHolder, value);
}
- catch (OptionParserException e) {
+ catch (XerialException e) {
if (BeanErrorCode.class.isInstance(e.getErrorCode())) {
BeanErrorCode be = BeanErrorCode.class.cast(e.getErrorCode());
switch (be) {
case InvalidFormat:
throw new OptionParserException(XerialErrorCode.INVALID_ARGUMENT, String
.format("cannot set %s to %s", value, item.toString()));
+ default:
+ throw new OptionParserException(e.getErrorCode(), e.getMessage());
}
-
}
-
- throw e;
+ else
+ throw new OptionParserException(e.getErrorCode(), e.getMessage());
}
}
*/
private static final long serialVersionUID = 1L;
+ public OptionParserException(XerialException e) {
+ super(e);
+ }
+
public OptionParserException(ErrorCode errorCode, String message, Throwable cause) {
super(errorCode, message, cause);
}
//--------------------------------------
package org.xerial.util.opt;
+import org.xerial.core.XerialException;
+
/**
* @author leo
*
*/
-public interface OptionSetter
-{
- void setOption(Object bean, Object convertedValue) throws OptionParserException;
+public interface OptionSetter {
+ void setOption(Object bean, Object convertedValue) throws XerialException;
Class< ? > getOptionDataType();
* @author leo
*
*/
-public class OptionSetterViaField implements OptionSetter
-{
+public class OptionSetterViaField implements OptionSetter {
private final Field field;
- public OptionSetterViaField(Field field)
- {
+ public OptionSetterViaField(Field field) {
this.field = field;
}
- public Class< ? > getOptionDataType()
- {
+ public Class< ? > getOptionDataType() {
return field.getType();
}
- public void setOption(Object bean, Object value) throws OptionParserException
- {
- try
- {
- ReflectionUtil.setFieldValue(bean, field, value);
- }
- catch (XerialException e)
- {
- throw new OptionParserException(e.getErrorCode(), e.getMessage());
- }
-
+ public void setOption(Object bean, Object value) throws XerialException {
+ ReflectionUtil.setFieldValue(bean, field, value);
}
- public boolean takesArgument()
- {
+ public boolean takesArgument() {
Class< ? > type = getOptionDataType();
return !TypeInfo.isBoolean(type);
}
- public void initialize(Object bean) throws OptionParserException
- {
- try
- {
+ public void initialize(Object bean) throws OptionParserException {
+ try {
ReflectionUtil.initializeCollectionField(bean, field);
}
- catch (XerialException e)
- {
- throw new OptionParserException(e.getErrorCode(), e.getMessage());
+ catch (XerialException e) {
+ throw new OptionParserException(e);
}
}
- public String getParameterName()
- {
+ public String getParameterName() {
return field.getName();
}
import java.lang.reflect.ParameterizedType;\r
import java.lang.reflect.Type;\r
\r
+import org.xerial.core.XerialException;\r
import org.xerial.util.bean.TypeInfo;\r
import org.xerial.util.reflect.ReflectionUtil;\r
\r
* @author leo\r
* \r
*/\r
-class OptionSetterViaMethod implements OptionSetter\r
-{\r
+class OptionSetterViaMethod implements OptionSetter {\r
private Method m;\r
\r
- public OptionSetterViaMethod(Method m)\r
- {\r
+ public OptionSetterViaMethod(Method m) {\r
this.m = m;\r
}\r
\r
- public void setOption(Object bean, Object value) throws OptionParserException\r
- {\r
+ public void setOption(Object bean, Object value) throws XerialException {\r
ReflectionUtil.setValue(bean, m, value);\r
}\r
\r
- public Class< ? > getOptionDataType()\r
- {\r
+ public Class< ? > getOptionDataType() {\r
Type t = m.getParameterTypes()[0];\r
- if (ParameterizedType.class.isInstance(t))\r
- {\r
+ if (ParameterizedType.class.isInstance(t)) {\r
return (Class< ? >) ((ParameterizedType) t).getRawType();\r
}\r
else\r
return (Class< ? >) t;\r
}\r
\r
- public boolean takesArgument()\r
- {\r
+ public boolean takesArgument() {\r
return !TypeInfo.isBoolean(getOptionDataType());\r
}\r
\r
- public void initialize(Object bean) throws OptionParserException\r
- {\r
+ public void initialize(Object bean) throws OptionParserException {\r
// do nothing\r
}\r
\r
- public String getParameterName()\r
- {\r
+ public String getParameterName() {\r
return m.getName();\r
}\r
\r
return description;
}
- public Enum< ? > getCode() {
- return this;
- }
-
}