/// <reference types="jzt-hinny" />
import { ValidatorBean, ValidatorRule } from "@jzt-hinny/core";
import { HttpSessionWrapper } from "./HttpSessionWrapper";
import { ServletContextWrapper } from "./ServletContextWrapper";
import { QueryBySort } from "../model/request/QueryBySort";
import { QueryByPage } from "../model/request/QueryByPage";
export interface UploadFile {
    /**
     * 参数的名称
     */
    getName(): JString;
    /**
     * 原始文件名，如果在多部分形式中未选择文件，则为空字符串；如果未定义或不可用，则为空字符串
     */
    getOriginalFilename(): JString;
    /**
     * 内容类型，如果未定义，则为空（或在多部分形式中未选择文件）
     */
    getContentType(): JString;
    /**
     * 返回上传的文件是否为空，即没有在多部分表单中选择文件或所选文件没有内容
     */
    isEmpty(): JBoolean;
    /**
     * 文件的大小，如果为空，则为0
     */
    getSize(): JLong;
    /**
     * 文件的内容为字节，如果为空，则为空字节数组
     */
    getBytes(): JByte[];
    /**
     * 文件的内容为流，如果为空，则为空流
     */
    getInputStream(): JInputStream;
    /**
     * 将接收到的文件传输到给定的目标文件
     */
    transferTo(filePath: JString): void;
}
export interface HttpRequestWrapper extends JObject {
    /**
     * 原始HTTP请求对象
     */
    originalRequest(): JHttpServletRequest;
    /**
     * 返回具有给定名字的 servlet container 的属性,或者当没有具有所给名字的属性时，返回一个空值
     */
    getAttribute<T = any>(name: JString): T | null;
    /**
     * 从请求消息中删除一个属性
     */
    removeAttribute(name: JString): void;
    /**
     * 存储一个请求消息中的属性
     */
    setAttribute(name: JString, obj: any): void;
    /**
     * 返回一个包含servlet context中属性名字变量的集合
     */
    getAttributeNames(): JList<JString>;
    /**
     * 返回用在请求信息的body编码的字符的名称
     */
    getCharacterEncoding(): JString;
    /**
     * 返回请求体的用字节表示的长度，并被输入流改变为有效。如果长度未知，就返回-1
     */
    getContentLength(): JInt;
    /**
     * 返回请求体的 MIME类型，当长度未知是就返回一个空值
     */
    getContentType(): JString;
    /**
     * 用一个 ServletInputStream 重新得到二进制的请求消息体
     */
    getInputStream(): JInputStream;
    /**
     * 用一个 BufferedReader 重新得到字符串数据的请求消息体
     */
    getReader(): JReader;
    /**
     * 以 protocol/majorVersion.minorVersion, 的格式返回请求所用协议的名称和版本。例如HTTP/1.1
     */
    getProtocol(): JString;
    /**
     * 返回一个布尔值以指明是否这个请求使用了一个安全信道，如HTTPS
     */
    isSecure(): JBoolean;
    /**
     * 返回用以作出请求消息的方案的名称，如 http, https, 或ftp等
     */
    getScheme(): JString;
    /**
     * 返回收到请求的服务器主机的名字
     */
    getServerName(): JString;
    /**
     * 返回收到请求的端口号
     */
    getServerPort(): JInt;
    /**
     * 返回一个请求参数的字符串值。若该参数不存在，则返回一个空值
     */
    getParameter(name: JString): JString;
    /**
     * 返回一个包含了请求中的参数名字的字符串对象的枚举变量
     */
    getParameterNames(): JList<JString>;
    /**
     * 返回一个包含所有的给定请求参数的值的字符串对象的向量。若该参数不存在，则返回一个空值
     */
    getParameterValues(name: JString): JString[];
    /**
     * 获取所有请求参数
     */
    getParameterMap(): JMap<JString, JString[]>;
    /**
     * 返回客户端发送请求的IP地址
     */
    getRemoteAddr(): JString;
    /**
     * 返回发送请求的客户端的完全合格的名称；或者如果客户端的名字没有确定则返回其IP地址
     */
    getRemoteHost(): JString;
    getRemotePort(): JInt;
    getLocalAddr(): JString;
    getLocalName(): JString;
    getLocalPort(): JInt;
    getServletContext(): ServletContextWrapper;
    /**
     * 返回用于保护servlet的认证方案的名字，例如， "BASIC" 或 "SSL,"。如果servlet没有被保护则返回一个空值
     */
    getAuthType(): JString | null;
    /**
     * 如果用户已被授权认证，则返回用户作出请求的登录情况；否则就返回一个空值
     */
    getRemoteUser(): JString;
    /**
     * 返回由客户机指定的会话ID
     */
    getRequestedSessionId(): JString;
    /**
     * 返回关于该请求的当前会话。或者若该请求没有会话则就创建一个
     */
    getSession(): HttpSessionWrapper;
    /**
     * 返回有关本请求的当前HttpSession，或者若该请求没有会话，且“创建”属性为真，则就创建一个
     */
    getSession(create: JBoolean): HttpSessionWrapper;
    /**
     * 检查是否要求的会话ID已作为cookie来到
     */
    isRequestedSessionIdFromCookie(): JBoolean;
    /**
     * 检查是否要求的会话ID已作为请求URL的一部分到达
     */
    isRequestedSessionIdFromURL(): JBoolean;
    /**
     * 检查是否要求的会话ID仍有效
     */
    isRequestedSessionIdValid(): JBoolean;
    /**
     * 返回指明请求context的请求URL的部分
     */
    getContextPath(): JString;
    /**
     * 返回调用servlet的请求的URL部分<br />
     * 请求url path，如：/api/demo_1
     */
    getServletPath(): JString;
    /**
     * 返回用以作出请求的HTTP方法的名称，例如 GET, POST,或 PUT等等
     */
    getMethod(): JString;
    /**
     * 返回该请求消息的URL中HTTP协议第一行里从协议名称到请求字符串的部分<br />
     * 请求url path，如：/api/demo_1
     */
    getRequestURI(): JString;
    /**
     * 请求url(protocol、host、path)，如：http://demo.msvc.top:18081/api/demo_1
     */
    getRequestURL(): JString;
    /**
     * 返回有关当客户端作出请求时的URL的任何额外的路径信息
     */
    getPathInfo(): JString;
    /**
     * 返回在servlet名字之后查询字符串之前的任何额外的路径信息，并将其转换成一个真正的路径
     */
    getPathTranslated(): JString;
    /**
     * 返回包含在请求URL中路径之后的查询字符串<br />
     * 查询字符串，如：a=123a&b=456b
     */
    getQueryString(): JString;
    /**
     * 返回所有的本请求消息包含的头名字的集合
     */
    getHeaderNames(): JList<JString>;
    /**
     * 返回指定的作为字符串请求消息头的值
     */
    getHeader(name: JString): JString;
    /**
     * 以一个字符串对象集合的形式，返回包含指定请求消息头的所有值
     */
    getHeaders(name: JString): JList<JString>;
    /**
     * 返回一个指定的请求消息头的整数值
     */
    getIntHeader(name: JString): JInt;
    /**
     * 返回指定的请求消息头的值，返回值格式是描述日期对象的长型数值
     */
    getDateHeader(name: JString): JLong;
    /**
     * 返回包含所有的客户端随请求信息发送来的cookie对象的一个 array
     */
    getCookies(): JCookie[];
    /**
     * 获取数据库排序查询参数
     */
    getQueryBySort(): QueryBySort;
    /**
     * 获取数据库分页查询参数
     */
    getQueryByPage(): QueryByPage;
    /**
     * 获取参数对象
     */
    getParams<T extends object = any>(): T;
    /**
     * 获取Body对象
     */
    getBody<T extends object = any>(): T;
    /**
     * 获取参数Map
     */
    getParamsMap(): JMultiValueMap<JString, JString>;
    /**
     * 获取请求参数(Parameter和Body都会取)
     */
    getRequestData<T extends object = any>(): T;
    /**
     * 从Body中填充数据
     *
     * @param model    数据结构以及初始值
     * @param fillNull null值是否也要填充
     */
    fillFromBody(model: object, fillNull: boolean): void;
    /**
     * 从Body中填充数据
     *
     * @param model 数据结构以及初始值
     */
    fillFromBody(model: object): void;
    /**
     * 从Params中填充数据
     *
     * @param model    数据结构以及初始值
     * @param fillNull null值是否也要填充
     */
    fillFromParams(model: object, fillNull: boolean): void;
    /**
     * 从Params中填充数据
     *
     * @param model 数据结构以及初始值
     */
    fillFromParams(model: object): void;
    /**
     * 从Body或者Params中填充数据
     *
     * @param model    数据结构以及初始值
     * @param fillNull null值是否也要填充
     */
    fillFromAny(model: object, fillNull: boolean): void;
    /**
     * 从Body或者Params中填充数据
     *
     * @param model    数据结构以及初始值
     */
    fillFromAny(model: object): void;
    /**
     * 从Body中填充数据然后验证数据
     *
     * @param model    数据结构以及初始值
     * @param rule     校验规则
     * @param fillNull null值是否也要填充
     * @param fast     快速验证(只要有一个错误就抛出异常)
     */
    fillAndValidatedFromBody<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>, fillNull: boolean, fast: boolean): void;
    /**
     * 从Body中填充数据然后验证数据
     *
     * @param model 数据结构以及初始值
     * @param rule  校验规则
     */
    fillAndValidatedFromBody<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>): void;
    /**
     * 从Params中填充数据然后验证数据
     *
     * @param model    数据结构以及初始值
     * @param rule     校验规则
     * @param fillNull null值是否也要填充
     * @param fast     快速验证(只要有一个错误就抛出异常)
     */
    fillAndValidatedFromParams<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>, fillNull: boolean, fast: boolean): void;
    /**
     * 从Params中填充数据然后验证数据
     *
     * @param model 数据结构以及初始值
     * @param rule  校验规则
     */
    fillAndValidatedFromParams<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>): void;
    /**
     * 从Body或者Params中填充数据然后验证数据
     *
     * @param model    数据结构以及初始值
     * @param rule     校验规则
     * @param fillNull null值是否也要填充
     * @param fast     快速验证(只要有一个错误就抛出异常)
     */
    fillAndValidatedFromAny<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>, fillNull: boolean, fast: boolean): void;
    /**
     * 从Body或者Params中填充数据然后验证数据
     *
     * @param model 数据结构以及初始值
     * @param rule  校验规则
     */
    fillAndValidatedFromAny<T extends object = ValidatorBean>(model: T, rule: ValidatorRule<T>): void;
    /**
     * 获取上传的文件名称
     */
    getUploadFileNames(): JList<JString>;
    /**
     * 获取上传的文件
     *
     * @param filename 文件名称
     */
    getUploadFile(filename: JString): UploadFile;
    /**
     * 获取上传的文件
     *
     * @param filename 文件名称
     */
    getUploadFiles(filename: JString): JList<UploadFile>;
    /**
     * 获取所有上传的文件
     */
    getAllUploadFiles(): JMultiValueMap<JString, UploadFile>;
    /**
     * 获取所有上传的文件
     *
     * @param filename 文件名称
     */
    getAllUploadFiles(filename: JString): JList<UploadFile>;
    /**
     * 获取第一个上传的文件
     */
    getFirstUploadFile(): UploadFile;
}
