/** * This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details. */ package edu.illinois.codingtracker.operations.files.snapshoted; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import edu.illinois.codingtracker.helpers.Configuration; import edu.illinois.codingtracker.helpers.ResourceHelper; import edu.illinois.codingtracker.operations.OperationLexer; import edu.illinois.codingtracker.operations.OperationTextChunk; /** * * @author Stas Negara * */ public abstract class CommittedFileOperation extends SnapshotedFileOperation { private String revision; private String committedRevision; public CommittedFileOperation() { super(); } public CommittedFileOperation(IFile committedFile, String revision, String committedRevision) { super(committedFile); this.revision= revision; this.committedRevision= committedRevision; } @Override protected void populateTextChunk(OperationTextChunk textChunk) { super.populateTextChunk(textChunk); textChunk.append(revision); textChunk.append(committedRevision); } @Override protected void initializeFrom(OperationLexer operationLexer) { super.initializeFrom(operationLexer); if (!Configuration.isOldFormat) { revision= operationLexer.readString(); committedRevision= operationLexer.readString(); } else { revision= ""; committedRevision= ""; } } @Override public void replay() throws CoreException { IResource workspaceResource= ResourceHelper.findWorkspaceMember(resourcePath); if (workspaceResource != null && !externallyModifiedResources.contains(resourcePath)) { //Match against the existing file. if (!fileContent.equals(ResourceHelper.readFileContent((IFile)workspaceResource))) { throw new RuntimeException("The snapshot file does not match the existing file: " + resourcePath); } } else { //If there is no existing file or it was externally modified, create the snapshoted compilation unit. super.replay(); } } @Override public boolean isTestReplayRecorded() { return false; } @Override public String toString() { StringBuffer sb= new StringBuffer(); sb.append("Revision " + revision + "\n"); sb.append("Committed revision " + committedRevision + "\n"); sb.append(super.toString()); return sb.toString(); } }