commit a5b67ac3d2e90ebe5c4fac0fd7d06fe22511926a
Author: Patrick Plitzner
Date: Tue Aug 22 15:04:38 2017 +0200
fix #6912 Migrate DataSource view
diff --git a/eu.etaxonomy.taxeditor.store/fragment.e4xmi b/eu.etaxonomy.taxeditor.store/fragment.e4xmi
index 571aebd66..373347fa8 100644
--- a/eu.etaxonomy.taxeditor.store/fragment.e4xmi
+++ b/eu.etaxonomy.taxeditor.store/fragment.e4xmi
@@ -21,6 +21,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -47,6 +65,12 @@
+
+
+
+
+
+
diff --git a/eu.etaxonomy.taxeditor.store/plugin.xml b/eu.etaxonomy.taxeditor.store/plugin.xml
index ef5a54afb..560e593a0 100755
--- a/eu.etaxonomy.taxeditor.store/plugin.xml
+++ b/eu.etaxonomy.taxeditor.store/plugin.xml
@@ -234,13 +234,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
cdmSources;
+
+ /**
+ * @param name
+ */
+ public DataSourceJob(String title, List cdmSources) {
+ super(title);
+ this.cdmSources = cdmSources;
+ }
+
+ @Override
+ public IStatus run(final IProgressMonitor monitor) {
+ try{
+ logger.debug("Begin of eclipse core runtime Job to Retrieve datasources"); //$NON-NLS-1$
+ monitor.beginTask("Retrieving datasources", cdmSources.size() + 1); //$NON-NLS-1$
+
+ final List containers = new ArrayList();
+
+ for(ICdmSource cdmSource : cdmSources){
+ containers.add(new CdmMetaDataAwareDataSourceContainer(cdmSource));
+ }
+
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ viewer.setInput(containers);
+ }
+ });
+ monitor.worked(1);
+
+ for(final CdmMetaDataAwareDataSourceContainer container : containers){
+ if(logger.isDebugEnabled()) {
+ logger.debug(" #" + container.hashCode() + " : next DataSourceContainer"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ container.getMetaDataFromDataSource();
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(" #" + container.hashCode() + " : metadata retrieved, creating new runnable ..."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(" #" + container.hashCode() + " starting sub thread to update ..."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ viewer.update(container, null);
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(" #" + container.hashCode() + " end of sub thread to update ..."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ });
+ if(logger.isDebugEnabled())
+ {
+ logger.debug(" #" + container.hashCode() + " done"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ monitor.worked(1);
+ }
+
+ }finally{
+ monitor.done();
+ }
+ return Status.OK_STATUS;
+ }
+ }
+
+ private TableViewer viewer;
+
+ //FIXME E4 migrate
+// private IWorkbenchSiteProgressService service;
+
+ private IContextListener contextListener;
+
+ private CdmDataSourceViewerComparator comparator;
+
+ public CdmDataSourceViewPartE4(){
+ }
+
+
+ private ISelectionChangedListener selectionChangedListener;
+
+ @Inject
+ private ESelectionService selService;
+
+ @PostConstruct
+ public void create(Composite parent, EMenuService menuService) {
+// service = getSite().getAdapter(IWorkbenchSiteProgressService.class);
+ contextListener = new ContextListener();
+ CdmStore.getContextManager().addContextListener(contextListener);
+
+ // Create top composite
+ FillLayout fillLayout = new FillLayout();
+ fillLayout.marginWidth = 0;
+ fillLayout.marginHeight = 0;
+ fillLayout.type = SWT.VERTICAL;
+ parent.setLayout(fillLayout);
+
+ viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ | SWT.V_SCROLL | SWT.FULL_SELECTION);
+
+ createColumns(viewer);
+
+ viewer.setContentProvider(new CdmDataSourceContentProvider());
+ viewer.setLabelProvider(new CdmDataSourceLabelProvider());
+ comparator = new CdmDataSourceViewerComparator();
+ viewer.setComparator(comparator);
+
+
+ // Propagate selection from viewer
+ selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
+ viewer.addSelectionChangedListener(selectionChangedListener);
+
+ //create context menu
+ menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.store.popupmenu.datasourceview");
+
+ refresh();
+ }
+
+
+ // This will create the columns for the table
+ private void createColumns(TableViewer viewer) {
+ Table table = viewer.getTable();
+ String[] titles = {Messages.CdmDataSourceViewPart_12, Messages.CdmDataSourceViewPart_11, Messages.CdmDataSourceViewPart_10, Messages.CdmDataSourceViewPart_9, Messages.CdmDataSourceViewPart_8, Messages.CdmDataSourceViewPart_7, Messages.CdmDataSourceViewPart_5, Messages.CdmDataSourceViewPart_4, Messages.CdmDataSourceViewPart_3, Messages.CdmDataSourceViewPart_2};
+ int[] bounds = { 24, 200, 100, 50 , 80, 120, 100, 100, 50, 300};
+
+ for (int i = 0; i < titles.length; i++) {
+ TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
+ column.getColumn().setText(titles[i]);
+ column.getColumn().setWidth(bounds[i]);
+ column.getColumn().setResizable(true);
+ column.getColumn().setMoveable(true);
+ column.getColumn().addSelectionListener(getSelectionAdapter(column.getColumn(), i));
+ if(i == 1){
+ table.setSortColumn(column.getColumn());
+ }
+ }
+ table.setHeaderVisible(true);
+ table.setLinesVisible(true);
+ table.setSortDirection(SWT.UP);
+
+ }
+
+ public void refresh(){
+ DataSourceJob dataSourceJob = new DataSourceJob(Messages.CdmDataSourceViewPart_1, CdmDataSourceRepository.getAll());
+ dataSourceJob.schedule();
+ }
+
+ /** {@inheritDoc} */
+ @PreDestroy
+ public void dispose() {
+ CdmStore.getContextManager().removeContextListener(contextListener);
+ }
+
+ /** {@inheritDoc} */
+ @Focus
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+ //FIXME E4 migrate
+// /** {@inheritDoc} */
+// @Override
+// public void showBusy(boolean busy) {
+// super.showBusy(busy);
+//// viewer.getTable().setEnabled(!busy);
+// if(busy){
+// partNameCache = getPartName();
+// setPartName(Messages.CdmDataSourceViewPart_1);
+// }else{
+// if(partNameCache != null){
+// setPartName(partNameCache);
+// }
+// }
+// }
+
+ public StructuredViewer getViewer() {
+ return viewer;
+ }
+
+// public IWorkbenchSiteProgressService getService() {
+// return service;
+// }
+
+ private SelectionAdapter getSelectionAdapter(final TableColumn column,
+ final int index) {
+ SelectionAdapter selectionAdapter = new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ comparator.setColumn(index);
+ int dir = viewer.getTable().getSortDirection();
+ if (viewer.getTable().getSortColumn() == column) {
+ dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
+ } else {
+ dir = SWT.DOWN;
+ }
+ viewer.getTable().setSortDirection(dir);
+ viewer.getTable().setSortColumn(column);
+ viewer.refresh();
+ }
+ };
+ return selectionAdapter;
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/AbstractDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/AbstractDataSourceHandlerE4.java
new file mode 100644
index 000000000..03ac5d3f2
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/AbstractDataSourceHandlerE4.java
@@ -0,0 +1,51 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+abstract class AbstractDataSourceHandlerE4 {
+
+ @Execute
+ public void execute(EPartService partService,
+ @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
+ @Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container,
+ MPart dataSourcePart) {
+
+ boolean refresh = specificExecute((CdmDataSourceViewPartE4) dataSourcePart.getObject(), container, shell);
+
+ MPart dataSourceView = partService.showPart(
+ "eu.etaxonomy.taxeditor.view.datasource",
+ PartState.ACTIVATE);
+
+ CdmDataSourceViewPartE4 view = (CdmDataSourceViewPartE4) dataSourceView.getObject();
+ if(refresh) {
+ view.refresh();
+ }
+ }
+
+ public abstract boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell);
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/ChangeConnectionHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/ChangeConnectionHandlerE4.java
new file mode 100644
index 000000000..a0e4eeae8
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/ChangeConnectionHandlerE4.java
@@ -0,0 +1,62 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+
+import eu.etaxonomy.cdm.model.metadata.CdmMetaDataPropertyName;
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.l10n.Messages;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class ChangeConnectionHandlerE4 {
+
+ @Execute
+ public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container) {
+
+ if(CdmStore.isConnecting()){
+ MessagingUtils.warningDialog(Messages.ChangeConnectionHandler_ALREADY_CONNECTING, this, Messages.ChangeConnectionHandler_CURRENTLY_CONNECTING_ALREADY);
+ return ;
+ }
+
+ try {
+ container.getCdmSource().checkConnection();
+ boolean confirmed = MessagingUtils.confirmDialog(Messages.ChangeConnectionHandler_CREATE_DATAMODEL, String.format(Messages.ChangeConnectionHandler_REALLY_CREATE_DATAMODEL, container.getCdmSource().getName()));
+
+ if(confirmed){
+ CdmDataSourceRepository.changeDataSource(container.getCdmSource());
+ }
+ } catch (Exception e) {
+ MessagingUtils.warningDialog(Messages.ChangeConnectionHandler_DATASOURCE_NOT_AVAILABLE, this, Messages.ChangeConnectionHandler_NOT_AVAILABLE_REASONS);
+ MessagingUtils.warn(getClass(), e);
+ return ;
+ }
+
+ return ;
+ }
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container){
+ String schemaVersion = container.getMetaData(CdmMetaDataPropertyName.DB_SCHEMA_VERSION);
+ return schemaVersion.equals(CdmMetaDataAwareDataSourceContainer.DEFAULT_ENTRY);
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CloneDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CloneDataSourceHandlerE4.java
new file mode 100644
index 000000000..42369d1a8
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CloneDataSourceHandlerE4.java
@@ -0,0 +1,60 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.cdm.config.ICdmSource;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceWizard;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class CloneDataSourceHandlerE4 extends AbstractDataSourceHandlerE4 {
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell) {
+ ICdmSource cdmSource = container.getCdmSource();
+ //FIXME:Remoting we need another wizard for ICdmRemoteSource
+ if(cdmSource instanceof ICdmDataSource) {
+ Wizard wizard = new CdmDataSourceWizard((ICdmDataSource)cdmSource, CdmDataSourceWizard.Mode.CLONE);
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+
+ int result = dialog.open();
+
+ if(result == IStatus.OK){
+ if(dataSourceViewPart != null){
+ container.getMetaDataFromDataSource();
+ dataSourceViewPart.getViewer().update(new CdmMetaDataAwareDataSourceContainer[]{container}, null);
+ }
+ }
+ }
+ return true;
+ }
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container){
+ return container!=null;
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CreateDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CreateDataSourceHandlerE4.java
new file mode 100644
index 000000000..0e31422c9
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/CreateDataSourceHandlerE4.java
@@ -0,0 +1,37 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceWizard;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class CreateDataSourceHandlerE4 extends AbstractDataSourceHandlerE4 {
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell) {
+ CdmDataSourceWizard wizard = new CdmDataSourceWizard();
+
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+
+ return dialog.open() == IStatus.OK;
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/DeleteDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/DeleteDataSourceHandlerE4.java
new file mode 100644
index 000000000..cbdf06203
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/DeleteDataSourceHandlerE4.java
@@ -0,0 +1,47 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class DeleteDataSourceHandlerE4 extends AbstractDataSourceHandlerE4 {
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell) {
+ if(! MessageDialog.openConfirm(shell, "Confirm Deletion", "Do you want to delete the selected datasources?")){
+ return false;
+ }
+ CdmPersistentDataSource dataSource = (CdmPersistentDataSource) container.getCdmSource();
+ CdmDataSourceRepository.delete(dataSource);
+ return true;
+ }
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container){
+ return container!=null;
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/EditDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/EditDataSourceHandlerE4.java
new file mode 100644
index 000000000..48502ddbc
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/EditDataSourceHandlerE4.java
@@ -0,0 +1,60 @@
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+
+import eu.etaxonomy.cdm.config.ICdmSource;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceWizard;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class EditDataSourceHandlerE4 extends AbstractDataSourceHandlerE4 {
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell) {
+ ICdmSource cdmSource = container.getCdmSource();
+ //FIXME:Remoting we need another wizard for ICdmRemoteSource
+ if(cdmSource instanceof ICdmDataSource) {
+ Wizard wizard = new CdmDataSourceWizard((ICdmDataSource)cdmSource, CdmDataSourceWizard.Mode.EDIT);
+ WizardDialog dialog = new WizardDialog(shell, wizard);
+
+ int result = dialog.open();
+
+ if(result == IStatus.OK){
+ if(dataSourceViewPart != null){
+ container.getMetaDataFromDataSource();
+ dataSourceViewPart.getViewer().update(new CdmMetaDataAwareDataSourceContainer[]{container}, null);
+ }
+ }
+ }
+ return false;
+ }
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container){
+ return container!=null;
+ }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/UpdateDataSourceHandlerE4.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/UpdateDataSourceHandlerE4.java
new file mode 100644
index 000000000..da8909de1
--- /dev/null
+++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/datasource/e4/handler/UpdateDataSourceHandlerE4.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (C) 2007 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
+
+package eu.etaxonomy.taxeditor.view.datasource.e4.handler;
+
+import javax.inject.Named;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.e4.core.di.annotations.CanExecute;
+import org.eclipse.e4.ui.services.IServiceConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.progress.IProgressConstants;
+
+import eu.etaxonomy.cdm.config.ICdmSource;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.database.update.CdmUpdater;
+import eu.etaxonomy.cdm.database.update.SchemaUpdateResult;
+import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
+import eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.taxeditor.view.datasource.e4.CdmDataSourceViewPartE4;
+
+/**
+ *
+ * @author pplitzner
+ * @date 22.08.2017
+ *
+ */
+public class UpdateDataSourceHandlerE4 extends AbstractDataSourceHandlerE4 {
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart, CdmMetaDataAwareDataSourceContainer container, Shell shell) {
+ final Display display = Display.getCurrent();
+ if(! MessageDialog.open(MessageDialog.CONFIRM, shell, "Update Datasource", "WARNING!\n\n" +
+ "This will change your data base structure! Be sure you have an up-to-date backup of your data before running the update! \n\n " +
+ "Are you sure you want to update the datasource?", SWT.NONE)){
+ return false;
+ }
+ Job job = new Job("Updating datasource " + container.getCdmSource().getName()){
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ CdmUpdater updater = new CdmUpdater();
+ IStatus status = null;
+ ICdmSource cdmSource = container.getCdmSource();
+ //FIXME:Remoting we need another updater for ICdmRemoteSource
+ if(cdmSource instanceof ICdmDataSource) {
+ try{
+ SchemaUpdateResult result = updater.updateToCurrentVersion(
+ (ICdmDataSource)cdmSource, CdmProgressMonitorAdapter.CreateMonitor(monitor));
+ if(result.isSuccess()){
+ display.asyncExec(new Runnable(){
+
+ @Override
+ public void run() {
+ if(dataSourceViewPart!= null){
+ container.getMetaDataFromDataSource();
+ dataSourceViewPart.getViewer().update(new CdmMetaDataAwareDataSourceContainer[]{container}, null);
+ }
+
+ }
+ });
+ status = Status.OK_STATUS;
+ }else{
+ throw new RuntimeException("An error occurred during the update.");
+ }
+ }catch(Exception e){
+ status = new Status(IStatus.ERROR, TaxeditorStorePlugin.PLUGIN_ID, e.getMessage(), e);
+ MessagingUtils.errorDialog("Could not complete updater", updater, status.getMessage(), status.getPlugin(), e, true);
+ }
+ }
+
+ return status;
+ }
+
+ };
+
+ job.setPriority(Job.BUILD);
+ job.setProperty(IProgressConstants.KEEP_PROPERTY, true);
+ job.schedule();
+
+ return false;
+ }
+
+
+ @CanExecute
+ public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)CdmMetaDataAwareDataSourceContainer container){
+ return container.isDataSourceCompatible();
+ }
+}