package it.unitn.molerat.repos.trackers.vuln; import it.unitn.molerat.repos.wrappers.GitRepoWrapper; import it.unitn.molerat.repos.wrappers.RepoWrapper; import it.unitn.molerat.repos.wrappers.SvnRepoWrapper; public class VulnerabilityEvidenceTrackerFactory { public static VulnerabilityEvidenceTracker getTracker(String repoRoot, String fixedRev, String wrapperType, String trackerType) throws Exception { RepoWrapper wrapper = null; switch (wrapperType.toLowerCase()) { case "svn": wrapper = new SvnRepoWrapper(repoRoot); break; case "git": wrapper = new GitRepoWrapper(repoRoot); break; default: throw new Exception("There is currently no support for '" + wrapperType + "'"); } VulnerabilityEvidenceTracker vulnerabilityEvidenceTracker = null; switch (trackerType.toLowerCase()) { case "deletionvulnerabilityevidencetracker": vulnerabilityEvidenceTracker = new DeletionVulnerabilityEvidenceTracker(wrapper, fixedRev); break; case "slicevulnerabilityevidencetracker": vulnerabilityEvidenceTracker = new SliceVulnerabilityEvidenceTracker(wrapper, fixedRev); break; case "slicedecayvulnerabilityevidencetracker": vulnerabilityEvidenceTracker = new SliceDecayVulnerabilityEvidenceTracker(wrapper, fixedRev); break; case "patchedmethodbodytracker": vulnerabilityEvidenceTracker = new PatchedMethodBodyTracker(wrapper, fixedRev); break; case "enhanceddeletionvulnerabilityevidencetracker": vulnerabilityEvidenceTracker = new EnhancedDeletionVulnerabilityEvidenceTracker(wrapper, fixedRev); break; case "fixstatisticsvulnerabilityevidencetracker": vulnerabilityEvidenceTracker = new FixStatisticsVulnerabilityEvidenceTracker(wrapper, fixedRev); break; default: throw new Exception("There is no such molerat.evidence tracker as '" + trackerType + "'"); } return vulnerabilityEvidenceTracker; } public static String getTrackersList() { StringBuilder builder = new StringBuilder(); builder.append("--------------------\n"); builder.append("The list of available vulnerability molerat.evidence trackers:\n"); builder.append("--------------------\n"); builder.append("\n"); builder.append("\t\"SliceDecayVulnerabilityEvidenceTracker\" - track intra-procedural slice over the fixed lines.\n"); builder.append("\n"); builder.append("\t\"DeletionVulnerabilityEvidenceTracker\" - track only the lines deleted during a fix.\n"); builder.append("\n"); builder.append("\t\"PatchedMethodBodyTracker\" - track the entire fixed methods.\n"); builder.append("\n"); builder.append("\t\"EnhancedDeletionVulnerabilityEvidenceTracker\" - track only the lines deleted during a fix, " + "or the entire fixed methods if there are no deleted lines.\n"); builder.append("\n"); builder.append("--------------------\n"); return builder.toString(); } }