package com.datascience.utils.transformations.simple;
import com.datascience.core.base.AssignedLabel;
import com.datascience.core.base.LObject;
import com.datascience.core.base.Worker;
import com.datascience.utils.ITransformation;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import java.util.Iterator;
/**
* User: artur
* Date: 5/7/13
*/
public class AssignTransform<T> implements ITransformation<AssignedLabel<T>, String> {
Joiner joiner;
Splitter splitter;
ITransformation<T, String> labelTransformation;
public AssignTransform(String separator, ITransformation<T, String> labelTransformation){
joiner = Joiner.on(separator);
splitter = Splitter.on(separator);
this.labelTransformation = labelTransformation;
}
@Override
public String transform(AssignedLabel<T> object) {
return joiner.join(
object.getWorker().getName(),
object.getLobject().getName(),
labelTransformation.transform(object.getLabel()));
}
@Override
public AssignedLabel<T> inverse(String object) {
Iterator<String> values = splitter.split(object).iterator();
Worker worker = new Worker(values.next());
LObject<T> obj = new LObject<T>(values.next());
return new AssignedLabel<T>(worker, obj, labelTransformation.inverse(joiner.join(values)));
}
}