package com.vistatec.ocelot.tm.okapi;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.Lists;
import com.vistatec.ocelot.segment.model.SegmentAtom;
import com.vistatec.ocelot.segment.model.SegmentVariant;
import com.vistatec.ocelot.segment.model.okapi.OkapiSegmentVariant;
import com.vistatec.ocelot.tm.TmMatch;
import net.sf.okapi.tm.pensieve.common.TmHit;
import net.sf.okapi.tm.pensieve.common.TranslationUnit;
import net.sf.okapi.tm.pensieve.common.TranslationUnitVariant;
/**
* Massage a Pensieve TmHit to the Ocelot TmMatch format.
*/
public class PensieveTmMatch implements TmMatch {
private final String tmOrigin;
private final TmHit hit;
public PensieveTmMatch(String tmOrigin, TmHit hit) {
this.tmOrigin = tmOrigin;
this.hit = hit;
}
@Override
public String getTmOrigin() {
return tmOrigin;
}
@Override
public float getMatchScore() {
return hit.getScore();
}
@Override
public SegmentVariant getSource() {
TranslationUnit tu = hit.getTu();
return new PensieveSegmentVariant(tu.getSource());
}
@Override
public SegmentVariant getTarget() {
TranslationUnit tu = hit.getTu();
return new PensieveSegmentVariant(tu.getTarget());
}
/**
* Shares the same parsing semantics as TextContainerVariant, due to both
* having an Okapi TextFragment as their content.
*/
public static class PensieveSegmentVariant extends OkapiSegmentVariant {
private List<SegmentAtom> atoms;
public PensieveSegmentVariant() {
this.atoms = new ArrayList<>();
}
public PensieveSegmentVariant(TranslationUnitVariant tuv) {
this.atoms = convertTextFragment(tuv.getContent());
}
@Override
public List<SegmentAtom> getAtoms() {
return this.atoms;
}
@Override
protected void setAtoms(List<SegmentAtom> atoms) {
this.atoms = atoms;
}
@Override
public SegmentVariant createEmptyTarget() {
return new PensieveSegmentVariant();
}
@Override
public SegmentVariant createCopy() {
PensieveSegmentVariant copy = new PensieveSegmentVariant();
copy.setAtoms(Lists.newCopyOnWriteArrayList(atoms));
return copy;
}
@Override
public void setContent(SegmentVariant variant) {
PensieveSegmentVariant copy = (PensieveSegmentVariant) variant.createCopy();
this.atoms = copy.getAtoms();
}
}
}