/*
* Copyright 2013 Eediom Inc.
*
* 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 org.araqne.logdb.client;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 아라크네 메시지버스 RPC 전문을 표현합니다.
*
* @author xeraph@eediom.com
*
*/
public class Message {
/**
* 아라크네 메시지버스 RPC 전문의 유형을 표현합니다.
*
* @author xeraph
*
*/
public enum Type {
/**
* 사용되지 않음
*/
None,
/**
* RPC 요청
*/
Request,
/**
* RPC 응답
*/
Response,
/**
* 비동기 트랩 (서버 푸시)
*/
Trap;
}
private String guid;
private Type type;
private String session;
private String requestId;
private String source;
private String target;
private String method;
private Map<String, Object> parameters;
private String errorCode;
private String errorMessage;
public Message() {
parameters = new HashMap<String, Object>();
guid = UUID.randomUUID().toString();
type = Type.Request;
parameters = new HashMap<String, Object>();
source = "0";
target = "0";
}
/**
* 전문 식별자 GUID를 반환합니다.
*
* @return 전문 식별자 GUID
*/
public String getGuid() {
return guid;
}
/**
* 전문 식별자 GUID를 설정합니다.
*
* @param guid
* 전문 식별자 GUID
*/
public void setGuid(String guid) {
this.guid = guid;
}
/**
* 메시지버스 RPC 유형을 반환합니다.
*
* @return RPC 유형
*/
public Type getType() {
return type;
}
/**
* 메시지버스 RPC 유형을 설정합니다.
*
* @param type
* RPC 유형
*/
public void setType(Type type) {
this.type = type;
}
/**
* 세션 키를 반환합니다.
*
* @return 세션 키
*/
public String getSession() {
return session;
}
/**
* 세션 키를 설정합니다.
*
* @param session
* 세션 키
*/
public void setSession(String session) {
this.session = session;
}
/**
* 이 전문이 응답 전문인 경우 요청 전문의 식별자 GUID를 반환합니다. 그렇지 않은 경우 null을 반환합니다.
*
* @return RPC 요청 전문의 식별자
*/
public String getRequestId() {
return requestId;
}
/**
* 요청 전문의 식별자를 설정합니다.
*
* @param requestId
* RPC 요청 전문의 식별자
*/
public void setRequestId(String requestId) {
this.requestId = requestId;
}
/**
* RPC 요청자의 식별자를 반환합니다.
*
* @return RPC 요청자의 식별자
*/
public String getSource() {
return source;
}
/**
* RPC 요청자의 식별자를 설정합니다.
*
* @param source
* RPC 요청자의 식별자
*/
public void setSource(String source) {
this.source = source;
}
/**
* RPC 응답자의 식별자를 반환합니다.
*
* @return RPC 응답자의 식별자
*/
public String getTarget() {
return target;
}
/**
* RPC 응답자의 식별자를 설정합니다.
*
* @param target
* RPC 응답자의 식별자
*/
public void setTarget(String target) {
this.target = target;
}
/**
* RPC 메소드 이름을 반환합니다.
*
* @return RPC 메소드 이름. "패키지.클래스.메소드이름" 형식
*/
public String getMethod() {
return method;
}
/**
* RPC 메소드 이름을 설정합니다.
*
* @param method
* RPC 메소드 이름. "패키지.클래스.메소드이름" 형식
*/
public void setMethod(String method) {
this.method = method;
}
/**
* RPC 매개변수 목록을 반환합니다.
*
* @return RPC 매개변수 목록
*/
public Map<String, Object> getParameters() {
return parameters;
}
/**
* RPC 매개변수 목록을 설정합니다.
*
* @param parameters
* RPC 매개변수 목록
*/
public void setParameters(Map<String, Object> parameters) {
this.parameters = parameters;
}
/**
* 특정 매개변수의 값을 반환합니다.
*
* @param key
* 매개변수 키
* @return 매개변수 값
*/
public Object get(String key) {
return parameters.get(key);
}
/**
* 특정 매개변수 키를 포함하는지 여부를 반환합니다.
*
* @param key
* 매개변수 키
* @return 매개변수 키를 포함하는 경우 true, 그렇지 않으면 false
*/
public boolean containsKey(String key) {
return parameters.containsKey(key);
}
/**
* 특정 매개변수의 값을 Long 타입으로 반환합니다.
*
* @param key
* 매개변수 키
* @return Long으로 캐스팅된 매개변수 값
*/
public Long getLong(String key) {
if (!parameters.containsKey(key))
return null;
Object v = parameters.get(key);
if (v == null)
return null;
if (v instanceof Integer)
return (long) ((Integer) v);
else
return (Long) v;
}
/**
* 특정 매개변수의 값을 Integer 타입으로 반환합니다.
*
* @param key
* 매개변수 키
* @return Integer로 캐스팅된 매개변수 값
*/
public Integer getInt(String key) {
if (!parameters.containsKey(key))
return null;
return (Integer) parameters.get(key);
}
/**
* 특정 매개변수의 값을 String 타입으로 반환합니다.
*
* @param key
* 매개변수 키
* @return String으로 캐스팅된 매개변수 값
*/
public String getString(String key) {
if (!parameters.containsKey(key))
return null;
return (String) parameters.get(key);
}
/**
* 특정 매개변수의 값을 Boolean 타입으로 반환합니다.
*
* @param key
* 매개변수 키
* @return Boolean으로 캐스팅된 매개변수 값
*/
public Boolean getBoolean(String key) {
if (!parameters.containsKey(key))
return null;
return (Boolean) parameters.get(key);
}
/**
* 특정 매개변수의 값을 Date 타입으로 반환합니다.
*
* @param key
* 매개변수 키
* @return Date로 캐스팅된 매개변수 값
*/
public Date getDate(String key) {
if (!parameters.containsKey(key))
return null;
return (Date) parameters.get(key);
}
/**
* RPC 예외가 발생한 경우 오류 코드 값을 반환합니다. 정상 실행된 경우 null을 반환합니다.
*
* @return RPC 예외 오류 코드 값
*/
public String getErrorCode() {
return errorCode;
}
/**
* RPC 예외 오류 코드를 설정합니다.
*
* @param errorCode
* RPC 예외 오류 코드 값
*/
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
/**
* RPC 예외가 발생한 경우 오류 메시지를 반환합니다. 정상 실행된 경우 null을 반환합니다.
*
* @return RPC 예외 오류 메시지
*/
public String getErrorMessage() {
return errorMessage;
}
/**
* RPC 예외가 발생한 경우 오류 메시지를 설정합니다.
*
* @param errorMessage
* RPC 예외 오류 메시지
*/
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
@Override
public String toString() {
return String.format("header [guid=%s, session=%d, source=%s, target=%s, method=%s, error=%s]", guid, session, source,
target, method, errorMessage);
}
}