diff --git a/jplag/src/main/java/de/jplag/Submission.java b/jplag/src/main/java/de/jplag/Submission.java index d9440c864..c9da4e850 100644 --- a/jplag/src/main/java/de/jplag/Submission.java +++ b/jplag/src/main/java/de/jplag/Submission.java @@ -50,6 +50,11 @@ public class Submission implements Comparable { */ private TokenList tokenList; + /** + * Base code comparison + */ + private JPlagComparison baseCodeComparison; + private final Language language; private final ErrorCollector errorCollector; @@ -94,6 +99,22 @@ public int getNumberOfTokens() { return tokenList.size(); } + /** + * Sets the base code comparison + * @param baseCodeComparison is submissions matches with the base code + */ + public void setBaseCodeComparison(JPlagComparison baseCodeComparison) { + this.baseCodeComparison = baseCodeComparison; + } + + /** + * @return base code comparison + */ + public JPlagComparison getBaseCodeComparison() { + return baseCodeComparison; + } + + /** * @return Parse result of the submission. */ @@ -318,4 +339,4 @@ private String[] getRelativeFilePaths(File baseFile, Collection files) { return files.stream().map(File::toPath).map(baseFilePath::relativize).map(Path::toString).toArray(String[]::new); } -} +} \ No newline at end of file diff --git a/jplag/src/main/java/de/jplag/strategy/AbstractComparisonStrategy.java b/jplag/src/main/java/de/jplag/strategy/AbstractComparisonStrategy.java index cca4bf9f7..7310a37cf 100644 --- a/jplag/src/main/java/de/jplag/strategy/AbstractComparisonStrategy.java +++ b/jplag/src/main/java/de/jplag/strategy/AbstractComparisonStrategy.java @@ -1,6 +1,5 @@ package de.jplag.strategy; -import java.util.Hashtable; import java.util.Optional; import de.jplag.GreedyStringTiling; @@ -11,10 +10,6 @@ public abstract class AbstractComparisonStrategy implements ComparisonStrategy { - // TODO PB: I think it's better to make each submission store its own matches with the base code. - // Hashtable that maps the name of a submissions to its matches with the provided base code. - private Hashtable baseCodeMatches = new Hashtable<>(30); - private GreedyStringTiling greedyStringTiling; protected JPlagOptions options; @@ -32,8 +27,8 @@ public AbstractComparisonStrategy(JPlagOptions options, GreedyStringTiling greed protected void compareSubmissionsToBaseCode(SubmissionSet submissionSet) { Submission baseCodeSubmission = submissionSet.getBaseCode(); for (Submission currentSubmission : submissionSet.getSubmissions()) { - JPlagComparison baseCodeMatch = greedyStringTiling.compareWithBaseCode(currentSubmission, baseCodeSubmission); - baseCodeMatches.put(currentSubmission.getName(), baseCodeMatch); + JPlagComparison baseCodeComparison = greedyStringTiling.compareWithBaseCode(currentSubmission, baseCodeSubmission); + currentSubmission.setBaseCodeComparison(baseCodeComparison); baseCodeSubmission.resetBaseCode(); } } @@ -45,8 +40,8 @@ protected Optional compareSubmissions(Submission first, Submiss JPlagComparison comparison = greedyStringTiling.compare(first, second); System.out.println("Comparing " + first.getName() + "-" + second.getName() + ": " + comparison.similarity()); if (withBaseCode) { - comparison.setFirstBaseCodeMatches(baseCodeMatches.get(comparison.getFirstSubmission().getName())); - comparison.setSecondBaseCodeMatches(baseCodeMatches.get(comparison.getSecondSubmission().getName())); + comparison.setFirstBaseCodeMatches(comparison.getFirstSubmission().getBaseCodeComparison()); + comparison.setSecondBaseCodeMatches(comparison.getSecondSubmission().getBaseCodeComparison()); } if (options.getSimilarityMetric().isAboveThreshold(comparison, options.getSimilarityThreshold())) { return Optional.of(comparison);