/**
* Dianping.com Inc.
* Copyright (c) 2003-2013 All Rights Reserved.
*/
package com.dianping.pigeon.remoting.common.domain;
import java.io.Serializable;
import java.util.Map;
import com.dianping.pigeon.config.ConfigManagerLoader;
import com.dianping.pigeon.remoting.common.util.Constants;
import com.dianping.pigeon.remoting.common.util.InvocationUtils;
import com.dianping.pigeon.remoting.invoker.config.InvokerConfig;
import com.dianping.pigeon.remoting.invoker.domain.InvokerContext;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "seq", scope = DefaultRequest.class)
public class DefaultRequest implements InvocationRequest {
/**
* 不能随意修改!
*/
private static final long serialVersionUID = 652592942114047764L;
private byte serialize;
@JsonProperty("seq")
private long seq;
private int callType = Constants.CALLTYPE_REPLY;
private int timeout = 0;
@JsonIgnore
private transient long createMillisTime;
@JsonProperty("url")
private String serviceName;
private String methodName;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
private Object[] parameters;
private int messageType = Constants.MESSAGE_TYPE_SERVICE;
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
private Object context;
private String version;
private String app = ConfigManagerLoader.getConfigManager().getAppName();
@JsonIgnore
private transient int size;
private Map<String, Serializable> globalValues = null;
private Map<String, Serializable> requestValues = null;
public DefaultRequest(String serviceName, String methodName, Object[] parameters, byte serialize, int messageType,
int timeout, int callType, long seq) {
this.serviceName = serviceName;
this.methodName = methodName;
this.parameters = parameters;
this.serialize = serialize;
this.messageType = messageType;
this.timeout = timeout;
this.callType = callType;
this.seq = seq;
}
public DefaultRequest(String serviceName, String methodName, Object[] parameters, byte serialize, int messageType,
int timeout, Class<?>[] parameterClasses) {
this.serviceName = serviceName;
this.methodName = methodName;
this.parameters = parameters;
this.serialize = serialize;
this.messageType = messageType;
this.timeout = timeout;
}
public DefaultRequest() {
}
public DefaultRequest(InvokerContext invokerContext) {
if (invokerContext != null) {
InvokerConfig<?> invokerConfig = invokerContext.getInvokerConfig();
if (invokerConfig != null) {
this.serviceName = invokerConfig.getUrl();
this.serialize = invokerConfig.getSerialize();
this.timeout = invokerConfig.getTimeout(invokerContext.getMethodName());
this.setVersion(invokerConfig.getVersion());
if (CallMethod.isOneway(invokerConfig.getCallType())) {
this.setCallType(CallType.NOREPLY.getCode());
} else {
this.setCallType(CallType.REPLY.getCode());
}
}
this.methodName = invokerContext.getMethodName();
this.parameters = invokerContext.getArguments();
this.messageType = Constants.MESSAGE_TYPE_SERVICE;
}
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public byte getSerialize() {
return this.serialize;
}
public void setSequence(long seq) {
this.seq = seq;
}
public long getSequence() {
return this.seq;
}
public void setCallType(int callType) {
this.callType = callType;
}
public int getCallType() {
return this.callType;
}
public int getTimeout() {
return this.timeout;
}
public long getCreateMillisTime() {
return this.createMillisTime;
}
public String getServiceName() {
return this.serviceName;
}
public String getMethodName() {
return this.methodName;
}
public String[] getParamClassName() {
if (this.parameters == null) {
return new String[0];
}
String[] paramClassNames = new String[this.parameters.length];
int k = 0;
for (Object parameter : this.parameters) {
if (parameter == null) {
paramClassNames[k] = "NULL";
} else {
paramClassNames[k] = this.parameters[k].getClass().getName();
}
k++;
}
return paramClassNames;
}
public Object[] getParameters() {
return this.parameters;
}
public int getMessageType() {
return this.messageType;
}
@Override
public Object getContext() {
return this.context;
}
@Override
public void setContext(Object context) {
this.context = context;
}
@Override
public void setCreateMillisTime(long createTime) {
this.createMillisTime = createTime;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("DefaultRequest[serialize=").append(serialize).append(", seq=").append(seq).append(", msgType=").
append(messageType).append(", callType=").append(callType).append(", timeout=").append(timeout).
append(", url=").append(serviceName).append(", method=").append(methodName).append(", app=").append(app).
append(", created=").append(createMillisTime);
if (Constants.LOG_PARAMETERS) {
builder.append(", parameters=").append(InvocationUtils.toJsonString(parameters));
}
builder.append("]");
return builder.toString();
}
@Override
public void setSerialize(byte serialize) {
this.serialize = serialize;
}
@Override
public void setMessageType(int messageType) {
this.messageType = messageType;
}
@Override
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getApp() {
return app;
}
public void setApp(String app) {
this.app = app;
}
public void setMethodName(String methodName) {
this.methodName = methodName;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Map<String, Serializable> getGlobalValues() {
return globalValues;
}
public void setGlobalValues(Map<String, Serializable> globalValues) {
this.globalValues = globalValues;
}
public Map<String, Serializable> getRequestValues() {
return requestValues;
}
public void setRequestValues(Map<String, Serializable> requestValues) {
this.requestValues = requestValues;
}
}