AbstractMessage.java
2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package com.dianping.cat.message.internal;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import java.nio.charset.Charset;
import com.dianping.cat.message.Message;
import com.dianping.cat.message.spi.codec.PlainTextMessageCodec;
public abstract class AbstractMessage implements Message {
private String m_type;
private String m_name;
private String m_status = "unset";
private long m_timestampInMillis;
private CharSequence m_data;
private boolean m_completed;
public AbstractMessage(String type, String name) {
m_type = String.valueOf(type);
m_name = String.valueOf(name);
m_timestampInMillis = MilliSecondTimer.currentTimeMillis();
}
@Override
public void addData(String keyValuePairs) {
if (m_data == null) {
m_data = keyValuePairs;
} else if (m_data instanceof StringBuilder) {
((StringBuilder) m_data).append('&').append(keyValuePairs);
} else {
StringBuilder sb = new StringBuilder(m_data.length() + keyValuePairs.length() + 16);
sb.append(m_data).append('&');
sb.append(keyValuePairs);
m_data = sb;
}
}
@Override
public void addData(String key, Object value) {
if (m_data instanceof StringBuilder) {
((StringBuilder) m_data).append('&').append(key).append('=').append(value);
} else {
String str = String.valueOf(value);
int old = m_data == null ? 0 : m_data.length();
StringBuilder sb = new StringBuilder(old + key.length() + str.length() + 16);
if (m_data != null) {
sb.append(m_data).append('&');
}
sb.append(key).append('=').append(str);
m_data = sb;
}
}
@Override
public CharSequence getData() {
if (m_data == null) {
return "";
} else {
return m_data;
}
}
@Override
public String getName() {
return m_name;
}
@Override
public String getStatus() {
return m_status;
}
@Override
public long getTimestamp() {
return m_timestampInMillis;
}
@Override
public String getType() {
return m_type;
}
@Override
public boolean isCompleted() {
return m_completed;
}
@Override
public boolean isSuccess() {
return Message.SUCCESS.equals(m_status);
}
public void setCompleted(boolean completed) {
m_completed = completed;
}
public void setName(String name) {
m_name = name;
}
@Override
public void setStatus(String status) {
m_status = status;
}
@Override
public void setStatus(Throwable e) {
m_status = e.getClass().getName();
}
public void setTimestamp(long timestamp) {
m_timestampInMillis = timestamp;
}
public void setType(String type) {
m_type = type;
}
@Override
public String toString() {
PlainTextMessageCodec codec = new PlainTextMessageCodec();
ByteBuf buf = ByteBufAllocator.DEFAULT.buffer();
codec.encodeMessage(this, buf);
codec.reset();
return buf.toString(Charset.forName("utf-8"));
}
}