/*******************************************************************************
* Copyright (c) 2009 Andrey Loskutov.
* 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
* Contributor: Andrey Loskutov - initial API and implementation
*******************************************************************************/
package de.loskutov.anyedit.ui.wizards;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IWorkingSet;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.XMLMemento;
import de.loskutov.anyedit.AnyEditToolsPlugin;
import de.loskutov.anyedit.IAnyEditConstants;
/**
* @author Andrey
*/
public class ExportPage extends WSPage {
private static final String TITLE = "Export working sets to the local file system";
private static final String DESCRIPTION = "Select working sets to export and the file path to store";
protected ExportPage(String pageName) {
super(pageName, TITLE, DESCRIPTION, "icons/export_wiz.gif");
}
private boolean storeSets() {
validateInput();
String pathname = getFileString();
if (pathname == null) {
return false;
}
File file = new File(pathname);
XMLMemento memento = XMLMemento.createWriteRoot("workingSets");
Object[] sets = getSelectedWorkingSets();
for (int i = 0; i < sets.length; i++) {
IMemento childMem = memento.createChild("workingSet");
IWorkingSet set = (IWorkingSet) sets[i];
set.saveState(childMem);
}
FileWriter writer = null;
try {
writer = new FileWriter(file);
memento.save(writer);
} catch (IOException e) {
AnyEditToolsPlugin.errorDialog("Couldn't write working set file: ", e);
return false;
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
AnyEditToolsPlugin.logError(null, e);
}
}
}
try {
String lastUsedFile = file.getCanonicalPath();
IPreferenceStore store = AnyEditToolsPlugin.getDefault().getPreferenceStore();
store.setValue(IAnyEditConstants.LAST_USED_WS_FILE, lastUsedFile);
} catch (IOException e) {
AnyEditToolsPlugin.logError(null, e);
}
return true;
}
public boolean finish() {
return storeSets();
}
@Override
protected IStructuredContentProvider createContentProvider() {
return new WorkingSetContentProvider();
}
public static class WorkingSetContentProvider implements ITreeContentProvider {
public WorkingSetContentProvider() {
super();
}
@Override
public void dispose() {
// noop
}
@Override
public void inputChanged(Viewer viewer1, Object oldInput, Object newInput) {
// noop
}
@Override
public Object[] getElements(Object inputElement) {
IWorkingSet[] workingSets = PlatformUI.getWorkbench().getWorkingSetManager()
.getAllWorkingSets();
List<IWorkingSet> sets = new ArrayList<IWorkingSet>();
for (int i = 0; i < workingSets.length; i++) {
IWorkingSet workingSet = workingSets[i];
if (!workingSet.isAggregateWorkingSet()) {
sets.add(workingSet);
}
}
return sets.toArray(new IWorkingSet[sets.size()]);
}
@Override
public Object[] getChildren(Object parentElement) {
return new Object[0];
}
@Override
public Object getParent(Object element) {
return null;
}
@Override
public boolean hasChildren(Object element) {
return false;
}
}
}