package com.akjava.gwt.lib.client.experimental;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.akjava.gwt.lib.client.LogUtils;
import com.akjava.lib.common.utils.CSVUtils;
import com.google.common.base.Converter;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
public class RectLabelDataConverter extends Converter<String, Map<String, Map<String,List<String>>>> {
@Override
protected Map<String, Map<String, List<String>>> doForward(String text) {
Map<String, Map<String, List<String>>> result=new LinkedHashMap<String, Map<String,List<String>>>();
List<String> lines=CSVUtils.splitLinesWithGuava(text);
for(String line:lines){
if(line.isEmpty()){
continue;
}
String[] csv=line.split("\t");
String name=null;
String rect=null;
if(csv.length>1){
name=csv[0];
rect=csv[1];
String[] rectValue=rect.split(",");
if(rectValue.length!=4){
LogUtils.log("invalid rect:"+rect);
continue;
}
}else{//at least need name and rect
continue;
}
List<String> labelList;
if(csv.length>2){//some case no label
String[] labels=csv[1].split(",");
labelList=Lists.newArrayList(labels);
}else{
labelList=Lists.newArrayList();
}
Map<String, List<String>> map=result.get(name);
if(map==null){
map=new LinkedHashMap<String, List<String>>();
result.put(name, map);
}
map.put(rect, labelList);
}
return result;
}
@Override
protected String doBackward(Map<String, Map<String, List<String>>> data) {
List<String> lines=Lists.newArrayList();
Joiner kanmaJoiner=Joiner.on(",");
Joiner tabJoiner=Joiner.on("\t");
for(String key:data.keySet()){
Map<String, List<String>> rects=data.get(key);
for(String rect:rects.keySet()){
List<String> labels=rects.get(rect);
lines.add(tabJoiner.join(ImmutableList.of(key,rect,kanmaJoiner.join(labels))));
}
}
return Joiner.on("\r\n").join(lines);
}
}