ClientConfigMerger.java
1.77 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
package com.dianping.cat.configuration;
import java.util.Stack;
import com.dianping.cat.configuration.client.entity.ClientConfig;
import com.dianping.cat.configuration.client.entity.Domain;
import com.dianping.cat.configuration.client.entity.Property;
import com.dianping.cat.configuration.client.transform.DefaultMerger;
public class ClientConfigMerger extends DefaultMerger {
public ClientConfigMerger(ClientConfig config) {
super(config);
}
@Override
protected void mergeDomain(Domain old, Domain domain) {
if (domain.getIp() != null) {
old.setIp(domain.getIp());
}
if (domain.getEnabled() != null) {
old.setEnabled(domain.getEnabled());
}
if (domain.getMaxMessageSize() > 0) {
old.setMaxMessageSize(domain.getMaxMessageSize());
}
}
@Override
protected void visitConfigChildren(ClientConfig to, ClientConfig from) {
if (to != null) {
Stack<Object> objs = getObjects();
// if servers is configured, then override it instead of merge
if (!from.getServers().isEmpty()) {
to.getServers().clear();
to.getServers().addAll(from.getServers());
}
// only configured domain in client configure will be merged
for (Domain source : from.getDomains().values()) {
Domain target = to.findDomain(source.getId());
if (target == null) {
target = new Domain(source.getId());
to.addDomain(target);
}
if (to.getDomains().containsKey(source.getId())) {
objs.push(target);
source.accept(this);
objs.pop();
}
}
for (Property source : from.getProperties().values()) {
Property target = to.findProperty(source.getName());
if (target == null) {
target = new Property(source.getName());
to.addProperty(target);
}
objs.push(target);
source.accept(this);
objs.pop();
}
}
}
}