package com.jackson.db.po;
import com.jackson.bean.Bundle;
import com.jackson.bean.ContextSrc;
import com.jackson.net.RequestConfig;
import com.jackson.task.parser.IParser;
import com.jackson.utils.StringUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Created by Jackson on 2016/11/3.
*/
public class Url {
private static Logger logger = LogManager.getLogger(Url.class.getName());
public static int REQUEST_STATE_GET = 0;
public static int REQUEST_STATE_POST = 1;
public static int PROTOCOL_STATE_HTTP = 0;
public static int PROTOCOL_STATE_HTTPS = 1;
public static int STATE_FREE = 0;//空闲
public static int STATE_TAKE_OUT = 1;//被取出
public static int STATE_COMPLETE = 2;//完成
private Bundle bundle;
private ContextSrc contextSrc;
public ContextSrc getContextSrc() {
return contextSrc;
}
public void setContextSrc(ContextSrc contextSrc) {
this.contextSrc = contextSrc;
}
public void setId(Long id) {
this.id = id;
}
private Long id;
private String url;
private int state = 0;//取出状态
private String parserClassName;
private int priority = 1;//优先级
private long createTime;//创建时间
//请求类型 get/post 默认
private int requestState = REQUEST_STATE_GET;
//请求协议类型 http/https
private int protocolState = PROTOCOL_STATE_HTTP;
private int parserFailureTime = 0;//解析次数,不存数据库,内存中使用
private String requestConfigClassName;
/**
* 不推荐使用,让他public 主要还是因为mybatis的映射需要,如果要创建url对象可以使用newHttpxxUrl()系列
*/
private Url() {
}
private static Url newUrl(String url, Class<? extends RequestConfig> requestConfigClass, Class<? extends IParser> parserClass, int protocolState, int requestState) {
Url u = new Url();
u.setUrl(url);
u.setRequestConfigClass(requestConfigClass);
u.setParserClass(parserClass);
u.setProtocolState(protocolState);
u.setRequestState(requestState);
return u;
}
//---------
public static Url newHttpPostUrl(String url, Class<? extends RequestConfig> requestConfigClass, Class<? extends IParser> parserClass) {
return newUrl(url, requestConfigClass, parserClass, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_POST);
}
public static Url newHttpPostUrl(String url, Class<? extends IParser> parserClass) {
return newUrl(url, null, parserClass, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_POST);
}
public static Url newHttpPostUrl(String url) {
return newUrl(url, null, null, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_POST);
}
//-------------
public static Url newHttpsPostUrl(String url, Class<? extends RequestConfig> requestConfigClass, Class<? extends IParser> parserClass) {
return newUrl(url, requestConfigClass, parserClass, Url.PROTOCOL_STATE_HTTPS, Url.REQUEST_STATE_POST);
}
public static Url newHttpsPostUrl(String url, Class<? extends IParser> parserClass) {
return newUrl(url, null, parserClass, Url.PROTOCOL_STATE_HTTPS, Url.REQUEST_STATE_POST);
}
public static Url newHttpsPostUrl(String url) {
return newUrl(url, null, null, Url.PROTOCOL_STATE_HTTPS, Url.REQUEST_STATE_POST);
}
//-----------
public static Url newHttpGetUrl(String url, Class<? extends RequestConfig> requestConfigClass, Class<? extends IParser> parserClass) {
return newUrl(url, requestConfigClass, parserClass, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_GET);
}
public static Url newHttpGetUrl(String url, Class<? extends IParser> parserClass) {
return newUrl(url, null, parserClass, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_GET);
}
public static Url newHttpGetUrl(String url) {
return newUrl(url, null, null, Url.PROTOCOL_STATE_HTTP, Url.REQUEST_STATE_GET);
}
//------------
public static Url newHttpsGetUrl(String url, Class<? extends RequestConfig> requestConfigClass, Class<? extends IParser> parserClass){
return newUrl(url,requestConfigClass,parserClass,Url.PROTOCOL_STATE_HTTPS,Url.REQUEST_STATE_GET);
}
public static Url newHttpsGetUrl(String url, Class<? extends IParser> parserClass){
return newUrl(url,null,parserClass,Url.PROTOCOL_STATE_HTTPS,Url.REQUEST_STATE_GET);
}
public static Url newHttpsGetUrl(String url){
return newUrl(url,null,null,Url.PROTOCOL_STATE_HTTPS,Url.REQUEST_STATE_GET);
}
//------------
public Class<? extends RequestConfig> getRequestConfigClass() {
if (StringUtil.isEmpty(requestConfigClassName)) return null;
try {
return (Class<? extends RequestConfig>) Class.forName(requestConfigClassName);
} catch (ClassNotFoundException e) {
logger.error(e.toString());
}
return null;
}
public void setRequestConfigClass(Class<? extends RequestConfig> requestConfigClass) {
if (requestConfigClass != null)
this.requestConfigClassName = requestConfigClass.getName();
}
public int getRequestState() {
return requestState;
}
public void setRequestState(int requestState) {
this.requestState = requestState;
}
public int getProtocolState() {
return protocolState;
}
public void setProtocolState(int protocolState) {
this.protocolState = protocolState;
}
public String getProtocolScheme() {
if (protocolState == 1) return "https";
if (protocolState == 0) return "http";
throw new RuntimeException("协议类型错误");
}
public int getParserFailureTime() {
return parserFailureTime;
}
public void setParserFailureTime(int parserFailureTime) {
this.parserFailureTime = parserFailureTime;
}
public Long getId() {
return id;
}
public long getCreateTime() {
return createTime;
}
public void setCreateTime(long createTime) {
this.createTime = createTime;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public Class<? extends IParser> getParserClass() {
if (StringUtil.isEmpty(parserClassName)) return null;
try {
return (Class<? extends IParser>) Class.forName(parserClassName);
} catch (ClassNotFoundException e) {
logger.error(e.toString());
}
return null;
}
public void setParserClass(Class<? extends IParser> clazz) {
if (clazz != null)
this.parserClassName = clazz.getName();
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
@Override
public String toString() {
return "Url{" +
", url='" + url + '\'' +
", state=" + state +
", parserClassName='" + parserClassName + '\'' +
", priority=" + priority +
'}';
}
/**
* 不会存入数据库
*
* @return
*/
public Bundle getBundle() {
if (bundle == null)
bundle = Bundle.newInstance();
return bundle;
}
@Override
public boolean equals(Object obj) {
Url u = (Url) obj;
return StringUtil.equals(this.getUrl(), u.getUrl());
}
}