2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.view
.datasource
.e4
.handler
;
12 import javax
.inject
.Named
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.core
.runtime
.IStatus
;
16 import org
.eclipse
.core
.runtime
.Status
;
17 import org
.eclipse
.core
.runtime
.jobs
.Job
;
18 import org
.eclipse
.e4
.core
.di
.annotations
.CanExecute
;
19 import org
.eclipse
.e4
.ui
.services
.IServiceConstants
;
20 import org
.eclipse
.jface
.dialogs
.MessageDialog
;
21 import org
.eclipse
.swt
.SWT
;
22 import org
.eclipse
.swt
.widgets
.Shell
;
23 import org
.eclipse
.ui
.progress
.IProgressConstants
;
25 import eu
.etaxonomy
.cdm
.config
.ICdmSource
;
26 import eu
.etaxonomy
.cdm
.database
.ICdmDataSource
;
27 import eu
.etaxonomy
.cdm
.database
.update
.CdmUpdater
;
28 import eu
.etaxonomy
.cdm
.database
.update
.SchemaUpdateResult
;
29 import eu
.etaxonomy
.taxeditor
.model
.CdmProgressMonitorAdapter
;
30 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
31 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
32 import eu
.etaxonomy
.taxeditor
.view
.datasource
.CdmMetaDataAwareDataSourceContainer
;
33 import eu
.etaxonomy
.taxeditor
.view
.datasource
.e4
.CdmDataSourceViewPartE4
;
41 public class UpdateDataSourceHandlerE4
extends AbstractDataSourceHandlerE4
{
45 public boolean specificExecute(CdmDataSourceViewPartE4 dataSourceViewPart
,
46 CdmMetaDataAwareDataSourceContainer container
, Shell shell
) {
47 if(! MessageDialog
.open(MessageDialog
.CONFIRM
, shell
, "Update Datasource", "WARNING!\n\n" +
48 "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 " +
49 "Are you sure you want to update the datasource?", SWT
.NONE
)){
52 Job job
= new Job("Updating datasource " + container
.getCdmSource().getName()){
55 protected IStatus
run(IProgressMonitor monitor
) {
56 CdmUpdater updater
= new CdmUpdater();
57 IStatus status
= null;
58 ICdmSource cdmSource
= container
.getCdmSource();
59 //FIXME:Remoting we need another updater for ICdmRemoteSource
60 if(cdmSource
instanceof ICdmDataSource
) {
62 SchemaUpdateResult result
= updater
.updateToCurrentVersion(
63 (ICdmDataSource
)cdmSource
, CdmProgressMonitorAdapter
.CreateMonitor(monitor
));
64 if(result
.isSuccess()){
66 if(dataSourceViewPart
!= null){
67 container
.getMetaDataFromDataSource();
68 dataSourceViewPart
.getViewer().update(new CdmMetaDataAwareDataSourceContainer
[]{container
}, null);
72 status
= Status
.OK_STATUS
;
74 throw new RuntimeException("An error occurred during the update.");
77 status
= new Status(IStatus
.ERROR
, TaxeditorStorePlugin
.PLUGIN_ID
, e
.getMessage(), e
);
78 MessagingUtils
.errorDialog("Could not complete updater", updater
, status
.getMessage(), status
.getPlugin(), e
, true);
87 job
.setPriority(Job
.BUILD
);
88 job
.setProperty(IProgressConstants
.KEEP_PROPERTY
, true);
96 public boolean canExecute(@Named(IServiceConstants
.ACTIVE_SELECTION
)CdmMetaDataAwareDataSourceContainer container
){
97 return !container
.isDataSourceCompatible();