/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* 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 com.alibaba.citrus.service.requestcontext.util;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.util.Date;
import org.apache.commons.fileupload.FileItem;
import org.springframework.core.MethodParameter;
/**
* 代表一个值的列表。
*
* @author Michael Zhou
*/
public interface ValueList {
// =============================================================
// 取得参数的值
// =============================================================
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>false</code>。
*
* @return 参数值
*/
boolean getBooleanValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
boolean getBooleanValue(Boolean defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
byte getByteValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
byte getByteValue(Byte defaultValue);
/**
* 取得指定参数的字节。
*
* @param charset 用来转换字符的编码
* @return 参数值的字节数组
* @throws UnsupportedEncodingException 如果指定了错误的编码字符集
*/
byte[] getBytes(String charset) throws UnsupportedEncodingException;
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>'\0'</code>。
*
* @return 参数值
*/
char getCharacterValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
char getCharacterValue(Character defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
double getDoubleValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
double getDoubleValue(Double defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
float getFloatValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
float getFloatValue(Float defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
int getIntegerValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
int getIntegerValue(Integer defaultValue);
/**
* 取得指定参数的所有值。如果参数不存在,则返回<code>null</code>。
*
* @return 参数值的数组
*/
int[] getIntegerValues();
/**
* 取得指定参数的所有值。如果参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值的数组
*/
int[] getIntegerValues(int[] defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
long getLongValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
long getLongValue(Long defaultValue);
/**
* 取得指定参数的所有值。如果参数不存在,则返回<code>null</code>。
*
* @return 参数值的数组
*/
long[] getLongValues();
/**
* 取得指定参数的所有值。如果参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值的数组
*/
long[] getLongValues(long[] defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>0</code>。
*
* @return 参数值
*/
short getShortValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
short getShortValue(Short defaultValue);
/**
* 取得日期。字符串将使用指定的<code>DateFormat</code>来解析。如果不存在,则返回<code>null</code>。
*
* @param format <code>DateFormat</code>对象
* @return <code>java.util.Date</code>对象
*/
Date getDateValue(DateFormat format);
/**
* 取得日期。字符串将使用指定的<code>DateFormat</code>来解析。如果不存在,则返回默认值。
*
* @param format <code>DateFormat</code>对象
* @param defaultValue 默认值
* @return <code>java.util.Date</code>对象
*/
Date getDateValue(DateFormat format, Date defaultValue);
/**
* 取得参数值,如果指定名称的参数不存在,则返回<code>null</code>。
*
* @return 参数值
*/
String getStringValue();
/**
* 取得参数值,如果指定名称的参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
String getStringValue(String defaultValue);
/**
* 取得指定参数的所有值。如果参数不存在,则返回<code>null</code>。
*
* @return 参数值的数组
*/
String[] getStringValues();
/**
* 取得指定参数的所有值。如果参数不存在,则返回指定默认值。
*
* @param defaultValue 默认值
* @return 参数值的数组
*/
String[] getStringValues(String[] defaultValue);
/**
* 取得<code>FileItem</code>对象,如果不存在,则返回<code>null</code>。
*
* @return <code>FileItem</code>对象
*/
FileItem getFileItem();
/**
* 取得<code>FileItem</code>对象,如果不存在,则返回<code>null</code>。
*
* @return <code>FileItem</code>对象的数组
*/
FileItem[] getFileItems();
/**
* 取得指定参数的值。如果参数不存在,则返回<code>null</code>。
*
* @return 参数值
*/
Object getValue();
/**
* 取得指定参数的值。如果参数不存在,则返回默认值。
*
* @param defaultValue 默认值
* @return 参数值
*/
Object getValue(Object defaultValue);
/**
* 取得指定参数的所有值。如果参数不存在,则返回<code>null</code>。
*
* @return 参数值的数组
*/
Object[] getValues();
/**
* 取得指定参数的所有值。如果参数不存在,则返回指定默认值。
*
* @param defaultValues 默认值
* @return 参数值的数组
*/
Object[] getValues(Object[] defaultValues);
/** 取得指定类型的值。 */
<T> T getValueOfType(Class<T> type, MethodParameter methodParameter, Object[] defaultValues);
/** 取得指定类型的值。 */
<T> T getValueOfType(Class<T> type, boolean isPrimitive, MethodParameter methodParameter, Object[] defaultValues);
// =============================================================
// 添加和修改参数的方法
// =============================================================
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(boolean value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(byte value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(char value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(double value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(float value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(int value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(long value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(short value);
/**
* 添加参数名/参数值。
*
* @param value 参数值
*/
void addValue(Object value);
/**
* 设置参数值。和<code>add</code>方法不同,此方法将覆盖原有的值。
*
* @param value 参数值
*/
void setValue(Object value);
/**
* 设置参数值。和<code>add</code>方法不同,此方法将覆盖原有的值。
*
* @param values 参数值
*/
void setValues(Object[] values);
// =============================================================
// 辅助方法
// =============================================================
/**
* 取得值的个数。
*
* @return 值的个数
*/
int size();
}