package com.akjava.lib.common.functions; import java.util.ArrayList; import java.util.List; import com.akjava.lib.common.tag.LabelAndValue; import com.akjava.lib.common.utils.ValuesUtils; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Joiner; import com.google.common.collect.Lists; /** * TODO more test * @author aki * */ public class LabelAndValueDto { private LabelAndValueDto(){} private static final Joiner COMMA_JOINER=Joiner.on(","); public static List<LabelAndValue> lineToLabelAndValues(String line){ String[] csv=line.split(","); List<String> values=Lists.newArrayList(csv); return Lists.newArrayList(Lists.transform(values, new TextToLabelAndValueFunction())); } public static List<LabelAndValue> lineToLabelAndValuesWithNumber(String line){ String[] csv=line.split(","); List<String> values=Lists.newArrayList(csv); int index=0; for(int i=0;i<values.size();i++){ String value=values.get(i); if(value.indexOf(":")==-1){//auto set number values.set(i, value+":"+index); index++; } } return Lists.newArrayList(Lists.transform(values, new TextToLabelAndValueFunction())); } public static String labelAndValueToString(List<LabelAndValue> values){ List<String> texts=Lists.transform(values,Functions.toStringFunction()); return COMMA_JOINER.join(texts); } public static String[] separateLabelValueAndSelection(String line){ String[] csv=line.split(","); List<String> values=Lists.newArrayList(csv); List<LabelAndValue> lvalues=Lists.transform(values, new TextToLabelAndValueFunction()); List<String> selections=new ArrayList<String>(); for(LabelAndValue lv:lvalues){ if(lv.isSelected()){ selections.add(lv.getPrintValue()); lv.setSelected(false); } } String[] result=new String[2]; result[0]=labelAndValueToString(lvalues); result[1]=COMMA_JOINER.join(selections); return result; } public static class TextToLabelAndValueFunction implements Function<String,LabelAndValue>{ @Override public LabelAndValue apply(String text) { LabelAndValue lv=null; String[] vs=text.split(":"); if(vs.length>1){ if(vs.length>2){ lv=new LabelAndValue(vs[0], vs[1],ValuesUtils.toBoolean(vs[2], false)); }else{ lv=new LabelAndValue(vs[0], vs[1]); } }else{ lv=new LabelAndValue(text); } return lv; } } }