package rtt.ui.handlers.archive; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.swt.widgets.Shell; import rtt.ui.RttPluginUI; import rtt.ui.content.ReloadInfo; import rtt.ui.content.ReloadInfo.Content; import rtt.ui.content.main.ProjectContent; import rtt.ui.handlers.AbstractSelectionHandler; import rtt.ui.model.RttProject; import rtt.ui.utils.Messages; import rtt.ui.utils.RttPreferenceStore; public class CheckArchiveHandler extends AbstractSelectionHandler implements IHandler { private static final String RECREATE_ARCHIVE = "rtt.ui.commands.archive.check.recreate.message"; @Override public Object doExecute(ExecutionEvent event) throws ExecutionException { ProjectContent projectContent = getProjectContent(event); if (projectContent == null) { throw new ExecutionException("Project content was null."); } Shell parent = getParentShell(event); RttProject rttProject = projectContent.getProject(); IFile archiveFile = rttProject.getArchiveFile(); if (archiveFile == null) { IProject project = rttProject.getIProject(); String prefArchiveLocation = RttPreferenceStore.get(project, RttPreferenceStore.PREF_ARCHIVE_PATH, null); if (prefArchiveLocation == null || prefArchiveLocation.equals("")) { try { archiveFile = setRTTArchive(project); } catch (CoreException e) { return new ExecutionException("Could not create archive.", e); } } else { archiveFile = project.getFile(prefArchiveLocation); } } if (!archiveFile.exists() && Messages.openQuestion(parent, RECREATE_ARCHIVE)) { try { rttProject.createArchive(archiveFile); } catch (CoreException e) { throw new ExecutionException("Could not create archive", e); } } RttPluginUI.getProjectDirectory().reload(new ReloadInfo(Content.PROJECT)); RttPluginUI.getProjectManager().setCurrentContent(projectContent, true); return null; } public IFile setRTTArchive(IProject project) throws CoreException { IFile archiveFile = project.getFile("./rtt/archive.zip"); IPath path = archiveFile.getProjectRelativePath(); RttPreferenceStore.put(project, RttPreferenceStore.PREF_ARCHIVE_PATH, path.toPortableString()); return archiveFile; } }