package LinGUIne.handlers;
import java.io.IOException;
import javax.inject.Inject;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import LinGUIne.model.IProjectData;
import LinGUIne.model.Project;
import LinGUIne.model.ProjectManager;
import LinGUIne.model.Result;
/**
* Removes a file from some Project in the ProjectExplorer after prompting the
* user for confirmation.
*
* @author Kyle Mullins
*/
public class RemoveProjectDataHandler {
private static final String TARGET_DATA_PARAM = "linguine.command."
+ "removeProjectData.parameter.targetProjectData";
private static final String PARENT_PROJECT_PARAM = "linguine.command."
+ "removeProjectData.parameter.parentProject";
@Inject
private ProjectManager projectMan;
@Execute
public void execute(@Named(TARGET_DATA_PARAM) String targetProjectData,
@Named(PARENT_PROJECT_PARAM) String parentProject,
@Named(IServiceConstants.ACTIVE_SHELL) Shell shell) {
Project project = projectMan.getProject(parentProject);
if(project != null){
IProjectData projData = project.getProjectData(targetProjectData);
if(projData != null){
ConfirmWithOptionDialog dialog = new ConfirmWithOptionDialog(shell,
"Remove File",
"Are you sure you want to remove the File?\n" +
"This may invalidate Results generated using this File.",
"Delete File contents on disk (cannot be undone).");
boolean confirmed = dialog.open() == Window.OK;
if(confirmed){
try {
if(projData instanceof Result){
project.removeResult((Result)projData);
}
else{
project.removeProjectData(projData);
}
if(dialog.wasOptionChosen()){
projData.deleteContentsOnDisk();
}
}
catch(IOException e){
MessageDialog.openError(shell, "Error",
"Could not delete File contents on disk.");
}
}
}
}
}
}