CdmSchemaVersion check now correctly implemented. Integrated database update function...
authorn.hoffmann <n.hoffmann@localhost>
Thu, 23 Sep 2010 09:42:45 +0000 (09:42 +0000)
committern.hoffmann <n.hoffmann@localhost>
Thu, 23 Sep 2010 09:42:45 +0000 (09:42 +0000)
.gitattributes
taxeditor-store/META-INF/MANIFEST.MF
taxeditor-store/plugin.xml
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/AbstractDataSourceHandler.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/DataSourceMenuPropertyTester.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/EditDataSourceHandler.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/UpdateDataSourceHandler.java [new file with mode: 0644]
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceLabelProvider.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewPart.java
taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmMetaDataAwareDataSourceContainer.java

index bf3dba027516cde03e06ad67a81fb0f8043218ef..bbe6b367f0fc1a3e643e174192712b48c7a190d0 100644 (file)
@@ -841,8 +841,10 @@ taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/Abstract
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/ChangeConnectionHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/CloseConnectionHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/CreateDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/DataSourceMenuPropertyTester.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/DeleteDataSourceHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/EditDataSourceHandler.java -text
+taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/UpdateDataSourceHandler.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceContentProvider.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceLabelProvider.java -text
 taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/view/CdmDataSourceViewPart.java -text
index b3264c23ae6e7f1d9d77be6b37e80050cfdd86cd..d0c597235ceab96798900e2eda4abbadc9460ca9 100644 (file)
@@ -43,6 +43,7 @@ Require-Bundle: org.eclipse.osgi;bundle-version="3.5.2",
 Import-Package: junit.framework,
  org.eclipse.core.commands,
  org.eclipse.core.commands.operations,
+ org.eclipse.core.expressions,
  org.eclipse.core.runtime,
  org.eclipse.core.runtime.jobs,
  org.eclipse.jface.action,
index 4d14c335190e19e3b7978cca1be857401acdd319..bfd142930e558827fbd82cd1bc8245985a3bafb0 100644 (file)
                label="Close Active Connection"
                style="push">
          </command>
+         <command
+               commandId="eu.etaxonomy.taxeditor.store.datasource.update"
+               label="Update"
+               style="push">
+            <visibleWhen
+                  checkEnabled="true">
+               <not>
+                  <reference
+                        definitionId="isCompatible">
+                  </reference>
+               </not>
+            </visibleWhen>
+         </command>
       </menuContribution>
       <menuContribution
             locationURI="popup:eu.etaxonomy.taxeditor.store.userManagerView">
             id="eu.etaxonomy.taxeditor.store.datasource.close"
             name="Close Active Connection">
       </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.datasource.handler.UpdateDataSourceHandler"
+            id="eu.etaxonomy.taxeditor.store.datasource.update"
+            name="Update Datasource">
+      </command>
    </extension>
    <extension
          point="org.eclipse.ui.commands">
          </description>
       </fontDefinition>
       </extension>
+<extension
+      point="org.eclipse.core.expressions.propertyTesters">
+   <propertyTester
+         class="eu.etaxonomy.taxeditor.datasource.handler.DataSourceMenuPropertyTester"
+         id="eu.etaxonomy.taxeditor.datasource.propertyTester"
+         namespace="eu.etaxonomy.taxeditor.datasource.propertyTester"
+         properties="isCompatible"
+         type="org.eclipse.jface.viewers.IStructuredSelection">
+   </propertyTester>
+</extension>
+<extension
+      point="org.eclipse.core.expressions.definitions">
+   <definition
+         id="isCompatible">
+      <with
+            variable="activeMenuSelection">
+         <test
+               property="eu.etaxonomy.taxeditor.datasource.propertyTester.isCompatible">
+         </test>
+      </with>
+   </definition>
+</extension>
        
 </plugin>
index 4d27dab4c063bf366a656f501090d1811977a835..274986b635caffe69d83a3f8256ddf4c1b180073 100644 (file)
@@ -14,10 +14,15 @@ import org.apache.log4j.Logger;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
 
+import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
 import eu.etaxonomy.taxeditor.datasource.view.CdmDataSourceViewPart;
+import eu.etaxonomy.taxeditor.datasource.view.CdmMetaDataAwareDataSourceContainer;
 
 /**
  * @author n.hoffmann
@@ -45,6 +50,12 @@ abstract class AbstractDataSourceHandler extends AbstractHandler {
                return null;
        }
        
+       protected CdmPersistentDataSource getSelectedDataSource(ExecutionEvent event){
+               ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);
+               CdmMetaDataAwareDataSourceContainer container = (CdmMetaDataAwareDataSourceContainer) ((StructuredSelection) menuSelection).getFirstElement();
+               return (CdmPersistentDataSource) container.getDataSource();
+       }
+       
        /**
         * 
         * @param event
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/DataSourceMenuPropertyTester.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/DataSourceMenuPropertyTester.java
new file mode 100644 (file)
index 0000000..f6f3c21
--- /dev/null
@@ -0,0 +1,68 @@
+// $Id$
+/**
+ * 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.datasource.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+import eu.etaxonomy.taxeditor.datasource.view.CdmMetaDataAwareDataSourceContainer;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 23, 2010
+ * @version 1.0
+ */
+public class DataSourceMenuPropertyTester extends PropertyTester {
+       private static final Logger logger = Logger
+                       .getLogger(DataSourceMenuPropertyTester.class);
+
+       private static final String COMPATIBLE = "isCompatible";
+
+       /*
+        * (non-Javadoc)
+        * 
+        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object,
+        * java.lang.String, java.lang.Object[], java.lang.Object)
+        */
+       @Override
+       public boolean test(Object receiver, String property, Object[] args,
+                       Object expectedValue) {
+
+               Object[] selectedElements = ((IStructuredSelection) receiver).toArray();
+
+               if (selectedElements.length == 0) {
+                       // nothing selected so all tests should fail
+                       return false;
+               }
+
+               if (COMPATIBLE.equals(property)) {
+                       return isCompatible(selectedElements);
+               }
+
+               return false;
+       }
+
+       /**
+        * @param selectedElements
+        * @return
+        */
+       private boolean isCompatible(Object[] selectedElements) {
+               for (Object object : selectedElements) {
+
+                       if (object instanceof CdmMetaDataAwareDataSourceContainer) {
+                               CdmMetaDataAwareDataSourceContainer container = (CdmMetaDataAwareDataSourceContainer) object;
+                               return container.isDataSourceCompatible();
+                       }
+               }
+               return false;
+       }
+}
index a2690d7daeb02f9b4239b6f88211b60ee75ac364..df6cd716c99cc3e52eb1bb611375e8f23aaa088a 100644 (file)
 package eu.etaxonomy.taxeditor.datasource.handler;
 
 import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 
+import eu.etaxonomy.cdm.common.DefaultProgressMonitor;
 import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
-import eu.etaxonomy.taxeditor.datasource.view.CdmMetaDataAwareDataSourceContainer;
+import eu.etaxonomy.cdm.database.update.CdmUpdater;
 import eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceWizard;
+import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 
 /**
  * @author n.hoffmann
@@ -33,10 +36,8 @@ public class EditDataSourceHandler extends AbstractDataSourceHandler {
         */
        @Override
        public boolean specificExecute(ExecutionEvent event) {
-               ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);
-               CdmMetaDataAwareDataSourceContainer container = (CdmMetaDataAwareDataSourceContainer) ((StructuredSelection) menuSelection).getFirstElement();
-               CdmPersistentDataSource dataSource = (CdmPersistentDataSource) container.getDataSource();
-
+               CdmPersistentDataSource dataSource = getSelectedDataSource(event);
+               
                CdmDataSourceWizard wizard = new CdmDataSourceWizard(dataSource);
                WizardDialog dialog = new WizardDialog(HandlerUtil.getActiveShell(event), wizard);
                    
diff --git a/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/UpdateDataSourceHandler.java b/taxeditor-store/src/main/java/eu/etaxonomy/taxeditor/datasource/handler/UpdateDataSourceHandler.java
new file mode 100644 (file)
index 0000000..5da4ca9
--- /dev/null
@@ -0,0 +1,77 @@
+// $Id$
+/**
+* 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.datasource.handler;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.ExecutionEvent;
+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.swt.widgets.Display;
+import org.eclipse.ui.IViewPart;
+
+import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
+import eu.etaxonomy.cdm.database.update.CdmUpdater;
+import eu.etaxonomy.taxeditor.datasource.view.CdmDataSourceViewPart;
+import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
+
+/**
+ * @author n.hoffmann
+ * @created Sep 22, 2010
+ * @version 1.0
+ */
+public class UpdateDataSourceHandler extends AbstractDataSourceHandler {
+       private static final Logger logger = Logger
+                       .getLogger(UpdateDataSourceHandler.class);
+
+       /* (non-Javadoc)
+        * @see eu.etaxonomy.taxeditor.datasource.handler.AbstractDataSourceHandler#specificExecute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       @Override
+       public boolean specificExecute(ExecutionEvent event) {
+               final CdmPersistentDataSource dataSource = getSelectedDataSource(event);
+               
+               final Display display = Display.getCurrent();
+               
+               Job job = new Job("Updating datasource " + dataSource.getName()){
+
+                       @Override
+                       protected IStatus run(IProgressMonitor monitor) {
+                               CdmUpdater updater = new CdmUpdater();
+                               boolean result = updater.updateToCurrentVersion(dataSource, new CdmProgressMonitorAdapter(monitor));
+                               
+                               if(result){
+                                       display.asyncExec(new Runnable(){
+
+                                               @Override
+                                               public void run() {
+                                                       CdmDataSourceViewPart view = (CdmDataSourceViewPart) StoreUtil.getView(CdmDataSourceViewPart.ID, false);
+                                                       if(view != null){
+                                                               view.refresh();
+                                                       }
+                                               }
+                                               
+                                       });
+                               }
+                               
+                               return result ? Status.OK_STATUS : Status.CANCEL_STATUS;
+                       }
+                       
+               };
+               
+               job.setPriority(Job.BUILD);
+               job.schedule();
+               
+               return false;
+       }
+}
index 8ebd41b131cfff2d7a39de7db4aab58f540d2b6c..8826b0dc34ea328c0a51d313ea480e3146d7a9bb 100644 (file)
@@ -17,6 +17,7 @@ import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
 
+import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.common.CdmMetaData;
 import eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName;
@@ -79,13 +80,15 @@ public class CdmDataSourceLabelProvider extends LabelProvider implements ITableL
                                }
                                return dataSource.getNomenclaturalCode().name();
                        case 6:
-                               return metaDataMap.get(MetaDataPropertyName.DB_CREATE_DATE);
+                               return container.isRunning() ? "Yes" : "No";
                        case 7:
-                               return metaDataMap.get(MetaDataPropertyName.DB_SCHEMA_VERSION);
+                               return CdmUtils.Nz(metaDataMap.get(MetaDataPropertyName.DB_CREATE_DATE));
                        case 8:
-                               return isDataSourceCompatible(metaDataMap) ? "Yes" : "No";
+                               return CdmUtils.Nz(metaDataMap.get(MetaDataPropertyName.DB_SCHEMA_VERSION));
                        case 9:
-                               return metaDataMap.get(MetaDataPropertyName.DB_CREATE_NOTE);
+                               return container.isDataSourceCompatible() ? "Yes" : "No";
+                       case 10:
+                               return CdmUtils.Nz(metaDataMap.get(MetaDataPropertyName.DB_CREATE_NOTE));
                }
                return CdmMetaDataAwareDataSourceContainer.DEFAULT_ENTRY;
        }
@@ -95,11 +98,4 @@ public class CdmDataSourceLabelProvider extends LabelProvider implements ITableL
                
                return currentDataSource != null && currentDataSource.getName().equals(dataSource.getName());
        }
-       
-
-       
-       private boolean isDataSourceCompatible(Map<MetaDataPropertyName, String> metaDataMap){
-               String version = metaDataMap.get(MetaDataPropertyName.DB_SCHEMA_VERSION);
-               return version.equals(CdmMetaDataAwareDataSourceContainer.DEFAULT_ENTRY) ? false : CdmMetaData.isDbSchemaVersionCompatible(version);
-       }
 }
index 31f90086544a43d88f88ef19f3d1cc1c7dc4f597..585025041967edebe6ef8a05371f073300057dea 100644 (file)
@@ -122,8 +122,8 @@ public class CdmDataSourceViewPart extends ViewPart implements IContextListener{
        // This will create the columns for the table
        private void createColumns(TableViewer viewer) {
                Table table = viewer.getTable();
-               String[] titles = {"Connected", "Name", "Server", "Type", "Database", "Nomenclatural Code", "Created", "CDM Version", "Compatible", "Notes"};
-               int[] bounds = { 24, 200, 100, 100 , 200, 120, 100, 100, 50, 300};
+               String[] titles = {"Connected", "Name", "Server", "Type", "Database", "Nomenclatural Code", "Up", "Created", "CDM Version", "Compatible", "Notes"};
+               int[] bounds = { 24, 200, 100, 100 , 200, 120, 50, 100, 100, 50, 300};
 
                for (int i = 0; i < titles.length; i++) {
                        TableViewerColumn column = new TableViewerColumn(viewer, SWT.NONE);
index 9e350a31ebb4adab7ee8eecda88150ef3534ab06..2899adef7e374d76aa37bb196d76a42899320ace 100644 (file)
@@ -16,7 +16,9 @@ import java.util.Map;
 
 import org.apache.log4j.Logger;
 
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.model.common.CdmMetaData;
 import eu.etaxonomy.cdm.model.common.CdmMetaData.MetaDataPropertyName;
 
 /**
@@ -32,11 +34,19 @@ public class CdmMetaDataAwareDataSourceContainer {
        
        private ICdmDataSource dataSource;
        
+       private boolean running;
+       
        private Map<MetaDataPropertyName, String> metaDataMap;
        
        public CdmMetaDataAwareDataSourceContainer(ICdmDataSource dataSource){
                this.dataSource = dataSource;
                
+               try {
+                       running = dataSource.testConnection();
+               } catch (DataSourceNotFoundException e) {
+                       running = false;
+               }
+               
                metaDataMap = getMetaDataFromDataSource(dataSource);
        }
 
@@ -51,7 +61,7 @@ public class CdmMetaDataAwareDataSourceContainer {
                Map<MetaDataPropertyName, String> resultMap = getDefaultMetaDataMap();
                
                try {
-                       if(dataSource.testConnection()){
+                       if(isRunning()){
                        
                                try {
                                        for(MetaDataPropertyName metaDataPropertyName : MetaDataPropertyName.values()){
@@ -74,7 +84,7 @@ public class CdmMetaDataAwareDataSourceContainer {
                Map<MetaDataPropertyName, String> resultMap = new HashMap<MetaDataPropertyName, String>(MetaDataPropertyName.values().length);
                
                for(MetaDataPropertyName metaDataPropertyName : MetaDataPropertyName.values()){
-                       resultMap.put(metaDataPropertyName, DEFAULT_ENTRY);
+                       resultMap.put(metaDataPropertyName, null);
                }
                
                return resultMap;
@@ -86,4 +96,16 @@ public class CdmMetaDataAwareDataSourceContainer {
        public Map<MetaDataPropertyName, String> getMetaDataMap() {
                return metaDataMap;
        }
+       
+       public boolean isDataSourceCompatible(){
+               String version = metaDataMap.get(MetaDataPropertyName.DB_SCHEMA_VERSION);
+               return version == null ? false : CdmMetaData.isDbSchemaVersionCompatible(version);
+       }
+
+       /**
+        * @return the running
+        */
+       public boolean isRunning() {
+               return running;
+       }
 }