package jetbrains.mps.vcs.annotate;
/*Generated by MPS */
import com.intellij.openapi.vcs.annotate.FileAnnotation;
import java.util.Map;
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import com.intellij.openapi.vcs.history.VcsFileRevision;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.HashSet;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import java.util.Date;
import java.awt.FontMetrics;
public class CommitNumberSubcolumn extends AnnotationAspectSubcolumn {
private FileAnnotation myFileAnnotation;
private Map<VcsRevisionNumber, Integer> myRevisionsToNumbers;
public CommitNumberSubcolumn(AnnotationColumn annotationColumn, FileAnnotation fileAnnotation) {
super(annotationColumn, null);
myFileAnnotation = fileAnnotation;
}
@Override
public String getTextForFileLine(int fileLine) {
return "" + MapSequence.fromMap(myRevisionsToNumbers).get(myFileAnnotation.getLineRevisionNumber(fileLine));
}
private void computeNumbers(Iterable<Integer> fileLines) {
myRevisionsToNumbers = MapSequence.fromMap(new HashMap<VcsRevisionNumber, Integer>());
final Map<VcsRevisionNumber, VcsFileRevision> revisionNumberToRevision = MapSequence.fromMap(new HashMap<VcsRevisionNumber, VcsFileRevision>());
for (VcsFileRevision rev : ListSequence.fromList(myFileAnnotation.getRevisions())) {
MapSequence.fromMap(revisionNumberToRevision).put(rev.getRevisionNumber(), rev);
}
List<VcsRevisionNumber> revisionNumbers = SetSequence.fromSet(SetSequence.fromSetWithValues(new HashSet<VcsRevisionNumber>(), Sequence.fromIterable(fileLines).select(new ISelector<Integer, VcsRevisionNumber>() {
public VcsRevisionNumber select(Integer fl) {
return myFileAnnotation.getLineRevisionNumber(fl);
}
}))).sort(new ISelector<VcsRevisionNumber, Date>() {
public Date select(VcsRevisionNumber rn) {
return check_efout7_a0a0a0a0e0e(MapSequence.fromMap(revisionNumberToRevision).get(rn));
}
}, true).toListSequence();
for (int i = 0; i < ListSequence.fromList(revisionNumbers).count(); i++) {
MapSequence.fromMap(myRevisionsToNumbers).put(ListSequence.fromList(revisionNumbers).getElement(i), i + 1);
}
}
@Override
public void computeWidth(FontMetrics fontMetrics, Iterable<Integer> fileLines) {
computeNumbers(fileLines);
super.computeWidth(fontMetrics, fileLines);
}
@Override
public String getId() {
return "Commit number";
}
@Override
public boolean isRightAligned() {
return true;
}
private static Date check_efout7_a0a0a0a0e0e(VcsFileRevision checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getRevisionDate();
}
return null;
}
}