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
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,
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>
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
return null;
}
+ protected CdmPersistentDataSource getSelectedDataSource(ExecutionEvent event){
+ ISelection menuSelection = HandlerUtil.getActiveMenuSelection(event);
+ CdmMetaDataAwareDataSourceContainer container = (CdmMetaDataAwareDataSourceContainer) ((StructuredSelection) menuSelection).getFirstElement();
+ return (CdmPersistentDataSource) container.getDataSource();
+ }
+
/**
*
* @param event
--- /dev/null
+// $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;
+ }
+}
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
*/
@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);
--- /dev/null
+// $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;
+ }
+}
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;
}
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;
}
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);
- }
}
// 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);
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;
/**
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);
}
Map<MetaDataPropertyName, String> resultMap = getDefaultMetaDataMap();
try {
- if(dataSource.testConnection()){
+ if(isRunning()){
try {
for(MetaDataPropertyName metaDataPropertyName : MetaDataPropertyName.values()){
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;
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;
+ }
}