diff options
author | relves | 2009-02-09 23:17:42 +0000 |
---|---|---|
committer | relves | 2009-02-09 23:17:42 +0000 |
commit | 01aec0cb9adc992f8d5c8970296b641d1aacea1b (patch) | |
tree | 864b5c6d89d46587514ed453bb34026324b2164b /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal | |
parent | 1e928bfa6436ac95f62e882a199fad7d2f87e131 (diff) | |
download | org.eclipse.mylyn.tasks-01aec0cb9adc992f8d5c8970296b641d1aacea1b.tar.gz org.eclipse.mylyn.tasks-01aec0cb9adc992f8d5c8970296b641d1aacea1b.tar.xz org.eclipse.mylyn.tasks-01aec0cb9adc992f8d5c8970296b641d1aacea1b.zip |
NEW - bug 248364: improve import/export functionality
https://bugs.eclipse.org/bugs/show_bug.cgi?id=248364
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal')
9 files changed, 192 insertions, 409 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java index abd6f3c59..ba067612e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListBackupManager.java @@ -17,7 +17,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import java.util.HashSet; import java.util.Locale; import java.util.SortedMap; import java.util.Timer; @@ -36,10 +35,10 @@ import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.TaskActivityUtil; import org.eclipse.mylyn.internal.tasks.ui.util.TaskDataExportOperation; +import org.eclipse.mylyn.internal.tasks.ui.util.TaskDataSnapshotOperation; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IProgressService; @@ -112,8 +111,8 @@ public class TaskListBackupManager implements IPropertyChangeListener { } else { - final TaskDataExportOperation backupJob = new TaskDataExportOperation(backupFolderPath, true, true, false, - true, getBackupFileName(), new HashSet<AbstractTask>()); + final TaskDataExportOperation backupJob = new TaskDataSnapshotOperation(backupFolderPath, + getBackupFileName()); IProgressService service = PlatformUI.getWorkbench().getProgressService(); try { @@ -252,8 +251,8 @@ public class TaskListBackupManager implements IPropertyChangeListener { public ExportJob(String destination, String filename) { super(Messages.TaskListBackupManager_Scheduled_task_data_backup); - backupJob = new TaskDataExportOperation(destination, true, true, false, true, filename, - new HashSet<AbstractTask>()); + backupJob = new TaskDataSnapshotOperation(destination, filename); + } @Override diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportOperation.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportOperation.java index 44d40b083..68e607069 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportOperation.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataExportOperation.java @@ -12,40 +12,26 @@ package org.eclipse.mylyn.internal.tasks.ui.util; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Pattern; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.mylyn.commons.core.StatusHandler; -import org.eclipse.mylyn.context.core.ContextCore; +import org.eclipse.mylyn.commons.net.Policy; import org.eclipse.mylyn.internal.commons.core.ZipFileUtil; -import org.eclipse.mylyn.internal.context.core.ContextCorePlugin; -import org.eclipse.mylyn.internal.context.core.InteractionContextManager; -import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; -import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; -import org.eclipse.mylyn.tasks.core.ITask; /** - * Job that performs exporting (copying or zipping) of the Task List data Assumes that check with user for overwrite - * already done. Overwrites destination if exists! + * Zips task data up to specified directly and filename. * * @author Wesley Coelho * @author Mik Kersten @@ -58,244 +44,74 @@ public class TaskDataExportOperation implements IRunnableWithProgress { private static final String EXPORT_JOB_LABEL = Messages.TaskDataExportOperation_exporting_task_data; - private final boolean zip; + private static final Pattern excludeHidden = Pattern.compile("^\\."); //$NON-NLS-1$ - private final boolean exportTaskList; - - private final boolean exportActivationHistory; - - private final boolean exportTaskContexts; + private static final Pattern excludeBackup = Pattern.compile("backup\\z"); //$NON-NLS-1$ private final String destinationDirectory; - private final String zipFileName; - - private File destZipFile = null; - - private final Collection<AbstractTask> tasks; - - private boolean exportAll = false; - - // List of files to add to the zip archive - private final List<File> filesToZip = new ArrayList<File>(); - - // Map of file paths used to avoid duplicates - private final Map<String, String> filesToZipMap = new HashMap<String, String>(); + private final String destinationFilename; - /** export all data */ - public TaskDataExportOperation(String destinationDirectory, boolean zipIt, String zipFileName) { - this.zipFileName = zipFileName; - this.zip = zipIt; + public TaskDataExportOperation(String destinationDirectory, String destinationFilename) { + this.destinationFilename = destinationFilename; this.destinationDirectory = destinationDirectory; - this.tasks = Collections.emptySet(); - this.exportActivationHistory = true; - this.exportTaskContexts = true; - this.exportTaskList = true; - this.exportAll = true; - } - - /** export specified data */ - public TaskDataExportOperation(String destinationDirectory, boolean exportTaskList, - boolean exportActivationHistory, boolean exportTaskContexts, boolean zipIt, String zipFileName, - Collection<AbstractTask> taskContextsToExport) { - this.zipFileName = zipFileName; - this.zip = zipIt; - this.exportTaskList = exportTaskList; - this.exportActivationHistory = exportActivationHistory; - this.exportTaskContexts = exportTaskContexts; - this.destinationDirectory = destinationDirectory; - this.tasks = taskContextsToExport; } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - if (monitor == null) { - monitor = new NullProgressMonitor(); - } + monitor = Policy.monitorFor(monitor); + Set<File> filesToExport = new HashSet<File>(); - int totalWork = filesToZip.size(); - if (totalWork == 0) { - totalWork = IProgressMonitor.UNKNOWN; - } - monitor.beginTask(EXPORT_JOB_LABEL, totalWork + 1); + selectFiles(filesToExport); - Job.getJobManager().beginRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE, new SubProgressMonitor(monitor, 1)); - if (exportAll) { - exportAll(); - } else { - exportChosen(); - } + if (filesToExport.size() > 0) { + try { + monitor.beginTask(EXPORT_JOB_LABEL, filesToExport.size() + 1); + + Job.getJobManager().beginRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE, + new SubProgressMonitor(monitor, 1)); + File destZipFile = new File(destinationDirectory + File.separator + destinationFilename); - if (zip && filesToZip.size() > 0) { - try { - destZipFile = new File(destinationDirectory + File.separator + zipFileName); - if (destZipFile.exists()) { - destZipFile.delete(); - } - ZipFileUtil.createZipFile(destZipFile, filesToZip, TasksUiPlugin.getDefault().getDataDirectory(), - monitor); - } catch (Exception e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not create zip file", //$NON-NLS-1$ - e)); + //TODO: append a (2) to the file? + if (destZipFile.exists()) { + destZipFile.delete(); } + + ZipFileUtil.createZipFile(destZipFile, new ArrayList<File>(filesToExport), TasksUiPlugin.getDefault() + .getDataDirectory(), monitor); + } catch (Exception e) { + StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not perform export", //$NON-NLS-1$ + e)); + } finally { + + Job.getJobManager().endRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE); + monitor.done(); } - } finally { - Job.getJobManager().endRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE); - monitor.done(); } } - private void exportAll() { + protected void selectFiles(Set<File> filesToExport) { + Set<Pattern> exclusionPatterns = new HashSet<Pattern>(); + exclusionPatterns.add(excludeHidden); + exclusionPatterns.add(excludeBackup); String dataRoot = TasksUiPlugin.getDefault().getDataDirectory(); File dataFolder = new File(dataRoot); - // add all files in dataRoot for (File file : dataFolder.listFiles()) { - filesToZip.add(file); - } - } - - private void exportChosen() { - int jobSize = 1; // 1 for repositories.xml - if (exportTaskList) { - jobSize++; - } - if (exportActivationHistory) { - jobSize++; - } - if (exportTaskContexts) { - jobSize += tasks.size(); - } - - String sourceContextsPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + ITasksCoreConstants.CONTEXTS_DIRECTORY; - File contextsDirectory = new File(sourceContextsPath); - - // Task Repositories data file - String sourceRepositoriesPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE; - File sourceRepositoriesFile = new File(sourceRepositoriesPath); - if (sourceRepositoriesFile.exists()) { - File destRepositoriesFile = new File(destinationDirectory + File.separator - + TaskRepositoryManager.DEFAULT_REPOSITORIES_FILE); - - if (zip) { - filesToZip.add(sourceRepositoriesFile); - } else if (!destRepositoriesFile.equals(sourceRepositoriesFile)) { - if (destRepositoriesFile.exists()) { - destRepositoriesFile.delete(); - } - if (!copy(sourceRepositoriesFile, destRepositoriesFile)) { - StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not export repositories file", new Exception())); //$NON-NLS-1$ + boolean exclude = false; + for (Pattern pattern : exclusionPatterns) { + if (pattern.matcher(file.getName()).find()) { + exclude = true; + break; } } - } - - if (exportTaskList) { - String sourceTaskListPath = TasksUiPlugin.getDefault().getDataDirectory() + File.separator - + ITasksCoreConstants.DEFAULT_TASK_LIST_FILE; - File sourceTaskListFile = new File(sourceTaskListPath); - if (sourceTaskListFile.exists()) { - File destTaskListFile = new File(destinationDirectory + File.separator - + ITasksCoreConstants.DEFAULT_TASK_LIST_FILE); - - if (zip) { - filesToZip.add(sourceTaskListFile); - } else if (!destTaskListFile.equals(sourceTaskListFile)) { - if (destTaskListFile.exists()) { - destTaskListFile.delete(); - } - if (!copy(sourceTaskListFile, destTaskListFile)) { - StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not export task list file", new Exception())); //$NON-NLS-1$ - } - } - } - - } - - if (exportActivationHistory) { - try { - File sourceActivationHistoryFile = new File(contextsDirectory, - InteractionContextManager.CONTEXT_HISTORY_FILE_NAME - + InteractionContextManager.CONTEXT_FILE_EXTENSION); - - if (sourceActivationHistoryFile.exists()) { - - File destActivationHistoryFile = new File(destinationDirectory + File.separator - + InteractionContextManager.CONTEXT_HISTORY_FILE_NAME - + InteractionContextManager.CONTEXT_FILE_EXTENSION); - - if (zip) { - filesToZip.add(sourceActivationHistoryFile); - } else if (!destActivationHistoryFile.equals(sourceActivationHistoryFile)) { - if (destActivationHistoryFile.exists()) { - destActivationHistoryFile.delete(); - } - copy(sourceActivationHistoryFile, destActivationHistoryFile); - } - } - } catch (RuntimeException e) { - // FIXME what is caught here? - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not export activity history context file", e)); //$NON-NLS-1$ + if (!exclude) { + filesToExport.add(file); } } - if (exportTaskContexts) { - // Prevent many repeated error messages - boolean errorDisplayed = false; - for (ITask task : tasks) { - - if (!ContextCore.getContextManager().hasContext(task.getHandleIdentifier())) { - continue; // Tasks without a context have no file to - // copy - } - - File sourceTaskContextFile = ContextCorePlugin.getContextStore().getFileForContext( - task.getHandleIdentifier()); - - File destTaskFile = new File(destinationDirectory + File.separator + sourceTaskContextFile.getName()); - - if (zip) { - if (!filesToZipMap.containsKey(task.getHandleIdentifier())) { - filesToZip.add(sourceTaskContextFile); - filesToZipMap.put(task.getHandleIdentifier(), null); - } - } else if (!sourceTaskContextFile.equals(destTaskFile)) { - if (destTaskFile.exists()) { - destTaskFile.delete(); - } - if (!copy(sourceTaskContextFile, destTaskFile) && !errorDisplayed) { - Exception e = new Exception("Export Exception: " + sourceTaskContextFile.getPath() + " -> " //$NON-NLS-1$ //$NON-NLS-2$ - + destTaskFile.getPath()); - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not export one or more task context files", e)); //$NON-NLS-1$ - errorDisplayed = true; - } - } - } - } } - private boolean copy(File src, File dst) { - try { - InputStream in = new FileInputStream(src); - OutputStream out = new FileOutputStream(dst); - - // Transfer bytes from in to out - byte[] buf = new byte[1024]; - int len; - while ((len = in.read(buf)) > 0) { - out.write(buf, 0, len); - } - in.close(); - out.close(); - return true; - } catch (IOException ioe) { - return false; - } + protected File getSourceFolder() { + return new File(TasksUiPlugin.getDefault().getDataDirectory()); } - } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataSnapshotOperation.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataSnapshotOperation.java new file mode 100644 index 000000000..227fc6072 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TaskDataSnapshotOperation.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 Tasktop Technologies and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.tasks.ui.util; + +import java.io.File; +import java.util.Set; + +/** + * @author Robert Elves + */ +public class TaskDataSnapshotOperation extends TaskDataExportOperation { + + public TaskDataSnapshotOperation(String destinationDirectory, String destinationFilename) { + super(destinationDirectory, destinationFilename); + } + + @Override + protected void selectFiles(Set<File> filesToExport) { + + filesToExport.add(new File(getSourceFolder(), "tasks.xml.zip")); //$NON-NLS-1$ + filesToExport.add(new File(getSourceFolder(), "repositories.xml.zip")); //$NON-NLS-1$ + filesToExport.add(new File(getSourceFolder(), "contexts/activity.xml.zip")); //$NON-NLS-1$ + } + +} diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java index af0998d15..6399d23d5 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/Messages.java @@ -99,6 +99,8 @@ public class Messages extends NLS { public static String TaskDataExportWizard_Export; + public static String TaskDataExportWizard_export_failed; + public static String TaskDataExportWizard_Task_context_files_already_exist_in_X; public static String TaskDataExportWizard_The_task_activation_history_file_X_already_exists; @@ -153,6 +155,8 @@ public class Messages extends NLS { public static String TaskDataImportWizard_Overwrite_existing_file_; + public static String TaskDataImportWizard_task_data_import_failed; + public static String TaskDataImportWizardPage_Restore_tasks_from_history; public static String TaskDataImportWizardPage_Browse_; diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java index c8eafc3c9..a0284d17a 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizard.java @@ -19,10 +19,10 @@ import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; -import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.ui.TaskListBackupManager; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.util.TaskDataExportOperation; +import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; @@ -53,7 +53,7 @@ public class TaskDataExportWizard extends Wizard implements IExportWizard { /** * Finds or creates a dialog settings section that is used to make the dialog control settings persistent */ - public IDialogSettings getSettingsSection(IDialogSettings master) { + private IDialogSettings getSettingsSection(IDialogSettings master) { IDialogSettings settings = master.getSection(SETTINGS_SECTION); if (settings == null) { settings = master.addNewSection(SETTINGS_SECTION); @@ -64,7 +64,6 @@ public class TaskDataExportWizard extends Wizard implements IExportWizard { @Override public void addPages() { exportPage = new TaskDataExportWizardPage(); - exportPage.setWizard(this); addPage(exportPage); } @@ -72,11 +71,6 @@ public class TaskDataExportWizard extends Wizard implements IExportWizard { // no initialization needed } - @Override - public boolean canFinish() { - return exportPage.isPageComplete(); - } - /** * Called when the user clicks finish. Saves the task data. Waits until all overwrite decisions have been made * before starting to save files. If any overwrite is canceled, no files are saved and the user must adjust the @@ -88,7 +82,7 @@ public class TaskDataExportWizard extends Wizard implements IExportWizard { final File destZipFile = new File(destDir + File.separator + TaskListBackupManager.getBackupFileName()); - TaskDataExportOperation job = new TaskDataExportOperation(exportPage.getDestinationDirectory(), true, + TaskDataExportOperation job = new TaskDataExportOperation(exportPage.getDestinationDirectory(), destZipFile.getName()); try { @@ -99,9 +93,10 @@ public class TaskDataExportWizard extends Wizard implements IExportWizard { service.run(true, true, job); } } catch (InvocationTargetException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not export files", e)); //$NON-NLS-1$ + Status status = new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e); + TasksUiInternal.logAndDisplayStatus(Messages.TaskDataExportWizard_export_failed, status); } catch (InterruptedException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not export files", e)); //$NON-NLS-1$ + // user canceled } exportPage.saveSettings(); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java index e747fe38c..04cf7e4f8 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataExportWizardPage.java @@ -12,11 +12,9 @@ package org.eclipse.mylyn.internal.tasks.ui.wizards; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.ui.TaskListBackupManager; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.swt.SWT; @@ -24,7 +22,6 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -39,9 +36,12 @@ import org.eclipse.ui.plugin.AbstractUIPlugin; * * @author Wesley Coelho * @author Mik Kersten + * @author Rob Elves */ public class TaskDataExportWizardPage extends WizardPage { + private static final String PAGE_ID = "org.eclipse.mylyn.tasklist.exportPage"; //$NON-NLS-1$ + private Button browseButton = null; private Text destDirText = null; @@ -52,36 +52,27 @@ public class TaskDataExportWizardPage extends WizardPage { private final static String DEST_DIR_SETTING = "Destination directory setting"; //$NON-NLS-1$ public TaskDataExportWizardPage() { - super( - "org.eclipse.mylyn.tasklist.exportPage", Messages.TaskDataExportWizardPage_Export_Mylyn_Task_Data, AbstractUIPlugin.imageDescriptorFromPlugin( //$NON-NLS-1$ - TasksUiPlugin.ID_PLUGIN, "icons/wizban/banner-export.gif")); //$NON-NLS-1$ + super(PAGE_ID); setPageComplete(false); - } - - @Override - public String getName() { - return Messages.TaskDataExportWizardPage_Export_Mylyn_Task_Data; + setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(TasksUiPlugin.ID_PLUGIN, + "icons/wizban/banner-export.gif")); //$NON-NLS-1$ + setTitle(Messages.TaskDataExportWizardPage_Export_Mylyn_Task_Data); } /** * Create the widgets on the page */ public void createControl(Composite parent) { - try { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(1, false); - container.setLayout(layout); - createExportDirectoryControl(container); - - initSettings(); - - Dialog.applyDialogFont(container); - setControl(container); - setPageComplete(validate()); - } catch (RuntimeException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - "Could not create export wizard page", e)); //$NON-NLS-1$ - } + Composite container = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(1, false); + container.setLayout(layout); + createExportDirectoryControl(container); + + initSettings(); + + Dialog.applyDialogFont(container); + setControl(container); + setPageComplete(validate()); } /** @@ -118,11 +109,11 @@ public class TaskDataExportWizardPage extends WizardPage { String dir = destDirText.getText(); dialog.setFilterPath(dir); dir = dialog.open(); - controlChanged(); if (dir == null || dir.equals("")) { //$NON-NLS-1$ return; } destDirText.setText(dir); + controlChanged(); } }); } @@ -152,25 +143,6 @@ public class TaskDataExportWizardPage extends WizardPage { settings.put(SETTINGS_SAVED, SETTINGS_SAVED); } - /** Convenience method for creating a new checkbox */ - protected Button createCheckBox(Composite parent, String text) { - Button newButton = new Button(parent, SWT.CHECK); - newButton.setText(text); - - newButton.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - controlChanged(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // No action required - } - }); - - return newButton; - } - /** Called to indicate that a control's value has changed */ public void controlChanged() { setPageComplete(validate()); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java index 7ea9c95df..a0273939d 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizard.java @@ -13,7 +13,6 @@ package org.eclipse.mylyn.internal.tasks.ui.wizards; import java.io.File; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; @@ -29,21 +28,21 @@ import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.mylyn.commons.core.CoreUtil; -import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.commons.core.ZipFileUtil; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonsUiUtil; +import org.eclipse.mylyn.internal.provisional.commons.ui.ICoreRunnable; import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants; import org.eclipse.mylyn.internal.tasks.core.externalization.AbstractExternalizationParticipant; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal; import org.eclipse.mylyn.tasks.ui.TasksUi; +import org.eclipse.osgi.util.NLS; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.progress.IProgressService; /** * @author Rob Elves @@ -63,7 +62,7 @@ public class TaskDataImportWizard extends Wizard implements IImportWizard { /** * Finds or creates a dialog settings section that is used to make the dialog control settings persistent */ - public IDialogSettings getSettingsSection(IDialogSettings master) { + private IDialogSettings getSettingsSection(IDialogSettings master) { IDialogSettings settings = master.getSection("org.eclipse.mylyn.tasklist.ui.importWizard"); //$NON-NLS-1$ if (settings == null) { settings = master.addNewSection("org.eclipse.mylyn.tasklist.ui.importWizard"); //$NON-NLS-1$ @@ -93,7 +92,7 @@ public class TaskDataImportWizard extends Wizard implements IImportWizard { TasksUi.getTaskActivityManager().deactivateTask(TasksUi.getTaskActivityManager().getActiveTask()); String sourceZip = importPage.getSourceZipFile(); - File sourceZipFile = new File(sourceZip); + final File sourceZipFile = new File(sourceZip); if (!sourceZipFile.exists()) { MessageDialog.openError(getShell(), Messages.TaskDataImportWizard_File_not_found, sourceZipFile.toString() @@ -105,51 +104,31 @@ public class TaskDataImportWizard extends Wizard implements IImportWizard { return false; } - Enumeration<? extends ZipEntry> entries; - ZipFile zipFile; - boolean restoreM2Tasklist = false; - int numEntries = 0; - - try { - zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); - entries = zipFile.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - if (entry.getName().startsWith(ITasksCoreConstants.OLD_TASK_LIST_FILE)) { - restoreM2Tasklist = true; - } - numEntries++; - } - } catch (IOException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not import files", e)); //$NON-NLS-1$ - return false; - } - - FileCopyJob job = new FileCopyJob(sourceZipFile, numEntries); - job.setRestoreM2Tasklist(restoreM2Tasklist); try { if (getContainer() != null) { - getContainer().run(true, true, job); + CommonsUiUtil.run(getContainer(), new FileCopyJob(sourceZipFile)); } else { - IProgressService service = PlatformUI.getWorkbench().getProgressService(); - service.run(true, true, job); + CommonsUiUtil.busyCursorWhile(new FileCopyJob(sourceZipFile)); } - } catch (InvocationTargetException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, "Could not import files", e)); //$NON-NLS-1$ - } catch (InterruptedException e) { - // User canceled + + importPage.saveSettings(); + } catch (CoreException e) { + Status status = new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, NLS.bind( + "Problems encountered importing task data: {0}", e.getMessage()), e); //$NON-NLS-1$ + TasksUiInternal.logAndDisplayStatus(Messages.TaskDataImportWizard_task_data_import_failed, status); + } catch (OperationCanceledException e) { + // canceled } - importPage.saveSettings(); return true; } /** Job that performs the file copying and zipping */ - class FileCopyJob implements IRunnableWithProgress { + class FileCopyJob implements ICoreRunnable { private static final String PREFIX_BACKUP = ".backup-"; //$NON-NLS-1$ - private/*static*/final String JOB_LABEL = Messages.TaskDataImportWizard_Importing_Data; + private final String JOB_LABEL = Messages.TaskDataImportWizard_Importing_Data; private File sourceZipFile = null; @@ -157,63 +136,75 @@ public class TaskDataImportWizard extends Wizard implements IImportWizard { private boolean restoreM2Tasklist = false; - public FileCopyJob(File sourceZipFile, int numEntries) { + public FileCopyJob(File sourceZipFile) { this.sourceZipFile = sourceZipFile; - this.numEntries = numEntries; } - public void run(final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { + public void run(final IProgressMonitor monitor) throws CoreException { - // always a zip source since post 1.0.1 try { - monitor.beginTask(JOB_LABEL, numEntries); - Job.getJobManager().beginRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE, monitor); - if (!sourceZipFile.exists()) { - throw new InvocationTargetException(new IOException("Source file does not exist.")); //$NON-NLS-1$ - } + checkZipFile(); - if (monitor.isCanceled()) { - throw new OperationCanceledException(); - } + if (numEntries > 0) { + + monitor.beginTask(JOB_LABEL, numEntries); + Job.getJobManager().beginRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE, monitor); - ZipFileUtil.unzipFiles(sourceZipFile, TasksUiPlugin.getDefault().getDataDirectory(), monitor); + if (monitor.isCanceled()) { + return; + } - if (restoreM2Tasklist) { + ZipFileUtil.unzipFiles(sourceZipFile, TasksUiPlugin.getDefault().getDataDirectory(), monitor); - SimpleDateFormat format = new SimpleDateFormat(ITasksCoreConstants.FILENAME_TIMESTAMP_FORMAT, - Locale.ENGLISH); - String date = format.format(new Date()); + if (restoreM2Tasklist) { - File taskListFile = new File(TasksUiPlugin.getDefault().getDataDirectory(), - ITasksCoreConstants.DEFAULT_TASK_LIST_FILE); - if (taskListFile.exists()) { - taskListFile.renameTo(new File(taskListFile.getParentFile(), taskListFile.getName() - + PREFIX_BACKUP + date)); - } + SimpleDateFormat format = new SimpleDateFormat(ITasksCoreConstants.FILENAME_TIMESTAMP_FORMAT, + Locale.ENGLISH); + String date = format.format(new Date()); - File taskListFileSnapshot = new File(TasksUiPlugin.getDefault().getDataDirectory(), - AbstractExternalizationParticipant.SNAPSHOT_PREFIX - + ITasksCoreConstants.DEFAULT_TASK_LIST_FILE); - if (taskListFileSnapshot.exists()) { - taskListFileSnapshot.renameTo(new File(taskListFile.getParentFile(), - taskListFileSnapshot.getName() + PREFIX_BACKUP + date)); - } + File taskListFile = new File(TasksUiPlugin.getDefault().getDataDirectory(), + ITasksCoreConstants.DEFAULT_TASK_LIST_FILE); + if (taskListFile.exists()) { + taskListFile.renameTo(new File(taskListFile.getParentFile(), taskListFile.getName() + + PREFIX_BACKUP + date)); + } + File taskListFileSnapshot = new File(TasksUiPlugin.getDefault().getDataDirectory(), + AbstractExternalizationParticipant.SNAPSHOT_PREFIX + + ITasksCoreConstants.DEFAULT_TASK_LIST_FILE); + if (taskListFileSnapshot.exists()) { + taskListFileSnapshot.renameTo(new File(taskListFile.getParentFile(), + taskListFileSnapshot.getName() + PREFIX_BACKUP + date)); + } + + } + readTaskListData(); } - readTaskListData(); } catch (IOException e) { - throw new InvocationTargetException(e); + Status status = new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e); + throw new CoreException(status); } finally { Job.getJobManager().endRule(ITasksCoreConstants.ROOT_SCHEDULING_RULE); monitor.done(); } - return; - } - public void setRestoreM2Tasklist(boolean restoreM2Tasklist) { - this.restoreM2Tasklist = restoreM2Tasklist; + private void checkZipFile() throws IOException { + Enumeration<? extends ZipEntry> entries; + ZipFile zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ); + try { + entries = zipFile.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); + if (entry.getName().startsWith(ITasksCoreConstants.OLD_TASK_LIST_FILE)) { + restoreM2Tasklist = true; + } + numEntries++; + } + } finally { + zipFile.close(); + } } } diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java index 9ffd2c56f..721408dd2 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/TaskDataImportWizardPage.java @@ -15,14 +15,11 @@ import java.io.File; import java.text.DateFormat; import java.util.SortedMap; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.swt.SWT; @@ -39,7 +36,6 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.plugin.AbstractUIPlugin; /** * Wizard Page for the Task Data Import Wizard @@ -70,9 +66,7 @@ public class TaskDataImportWizardPage extends WizardPage { private final static String IMPORT_BACKUPMETHOD_SETTING = Messages.TaskDataImportWizardPage_Import_method_backup; public TaskDataImportWizardPage() { - super( - "org.eclipse.mylyn.tasklist.importPage", Messages.TaskDataImportWizardPage_Import_Task_Data, AbstractUIPlugin.imageDescriptorFromPlugin( //$NON-NLS-1$ - TasksUiPlugin.ID_PLUGIN, "icons/wizban/banner-import.gif")); //$NON-NLS-1$ + super("org.eclipse.mylyn.tasklist.importPage"); //$NON-NLS-1$ setPageComplete(false); setMessage(Messages.TaskDataImportWizardPage_Importing_overwrites_current_tasks_and_repositories, IMessageProvider.WARNING); @@ -81,22 +75,17 @@ public class TaskDataImportWizardPage extends WizardPage { } public void createControl(Composite parent) { - try { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - layout.verticalSpacing = 15; - container.setLayout(layout); - createImportFromZipControl(container); - createImportFromBackupControl(container); - addRadioListeners(); - initSettings(); - Dialog.applyDialogFont(container); - setControl(container); - setPageComplete(validate()); - } catch (RuntimeException e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, - Messages.TaskDataImportWizardPage_Could_not_create_import_wizard_page, e)); - } + Composite container = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(3, false); + layout.verticalSpacing = 15; + container.setLayout(layout); + createImportFromZipControl(container); + createImportFromBackupControl(container); + addRadioListeners(); + initSettings(); + Dialog.applyDialogFont(container); + setControl(container); + setPageComplete(validate()); } private void addRadioListeners() { @@ -224,25 +213,6 @@ public class TaskDataImportWizardPage extends WizardPage { settings.put(SETTINGS_SAVED, SETTINGS_SAVED); } - /** Convenience method for creating a new checkbox */ - protected Button createCheckBox(Composite parent, String text) { - Button newButton = new Button(parent, SWT.CHECK); - newButton.setText(text); - - newButton.addSelectionListener(new SelectionListener() { - - public void widgetSelected(SelectionEvent e) { - controlChanged(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // No action required - } - }); - - return newButton; - } - /** Called to indicate that a control's value has changed */ public void controlChanged() { setPageComplete(validate()); diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties index bd1b2d415..5c4a9584e 100644 --- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties +++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/messages.properties @@ -47,6 +47,7 @@ TaskAttachmentWizard_Screenshot=Screenshot TaskDataExportWizard_Confirm_File_Replace=Confirm File Replace TaskDataExportWizard_Export=Export +TaskDataExportWizard_export_failed=Export Failed TaskDataExportWizard_Task_context_files_already_exist_in_X=Task context files already exist in {0}. Do you want to overwrite them? TaskDataExportWizard_The_task_activation_history_file_X_already_exists=The task activation history file {0} already exists. Do you want to overwrite it? TaskDataExportWizard_The_task_list_file_X_already_exists=The task list file {0} already exists. Do you want to overwrite it? @@ -75,6 +76,7 @@ TaskDataImportWizard_Import=Import TaskDataImportWizard_Import_Error=Import Error: Please retry importing or use alternate source TaskDataImportWizard_Importing_Data=Importing Data TaskDataImportWizard_Overwrite_existing_file_=Overwrite existing file?\n +TaskDataImportWizard_task_data_import_failed=Task Data import failed TaskDataImportWizardPage_Browse_=Browse... TaskDataImportWizardPage_From_snapshot=From snapshot |