blob: 63b71db276afccf08fdb770e9c7440198b4b5949 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014 Hussein Mhanna
*
* 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:
* Hussein Mhanna - initial API and implementation
******************************************************************************/
package org.eclipse.rmf.reqif10.csv.importer.ui.wizards;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.emf.edit.ui.util.EditUIUtil;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.rmf.reqif10.csv.importer.CSVImporterPlugin;
import org.eclipse.rmf.reqif10.csv.importer.mapping.MappingLibrary;
import org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages.CSVImportWizardPage;
import org.eclipse.rmf.reqif10.csv.importer.ui.wizards.pages.CSVMappingWizardPage;
import org.eclipse.rmf.reqif10.csv.importer.utils.Importer;
import org.eclipse.rmf.reqif10.csv.importer.utils.Utils;
import org.eclipse.rmf.reqif10.pror.editor.presentation.Reqif10Editor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IImportWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
public class CSVImportWziard extends Wizard implements IImportWizard {
private CSVImportWizardPage importWizardPage;
private CSVMappingWizardPage mappingWizardPage;
public CSVImportWziard() {
setWindowTitle("CSV Import Wizard");
setNeedsProgressMonitor(true);
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
importWizardPage = new CSVImportWizardPage();
mappingWizardPage = new CSVMappingWizardPage();
}
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page == importWizardPage) {
IRunnableWithProgress runnableWithProgress = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
try {
final List<String> columnIDS = Utils.getColumnIds(
importWizardPage.getSelectedFilePath(),
importWizardPage.getSeparator(),
importWizardPage.isContainsHeader());
getShell().getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
mappingWizardPage
.setColumnMappingInput(columnIDS);
}
});
} catch (IOException e) {
CSVImporterPlugin.INSTANCE.log(e);
}
}
};
run(runnableWithProgress);
}
return super.getNextPage(page);
}
@Override
public void addPages() {
super.addPages();
addPage(importWizardPage);
addPage(mappingWizardPage);
}
protected void run(IRunnableWithProgress runnableWithProgress) {
try {
getContainer().run(true, false, runnableWithProgress);
} catch (InvocationTargetException e) {
CSVImporterPlugin.INSTANCE.log(e);
} catch (InterruptedException e) {
CSVImporterPlugin.INSTANCE.log(e);
}
}
public static EditingDomain getEditingDomain(URI uri) {
return getEditorsURIMap().get(uri);
}
public static Map<URI, EditingDomain> getEditorsURIMap() {
Map<URI, EditingDomain> uriMap = new HashMap<URI, EditingDomain>();
IEditorReference[] editorReferences = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getEditorReferences();
for (IEditorReference editorReference : editorReferences) {
IEditorPart editorPart = editorReference.getEditor(false);
if (editorPart instanceof Reqif10Editor) {
try {
uriMap.put(EditUIUtil.getURI(editorReference
.getEditorInput()),
((IEditingDomainProvider) editorPart)
.getEditingDomain());
} catch (PartInitException e) {
e.printStackTrace();
}
}
}
return uriMap;
}
@Override
public boolean performFinish() {
boolean valid = true;
final IFile selectedDestinationFile = importWizardPage
.getSelectedDestinationFile();
final String selectedFilePath = importWizardPage.getSelectedFilePath();
final MappingLibrary mappingLibrary = mappingWizardPage
.getMappingLibrary();
final char separator = importWizardPage.getSeparator();
final boolean containsHeader = importWizardPage.isContainsHeader();
final URI uri = URI.createPlatformResourceURI(selectedDestinationFile
.getFullPath().toOSString(), true);
final EditingDomain editingDomain = getEditingDomain(uri);
try {
Importer.importReq(editingDomain, selectedDestinationFile,
selectedFilePath, mappingLibrary, separator, containsHeader);
} catch (Exception e) {
CSVImporterPlugin.getPlugin().log(e);
valid = false;
MessageDialog.openError(getShell(), "Import Failed: "
+ e.getClass().getSimpleName(), "Something went wrong: "
+ e.getMessage());
}
return valid;
}
}