/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingtracker.operations;
import java.util.LinkedList;
import java.util.List;
import edu.illinois.codingtracker.operations.conflicteditors.ClosedConflictEditorOperation;
import edu.illinois.codingtracker.operations.conflicteditors.OpenedConflictEditorOperation;
import edu.illinois.codingtracker.operations.conflicteditors.SavedConflictEditorOperation;
import edu.illinois.codingtracker.operations.files.ClosedFileOperation;
import edu.illinois.codingtracker.operations.files.EditedFileOperation;
import edu.illinois.codingtracker.operations.files.EditedUnsychronizedFileOperation;
import edu.illinois.codingtracker.operations.files.RefactoredSavedFileOperation;
import edu.illinois.codingtracker.operations.files.SavedFileOperation;
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.NewFileOperation;
import edu.illinois.codingtracker.operations.files.snapshoted.RefreshedFileOperation;
import edu.illinois.codingtracker.operations.files.snapshoted.SVNCommittedFileOperation;
import edu.illinois.codingtracker.operations.files.snapshoted.SVNInitiallyCommittedFileOperation;
import edu.illinois.codingtracker.operations.junit.TestCaseFinishedOperation;
import edu.illinois.codingtracker.operations.junit.TestCaseStartedOperation;
import edu.illinois.codingtracker.operations.junit.TestSessionFinishedOperation;
import edu.illinois.codingtracker.operations.junit.TestSessionLaunchedOperation;
import edu.illinois.codingtracker.operations.junit.TestSessionStartedOperation;
import edu.illinois.codingtracker.operations.options.ProjectOptionsChangedOperation;
import edu.illinois.codingtracker.operations.options.WorkspaceOptionsChangedOperation;
import edu.illinois.codingtracker.operations.refactorings.FinishedRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.NewStartedRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.PerformedRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.RedoneRefactoringOperation;
import edu.illinois.codingtracker.operations.refactorings.UndoneRefactoringOperation;
import edu.illinois.codingtracker.operations.references.ReferencingProjectsChangedOperation;
import edu.illinois.codingtracker.operations.resources.CopiedResourceOperation;
import edu.illinois.codingtracker.operations.resources.CreatedResourceOperation;
import edu.illinois.codingtracker.operations.resources.DeletedResourceOperation;
import edu.illinois.codingtracker.operations.resources.ExternallyModifiedResourceOperation;
import edu.illinois.codingtracker.operations.resources.MovedResourceOperation;
import edu.illinois.codingtracker.operations.starts.LaunchedApplicationOperation;
import edu.illinois.codingtracker.operations.starts.StartedEclipseOperation;
import edu.illinois.codingtracker.operations.starts.StartedRefactoringOperation;
import edu.illinois.codingtracker.operations.textchanges.PerformedConflictEditorTextChangeOperation;
import edu.illinois.codingtracker.operations.textchanges.PerformedTextChangeOperation;
import edu.illinois.codingtracker.operations.textchanges.RedoneConflictEditorTextChangeOperation;
import edu.illinois.codingtracker.operations.textchanges.RedoneTextChangeOperation;
import edu.illinois.codingtracker.operations.textchanges.UndoneConflictEditorTextChangeOperation;
import edu.illinois.codingtracker.operations.textchanges.UndoneTextChangeOperation;
//TODO: Decide on where this class should be and how it should be used
/**
*
* @author Stas Negara
*
*/
public class OperationDeserializer {
public static List<UserOperation> getUserOperations(String operationsRecord) {
List<UserOperation> userOperations= new LinkedList<UserOperation>();
OperationLexer operationLexer= new OperationLexer(operationsRecord);
while (operationLexer.hasNextOperation()) {
operationLexer.startNewOperation();
UserOperation userOperation= createEmptyUserOperation(operationLexer.getCurrentOperationSymbol());
userOperation.deserialize(operationLexer);
userOperations.add(userOperation);
}
return userOperations;
}
private static UserOperation createEmptyUserOperation(char operationSymbol) {
UserOperation userOperation;
switch (operationSymbol) {
case OperationSymbols.ECLIPSE_STARTED_SYMBOL:
userOperation= new StartedEclipseOperation();
break;
case OperationSymbols.REFACTORING_FINISHED_SYMBOL:
userOperation= new FinishedRefactoringOperation();
break;
case OperationSymbols.NEW_REFACTORING_STARTED_SYMBOL:
userOperation= new NewStartedRefactoringOperation();
break;
case OperationSymbols.REFACTORING_STARTED_SYMBOL:
userOperation= new StartedRefactoringOperation();
break;
case OperationSymbols.REFACTORING_PERFORMED_SYMBOL:
userOperation= new PerformedRefactoringOperation();
break;
case OperationSymbols.REFACTORING_UNDONE_SYMBOL:
userOperation= new UndoneRefactoringOperation();
break;
case OperationSymbols.REFACTORING_REDONE_SYMBOL:
userOperation= new RedoneRefactoringOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_OPENED_SYMBOL:
userOperation= new OpenedConflictEditorOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_CLOSED_SYMBOL:
userOperation= new ClosedConflictEditorOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_SAVED_SYMBOL:
userOperation= new SavedConflictEditorOperation();
break;
case OperationSymbols.RESOURCE_CREATED_SYMBOL:
userOperation= new CreatedResourceOperation();
break;
case OperationSymbols.RESOURCE_MOVED_SYMBOL:
userOperation= new MovedResourceOperation();
break;
case OperationSymbols.RESOURCE_COPIED_SYMBOL:
userOperation= new CopiedResourceOperation();
break;
case OperationSymbols.RESOURCE_DELETED_SYMBOL:
userOperation= new DeletedResourceOperation();
break;
case OperationSymbols.FILE_CLOSED_SYMBOL:
userOperation= new ClosedFileOperation();
break;
case OperationSymbols.FILE_SAVED_SYMBOL:
userOperation= new SavedFileOperation();
break;
case OperationSymbols.RESOURCE_EXTERNALLY_MODIFIED_SYMBOL:
userOperation= new ExternallyModifiedResourceOperation();
break;
case OperationSymbols.FILE_UPDATED_SYMBOL:
userOperation= new UpdatedFileOperation();
break;
case OperationSymbols.FILE_SVN_INITIALLY_COMMITTED_SYMBOL:
userOperation= new SVNInitiallyCommittedFileOperation();
break;
case OperationSymbols.FILE_CVS_INITIALLY_COMMITTED_SYMBOL:
userOperation= new CVSInitiallyCommittedFileOperation();
break;
case OperationSymbols.FILE_SVN_COMMITTED_SYMBOL:
userOperation= new SVNCommittedFileOperation();
break;
case OperationSymbols.FILE_CVS_COMMITTED_SYMBOL:
userOperation= new CVSCommittedFileOperation();
break;
case OperationSymbols.FILE_REFACTORED_SAVED_SYMBOL:
userOperation= new RefactoredSavedFileOperation();
break;
case OperationSymbols.FILE_NEW_SYMBOL:
userOperation= new NewFileOperation();
break;
case OperationSymbols.FILE_REFRESHED_SYMBOL:
userOperation= new RefreshedFileOperation();
break;
case OperationSymbols.FILE_EDITED_SYMBOL:
userOperation= new EditedFileOperation();
break;
case OperationSymbols.FILE_EDITED_UNSYNCHRONIZED_SYMBOL:
userOperation= new EditedUnsychronizedFileOperation();
break;
case OperationSymbols.TEXT_CHANGE_PERFORMED_SYMBOL:
userOperation= new PerformedTextChangeOperation();
break;
case OperationSymbols.TEXT_CHANGE_UNDONE_SYMBOL:
userOperation= new UndoneTextChangeOperation();
break;
case OperationSymbols.TEXT_CHANGE_REDONE_SYMBOL:
userOperation= new RedoneTextChangeOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_TEXT_CHANGE_PERFORMED_SYMBOL:
userOperation= new PerformedConflictEditorTextChangeOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_TEXT_CHANGE_UNDONE_SYMBOL:
userOperation= new UndoneConflictEditorTextChangeOperation();
break;
case OperationSymbols.CONFLICT_EDITOR_TEXT_CHANGE_REDONE_SYMBOL:
userOperation= new RedoneConflictEditorTextChangeOperation();
break;
case OperationSymbols.TEST_SESSION_LAUNCHED_SYMBOL:
userOperation= new TestSessionLaunchedOperation();
break;
case OperationSymbols.TEST_SESSION_STARTED_SYMBOL:
userOperation= new TestSessionStartedOperation();
break;
case OperationSymbols.TEST_SESSION_FINISHED_SYMBOL:
userOperation= new TestSessionFinishedOperation();
break;
case OperationSymbols.TEST_CASE_STARTED_SYMBOL:
userOperation= new TestCaseStartedOperation();
break;
case OperationSymbols.TEST_CASE_FINISHED_SYMBOL:
userOperation= new TestCaseFinishedOperation();
break;
case OperationSymbols.APPLICATION_LAUNCHED_SYMBOL:
userOperation= new LaunchedApplicationOperation();
break;
case OperationSymbols.WORKSPACE_OPTIONS_CHANGED_SYMBOL:
userOperation= new WorkspaceOptionsChangedOperation();
break;
case OperationSymbols.PROJECT_OPTIONS_CHANGED_SYMBOL:
userOperation= new ProjectOptionsChangedOperation();
break;
case OperationSymbols.REFERENCING_PROJECTS_CHANGED_SYMBOL:
userOperation= new ReferencingProjectsChangedOperation();
break;
default:
throw new RuntimeException("Unsupported operation symbol: " + operationSymbol);
}
return userOperation;
}
}