/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata;
import java.util.ArrayList;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import org.rf.ide.core.testdata.text.read.IRobotLineElement;
import org.rf.ide.core.testdata.text.read.RobotLine;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.write.ILineDumpTokenListener;
/**
* @author wypych
*/
public class DumpedResultBuilder implements ILineDumpTokenListener {
private List<RobotLine> lines;
private final Map<RobotToken, RobotToken> oldToNewTokenMappingTmp = new IdentityHashMap<>();
public DumpedResultBuilder producedLines(final List<RobotLine> lines) {
this.lines = lines;
return this;
}
public DumpedResultBuilder addMapNewToOld(final RobotToken oldModelToken, final RobotToken newRecalculatedToken) {
oldToNewTokenMappingTmp.put(oldModelToken, newRecalculatedToken);
return this;
}
@Override
public void tokenDumped(final RobotToken oldToken, final RobotToken newToken) {
this.addMapNewToOld(oldToken, newToken);
}
public static class DumpedResult {
private String dumpedContent;
private List<RobotLine> lines;
private final Map<RobotToken, RobotToken> oldToNewTokenMapping = new IdentityHashMap<>();
private void setDumpedContent(final String dumpedContent) {
this.dumpedContent = dumpedContent;
}
public String newContent() {
return this.dumpedContent;
}
private void setLines(final List<RobotLine> lines) {
this.lines = lines;
}
public List<RobotLine> newProducedLines() {
return this.lines;
}
private void setOldToNewMapping(final Map<RobotToken, RobotToken> mapping) {
this.oldToNewTokenMapping.putAll(mapping);
}
public Map<RobotToken, RobotToken> mappingBetweenOldAndNewTokens() {
return Collections.unmodifiableMap(oldToNewTokenMapping);
}
}
private String dump(final List<RobotLine> lines) {
final StringBuilder strLine = new StringBuilder();
final int nrOfLines = lines.size();
for (int i = 0; i < nrOfLines; i++) {
final RobotLine line = lines.get(i);
for (final IRobotLineElement elem : line.getLineElements()) {
strLine.append(elem.getRaw());
}
strLine.append(line.getEndOfLine().getRaw());
}
return strLine.toString();
}
public DumpedResult build() {
DumpedResult builded = new DumpedResult();
if (lines == null) {
builded.setLines(new ArrayList<RobotLine>(0));
} else {
builded.setLines(lines);
}
builded.setDumpedContent(dump(builded.newProducedLines()));
builded.setOldToNewMapping(oldToNewTokenMappingTmp);
return builded;
}
}