/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.codingspectator.logstocsv; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import edu.illinois.codingtracker.operations.UserOperation; import edu.illinois.codingtracker.operations.files.UpdatedFileOperation; import edu.illinois.codingtracker.operations.files.snapshoted.CVSCommittedFileOperation; import edu.illinois.codingtracker.operations.files.snapshoted.CVSInitiallyCommittedFileOperation; import edu.illinois.codingtracker.operations.files.snapshoted.SVNCommittedFileOperation; import edu.illinois.codingtracker.operations.files.snapshoted.SVNInitiallyCommittedFileOperation; import edu.illinois.codingtracker.operations.junit.TestSessionStartedOperation; import edu.illinois.codingtracker.operations.refactorings.FinishedRefactoringOperation; import edu.illinois.codingtracker.operations.refactorings.NewStartedRefactoringOperation; import edu.illinois.codingtracker.operations.refactorings.NewStartedRefactoringOperation.RefactoringMode; import edu.illinois.codingtracker.operations.refactorings.PerformedRefactoringOperation; import edu.illinois.codingtracker.operations.refactorings.RedoneRefactoringOperation; import edu.illinois.codingtracker.operations.refactorings.RefactoringOperation; import edu.illinois.codingtracker.operations.refactorings.UndoneRefactoringOperation; import edu.illinois.codingtracker.operations.starts.LaunchedApplicationOperation; /** * * @author Mohsen Vakilian * */ public class UserOperationEvent extends Event { @SuppressWarnings("unchecked") private static List<Class<? extends UserOperation>> shouldBeIncludedInCSV= Arrays.asList(TestSessionStartedOperation.class, LaunchedApplicationOperation.class, PerformedRefactoringOperation.class, RedoneRefactoringOperation.class, UndoneRefactoringOperation.class, NewStartedRefactoringOperation.class, FinishedRefactoringOperation.class, CVSCommittedFileOperation.class, CVSInitiallyCommittedFileOperation.class, SVNCommittedFileOperation.class, SVNInitiallyCommittedFileOperation.class, UpdatedFileOperation.class); private UserOperation userOperation; public UserOperationEvent(UserOperation userOperation, String username, String workspaceID, String codingSpectatorVersion) { super(username, workspaceID, codingSpectatorVersion); this.userOperation= userOperation; } @Override public Map<String, String> toMap() { Map<String, String> map= super.toMap(); map.put("codingtracker description", String.valueOf(getDescription())); map.put("timestamp", String.valueOf(getTimestamp())); Date timestampDate= userOperation.getDate(); map.put("human-readable timestamp", timestampDate.toString());; map.put("recorder", "CODINGTRACKER"); if (isNewStartedRefactoringOperation()) { addNewStartedRefactoringInformation(map); } else if (userOperation instanceof FinishedRefactoringOperation) { map.put("success", String.valueOf(((FinishedRefactoringOperation)userOperation).getSuccess())); } else if (isRefactoringOperation()) { addRefactoringOperationInformation(map); } return map; } private boolean isRefactoringOperation() { return userOperation instanceof RefactoringOperation; } private boolean isNewStartedRefactoringOperation() { return userOperation instanceof NewStartedRefactoringOperation; } public boolean isStartedPerformedRefactoringOperation() { return isNewStartedRefactoringOperation() && ((NewStartedRefactoringOperation)userOperation).getRefactoringMode() == RefactoringMode.PERFORM; } private void addNewStartedRefactoringInformation(Map<String, String> map) { NewStartedRefactoringOperation startedRefactoringOperation= (NewStartedRefactoringOperation)userOperation; map.put("refactoring kind", getNewStartedRefactoringKind()); map.put("flags", String.valueOf(startedRefactoringOperation.getFlags())); map.put("id", startedRefactoringOperation.getID()); map.put("project", startedRefactoringOperation.getProject()); } private void addRefactoringOperationInformation(Map<String, String> map) { RefactoringOperation refactoringOperation= (RefactoringOperation)userOperation; map.put("refactoring kind", getRefactoringOperationKind()); map.put("flags", String.valueOf(refactoringOperation.getFlags())); map.put("id", refactoringOperation.getID()); map.put("project", refactoringOperation.getProject()); } private String getNewStartedRefactoringKind() { NewStartedRefactoringOperation startedRefactoringOperation= (NewStartedRefactoringOperation)userOperation; switch (startedRefactoringOperation.getRefactoringMode()) { case PERFORM: return "PERFORMED"; case UNDO: return "UNDONE"; case REDO: return "REDONE"; default: throw new IllegalArgumentException(); } } private String getRefactoringOperationKind() { if (userOperation instanceof PerformedRefactoringOperation) { return "PERFORMED"; } else if (userOperation instanceof UndoneRefactoringOperation) { return "UNDONE"; } else if (userOperation instanceof RedoneRefactoringOperation) { return "REDONE"; } else { throw new IllegalArgumentException(); } } public String getDescription() { return userOperation.getDescription(); } @Override public long getTimestamp() { return userOperation.getTime(); } public boolean shouldBeIncludedInCSV() { return shouldBeIncludedInCSV.contains(userOperation.getClass()); } }