/**
* This file is licensed under the University of Illinois/NCSA Open Source License. See LICENSE.TXT for details.
*/
package edu.illinois.codingtracker.operations.files;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.texteditor.ITextEditor;
import edu.illinois.codingtracker.compare.helpers.EditorHelper;
import edu.illinois.codingtracker.helpers.ResourceHelper;
import edu.illinois.codingtracker.operations.OperationLexer;
import edu.illinois.codingtracker.operations.OperationSymbols;
import edu.illinois.codingtracker.operations.OperationTextChunk;
/**
*
* @author Stas Negara
*
*/
public class EditedUnsychronizedFileOperation extends FileOperation {
private String editorContent;
public EditedUnsychronizedFileOperation() {
super();
}
public EditedUnsychronizedFileOperation(IFile editedFile, String editorContent) {
super(editedFile);
this.editorContent= editorContent;
}
@Override
protected char getOperationSymbol() {
return OperationSymbols.FILE_EDITED_UNSYNCHRONIZED_SYMBOL;
}
@Override
public String getDescription() {
return "Edited unsynchronized file";
}
@Override
protected void populateTextChunk(OperationTextChunk textChunk) {
super.populateTextChunk(textChunk);
textChunk.append(editorContent);
}
@Override
protected void initializeFrom(OperationLexer operationLexer) {
super.initializeFrom(operationLexer);
editorContent= operationLexer.readString();
}
@Override
public void replay() throws CoreException {
ITextEditor fileEditor= EditorHelper.getExistingEditor(resourcePath);
if (fileEditor != null) { //File editor exists
EditorHelper.activateEditor(fileEditor);
IDocument editedDocument= EditorHelper.getEditedDocument(fileEditor);
if (!editorContent.equals(editedDocument.get())) {
throw new RuntimeException("The text of the unsychronized editor is wrong: " + this);
}
} else {
IResource editedFile= ResourceHelper.findWorkspaceMember(resourcePath);
if (editedFile == null || !editedFile.exists()) {
createCompilationUnit(editorContent);
}
fileEditor= EditorHelper.openEditor(resourcePath);
EditorHelper.getEditedDocument(fileEditor).set(editorContent);
}
currentEditor= fileEditor;
}
@Override
public String toString() {
StringBuffer sb= new StringBuffer();
sb.append("Editor content: " + editorContent + "\n");
sb.append(super.toString());
return sb.toString();
}
}