blob: 3752616963354bf7f2cf85172b1f5741974a1f95 [file] [log] [blame]
package com.a.eye.skywalking.collector.worker.storage;
import com.a.eye.skywalking.collector.actor.selector.AbstractHashMessage;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* @author pengys5
*/
public class MergeData extends AbstractHashMessage {
public static final String SPLIT = ",";
private String id;
private Map<String, Set<String>> mergeData = new HashMap<>();
public MergeData(String key) {
super(key);
this.id = key;
}
public String getId() {
return id;
}
public void setMergeData(String column, String value) {
if (!mergeData.containsKey(column)) {
mergeData.put(column, new HashSet<>());
}
mergeData.get(column).add(value);
}
public void merge(MergeData data) {
for (Map.Entry<String, Set<String>> entry : data.mergeData.entrySet()) {
String column = entry.getKey();
Set<String> value = entry.getValue();
Iterator<String> iterator = value.iterator();
while (iterator.hasNext()) {
setMergeData(column, iterator.next());
}
}
}
public void merge(Map<String, Object> dbData) {
for (Map.Entry<String, Object> entry : dbData.entrySet()) {
if (!AbstractIndex.TIME_SLICE.equals(entry.getKey())
&& !AbstractIndex.AGG_COLUMN.equals(entry.getKey())) {
String dbValue = String.valueOf(entry.getValue());
String[] dbValues = dbValue.split(SPLIT);
for (String value : dbValues) {
setMergeData(entry.getKey(), value);
}
}
}
}
public Map<String, String> toMap() {
Map<String, String> source = new HashMap<>();
for (Map.Entry<String, Set<String>> entry : mergeData.entrySet()) {
String column = entry.getKey();
Iterator<String> iterator = entry.getValue().iterator();
StringBuffer value = new StringBuffer();
int i = 0;
while (iterator.hasNext()) {
if (i == 0) {
value.append(iterator.next());
} else {
value.append(SPLIT).append(iterator.next());
}
i++;
}
source.put(column, value.toString());
}
return source;
}
}