package com.datascience.utils.transformations.simple;
import com.datascience.core.base.LObject;
import com.datascience.utils.ITransformation;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import java.util.ArrayList;
/**
* User: artur
* Date: 5/7/13
*/
public class LObjectTransform<T> implements ITransformation<LObject<T>, String> {
Joiner joiner;
Splitter splitter;
ITransformation<T, String> labelTransformation;
public LObjectTransform(String separator, ITransformation<T, String> labelTransformation){
joiner = Joiner.on(separator);
splitter = Splitter.on(separator);
this.labelTransformation = labelTransformation;
}
@Override
public String transform(LObject<T> object) {
return joiner.join(
object.getName(),
labelTransformation.transform(object.getGoldLabel()),
labelTransformation.transform(object.getEvaluationLabel()));
}
@Override
public LObject<T> inverse(String object) {
ArrayList<String> items = Lists.newArrayList(splitter.split(object));
LObject<T> obj = new LObject<T>(items.get(0));
int half = (items.size()-1)/2;
obj.setGoldLabel(labelTransformation.inverse(joiner.join(items.subList(1, 1 + half))));
obj.setEvaluationLabel(labelTransformation.inverse(joiner.join(items.subList(1 + half, items.size()))));
return obj;
}
}