From: jenkins Date: Mon, 21 Dec 2015 10:30:53 +0000 (+0100) Subject: Merge branch 'release/3.12.0' X-Git-Tag: 3.12.0 X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/commitdiff_plain/a432ab069950b00f31c1b4c5d3a663b203079328?hp=72c118d0b983148a53dc08e4d2733cf855cae863 Merge branch 'release/3.12.0' --- diff --git a/.gitattributes b/.gitattributes index e6bb9df13..c7b12732e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -142,9 +142,7 @@ eu.etaxonomy.taxeditor.cdmlib/build.properties -text eu.etaxonomy.taxeditor.cdmlib/lib/activation-1.1.1.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/antlr-2.7.7.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/aopalliance-1.0.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1-sources.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1-sources.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/avro-1.6.3.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/batik-anim-1.7.jar -text @@ -306,15 +304,11 @@ eu.etaxonomy.taxeditor.cdmlib/lib/spring-security-remoting-3.1.3.RELEASE.jar -te eu.etaxonomy.taxeditor.cdmlib/lib/stax-1.2.0.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/stax-api-1.0.1.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/swagger-annotations-1.3.5.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-easymock-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-inject-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-mock-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-orm-3.3.jar -text -eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.3.jar -text +eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.4.2.jar -text +eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.4.2.jar -text +eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.4.2.jar -text +eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.4.2.jar -text +eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/usertype.jodatime-2.0.1.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/usertype.spi-2.0.1.jar -text eu.etaxonomy.taxeditor.cdmlib/lib/validation-api-1.0.0.GA.jar -text @@ -337,22 +331,57 @@ eu.etaxonomy.taxeditor.cdmlib/lib/yjp-controller-api-redist-9.0.8.jar -text eu.etaxonomy.taxeditor.cdmlib/pom.xml -text eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java -text eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredGenericApplicationContext.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredListableBeanFactory.java -text eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/lazyloading/CdmLazyLoader.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceException.java -text -eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/ICdmRemoteSource.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelFieldPropertyFromClass.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionEnabled.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManagerObserver.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java -text eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java -text eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/cdmlib-ehcache.xml -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/.svnignore -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/config.properties -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_persistence_security.xml -text eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_services_security.xml -text -eu.etaxonomy.taxeditor.cdmlib/src/test/resources/eu/etaxonomy/cdm/datasources/cdm.datasources.xml -text +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties -text eu.etaxonomy.taxeditor.editor/.classpath -text eu.etaxonomy.taxeditor.editor/.project -text eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF -text @@ -374,6 +403,7 @@ eu.etaxonomy.taxeditor.editor/p2.inf -text eu.etaxonomy.taxeditor.editor/plugin.xml -text eu.etaxonomy.taxeditor.editor/pom.xml -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmDataTransfer.java -text +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmEntitySessionInput.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/ChooseFromMultipleTaxonNodesDialog.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorCdmViewer.java -text eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorStateManager.java -text @@ -1262,9 +1292,14 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/Op eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizard.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/featuretree/SelectFeatureTreeWizardPage.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenDistributionEditorWizardHandler.java -text +<<<<<<< HEAD +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenInspectSessionsHandler.java -text +======= eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenHandler.java -text +>>>>>>> 02176688eaa23a31ff5b71c317cb5ee685483aa4 eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenPasswordWizzardHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowLoginWindowHandler.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowRemotingLoginWindowHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/identificationkey/AbstractIdentificaitonKeyWizard.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/AbstractIOManager.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/ExportManager.java -text @@ -1361,7 +1396,6 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/Abst eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostOperation.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostTaxonOperation.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/IPostOperationEnabled.java -text -eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/parser/MatchStrategyConfigurator.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmPreferences.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/CdmStorePropertyTester.java -text @@ -1433,6 +1467,7 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/TermC eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/VocabularyComboElement.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/DefaultLanguageDialog.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/LoginDialog.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/RemotingLoginDialog.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/UriDialog.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/deleteConfigurator/DeleteConfiguratorComposite.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/deleteConfigurator/DeleteConfiguratorDialog.java -text @@ -1822,6 +1857,8 @@ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/Cd eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/DetailsViewPart.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/detail/DetailsViewer.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/reporting/ReportingViewPart.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/InspectSessionsDialog.java -text +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/SessionsViewPart.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/specimenSearch/SpecimenProviderSelectionComposite.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/specimenSearch/SpecimenProviderSelectionController.java -text eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/specimenSearch/SpecimenSearchComposite.java -text @@ -1855,14 +1892,56 @@ eu.etaxonomy.taxeditor.test/.settings/org.eclipse.jdt.core.prefs -text eu.etaxonomy.taxeditor.test/META-INF/MANIFEST.MF -text eu.etaxonomy.taxeditor.test/build.properties -text eu.etaxonomy.taxeditor.test/ide/eclipse/EDITor[!!-~]Tests.launch -text +eu.etaxonomy.taxeditor.test/lib/byte-buddy-0.5.1.jar -text eu.etaxonomy.taxeditor.test/pom.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/cdmlib-ehcache.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/datasources.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/cdm.datasources.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/PolytomousKeyTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNameEditorTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNavigatorTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/remoting/session/CdmEntitySessionManagerTest.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.h2.db -text +eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.trace.db -text +eu.etaxonomy.taxeditor.test/src/main/resources/log4j.properties -text eu.etaxonomy.taxeditor.test/src/main/resources/log4j.xml -text +eu.etaxonomy.taxeditor.test/src/main/resources/unitils.properties -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmModelGetMethodCacherTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/PolytomousKeyTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNameEditorTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNavigatorTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/application/menu/general/NewMenuTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CDMServer.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmPersistentRemoteSourceTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmRemoteSourceTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTestManager.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/HttpInvokerServicesTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmServiceCacherTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemotePersistentCollectionTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/navigation/navigator/contextmenu/ClassificationTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizardTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operations/OperationTestBase.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ITestService.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceInterceptorTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceRebasingTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TargetTestService.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TestService.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/MockSessionOwner.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/AbstractEditorTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/ContextMenuHelper.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/SwtBotUtils.java -text +eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/CdmServerInfoTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/LoginDialogTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/AbstractSelectionElementTest.java -text eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElementTest.java -text @@ -1890,3 +1969,19 @@ src/site/fml/troubleshooting.fml -text src/site/resources/css/site.css -text src/site/resources/images/taxeditor_transformed.png -text src/site/site.xml -text + +# The following files will be ignored when merging another +# branch into this branch in case of merge conflict and +# if the 'ours' merge driver is configured. +# WARNING : This merge driver should NOT be set in development +# environments. It is supposed to be used only in CI +# environments. +# The driver can be configured by executing, +# git config --local merge.ours.driver true +**/pom.xml merge=ours +**/MANIFEST.MF merge=ours +**/feature.xml merge=ours +eu.etaxonomy.taxeditor.cdmlib/.classpath merge=ours +eu.etaxonomy.taxeditor.cdmlib/build.properties merge=ours +eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product merge=ours +eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product.with.jre merge=ours \ No newline at end of file diff --git a/.gitignore b/.gitignore index 5c8b928b8..40d481b7d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /.project +eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/* eu.etaxonomy.taxeditor.application/.settings eu.etaxonomy.taxeditor.application/target eu.etaxonomy.taxeditor.bulkeditor/.settings @@ -8,6 +9,7 @@ eu.etaxonomy.taxeditor.cdmlib/.settings eu.etaxonomy.taxeditor.cdmlib/cdmlib-*.jar eu.etaxonomy.taxeditor.cdmlib/cdmlib-*.zip eu.etaxonomy.taxeditor.cdmlib/dist +eu.etaxonomy.taxeditor.cdmlib/lib/cdm-server* eu.etaxonomy.taxeditor.cdmlib/lib/cdmlib* eu.etaxonomy.taxeditor.cdmlib/lib/org.eclipse.equinox.servletbridge.extensionbundle-1.2.0.v20100503.jar eu.etaxonomy.taxeditor.cdmlib/lib/org.eclipse.equinox.transforms.hook-1.0.300.v20100719.jar @@ -35,7 +37,10 @@ eu.etaxonomy.taxeditor.store/.settings eu.etaxonomy.taxeditor.store/hibernate.log eu.etaxonomy.taxeditor.store/target eu.etaxonomy.taxeditor.test/screenshots/*.jpeg +eu.etaxonomy.taxeditor.test/src/test/resources/.cdm-server-ehcache +eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/remote-webapp eu.etaxonomy.taxeditor.test/target +eu.etaxonomy.taxeditor.webapp/lib/cdmlib-remote-webapp.war eu.etaxonomy.taxeditor/.settings eu.etaxonomy.taxeditor/target /runtime-taxeditor.product diff --git a/eu.etaxonomy.taxeditor.application/.classpath b/eu.etaxonomy.taxeditor.application/.classpath index 4c7e96f59..6bca977be 100644 --- a/eu.etaxonomy.taxeditor.application/.classpath +++ b/eu.etaxonomy.taxeditor.application/.classpath @@ -1,8 +1,8 @@ - + - + diff --git a/eu.etaxonomy.taxeditor.application/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.application/META-INF/MANIFEST.MF index 1d2489b97..7afc7ac53 100644 --- a/eu.etaxonomy.taxeditor.application/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.application/META-INF/MANIFEST.MF @@ -2,18 +2,20 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Application Bundle-SymbolicName: eu.etaxonomy.taxeditor.application;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.TaxonomicEditorPlugin Bundle-Vendor: EDIT Bundle-Localization: OSGI-INF/l10n/plugin Export-Package: eu.etaxonomy.taxeditor Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: org.apache.log4j, +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Import-Package: eu.etaxonomy.cdm.database, + org.apache.log4j, org.eclipse.equinox.app, org.eclipse.equinox.p2.repository.metadata, org.osgi.framework, - org.osgi.service.packageadmin + org.osgi.service.packageadmin, + org.springframework.remoting Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, eu.etaxonomy.taxeditor.store, diff --git a/eu.etaxonomy.taxeditor.application/plugin.xml b/eu.etaxonomy.taxeditor.application/plugin.xml index 40453cf2d..7453e2147 100644 --- a/eu.etaxonomy.taxeditor.application/plugin.xml +++ b/eu.etaxonomy.taxeditor.application/plugin.xml @@ -152,11 +152,23 @@ commandId="org.eclipse.ui.file.import" label="%command.label.3" style="push"> + + + + + + + + eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java index f02297f4b..51828f268 100644 --- a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java +++ b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchAdvisor.java @@ -8,6 +8,8 @@ import org.eclipse.ui.application.WorkbenchAdvisor; import org.eclipse.ui.application.WorkbenchWindowAdvisor; import org.eclipse.ui.statushandlers.AbstractStatusHandler; import org.eclipse.ui.statushandlers.StatusAdapter; +import org.springframework.remoting.RemoteAccessException; +import org.springframework.remoting.RemoteConnectFailureException; import eu.etaxonomy.taxeditor.model.MessagingUtils; @@ -22,6 +24,7 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils; public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { private CdmStatusHandler cdmStatusHandler; + /* * (non-Javadoc) * @see org.eclipse.ui.application.WorkbenchAdvisor#createWorkbenchWindowAdvisor(org.eclipse.ui.application.IWorkbenchWindowConfigurer) @@ -88,31 +91,73 @@ public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { */ class CdmStatusHandler extends AbstractStatusHandler { + private Throwable previousT; /* (non-Javadoc) * @see org.eclipse.ui.statushandlers.AbstractStatusHandler#handle(org.eclipse.ui.statushandlers.StatusAdapter, int) */ @Override public void handle(StatusAdapter statusAdapter, int style) { + if(statusAdapter.getStatus().matches(IStatus.ERROR)) { IStatus status = statusAdapter.getStatus(); Throwable t = statusAdapter.getStatus().getException(); + // NOTE : the global status handling mechanism in the case of + // runtime exceptions is called twice, once by the application + // throwing the exception and then by the rcp logging mechanism + // The check below is to make sure that the same exception is + // not shown twice in succession. + if(t != null && previousT == t) { + return; + } + previousT = t; // NOTE : Currently we only allow RuntimeExceptions since // allowing all kinds of exceptions would also include // those in generated status objects coming from from logging triggers // leading to a recursive infinite loop of : // initial exception thrown -> status handling -> dialog opening + logging of status -> // status handling -> dialog opening + logging of status ... and so on - if(t != null && t instanceof RuntimeException && ! "Widget is disposed".equals(t.getMessage())){ - MessagingUtils.errorDialog("Unexpected error", - null, - MessagingUtils.UNEXPECTED_ERROR_MESSAGE, - statusAdapter.getStatus().getPlugin(), - t, - true); - } + if(t != null && + t instanceof RuntimeException && + ! "Widget is disposed".equals(t.getMessage()) && + ! handleKnownRuntimeException(t,statusAdapter.getStatus().getPlugin())) { + + MessagingUtils.errorDialog("Unexpected error", + null, + MessagingUtils.UNEXPECTED_ERROR_MESSAGE, + statusAdapter.getStatus().getPlugin(), + t, + true); + + } + } + } + + private boolean handleKnownRuntimeException(Throwable t, String pluginId) { + if(t instanceof RemoteConnectFailureException || + t.getCause() instanceof RemoteConnectFailureException) { + MessagingUtils.errorDialog("Connection Failure", + null, + MessagingUtils.CONNECTION_FAILURE_MESSAGE + System.getProperty("line.separator"), + pluginId, + t, + true, + false); + return true; + } + if(t instanceof RemoteAccessException || + t.getCause() instanceof RemoteAccessException) { + MessagingUtils.errorDialog("Remote Access Error", + null, + MessagingUtils.REMOTE_ACCESS_FAILURE_MESSAGE + System.getProperty("line.separator"), + pluginId, + t, + true, + false); + return true; } + return false; } } diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java index a4d2e6816..bb5b360a3 100644 --- a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java +++ b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationWorkbenchWindowAdvisor.java @@ -12,6 +12,7 @@ import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.dialog.LoginDialog; import eu.etaxonomy.taxeditor.update.P2Util; +import eu.etaxonomy.taxeditor.util.ApplicationUtil; /** *

ApplicationWorkbenchWindowAdvisor class.

@@ -47,7 +48,7 @@ public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { configurer.setShowCoolBar(true); configurer.setShowStatusLine(true); configurer.setShowPerspectiveBar(true); - configurer.setTitle("EDIT Taxonomic Editor " + ApplicationUtil.getVersion()); + configurer.setTitle(ApplicationUtil.getTitle()); configurer.setShowProgressIndicator(true); CdmDataSourceRepository.createDefaultH2DataSource(); diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/DerivatePerspective.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/DerivatePerspective.java index b7e850932..1033f0c7c 100644 --- a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/DerivatePerspective.java +++ b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/DerivatePerspective.java @@ -13,9 +13,9 @@ import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPlaceholderFolderLayout; import org.eclipse.ui.progress.IProgressConstants; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart; import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator; -import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchView; import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart; import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart; @@ -30,16 +30,13 @@ public class DerivatePerspective extends Default { public static final String ADDITIONAL = "additional"; - /* (non-Javadoc) - * @see org.eclipse.ui.IPerspectiveFactory#createInitialLayout(org.eclipse.ui.IPageLayout) - */ @Override public void createInitialLayout(IPageLayout layout) { layout.addView(TaxonNavigator.ID, IPageLayout.LEFT, 0.25f, layout.getEditorArea()); layout.addView(DetailsViewPart.ID, IPageLayout.RIGHT, 0.6f, layout.getEditorArea()); - layout.addView(DerivateSearchView.ID, IPageLayout.TOP, 0.5f, layout.getEditorArea()); + layout.addView(DerivateView.ID, IPageLayout.BOTTOM, 0.5f, layout.getEditorArea()); layout.addView(DescriptiveViewPart.ID, IPageLayout.BOTTOM, 0.6f, TaxonNavigator.ID); diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/P2Util.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/P2Util.java index 9e1731c4c..e39cdb618 100644 --- a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/P2Util.java +++ b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/P2Util.java @@ -5,38 +5,18 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.IJobChangeEvent; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.equinox.internal.p2.ui.ProvUI; import org.eclipse.equinox.internal.p2.ui.model.ElementUtils; import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement; import org.eclipse.equinox.p2.repository.IRepository; import org.eclipse.equinox.p2.repository.IRepositoryManager; -import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager; -import org.eclipse.equinox.p2.core.IProvisioningAgent; -import org.eclipse.equinox.p2.core.ProvisionException; -import org.eclipse.equinox.p2.operations.ProvisioningJob; -import org.eclipse.equinox.p2.operations.ProvisioningSession; -import org.eclipse.equinox.p2.operations.RepositoryTracker; -import org.eclipse.equinox.p2.operations.Update; -import org.eclipse.equinox.p2.operations.UpdateOperation; import org.eclipse.equinox.p2.ui.ProvisioningUI; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PlatformUI; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceReference; -import eu.etaxonomy.taxeditor.ApplicationUtil; import eu.etaxonomy.taxeditor.TaxonomicEditorPlugin; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; +import eu.etaxonomy.taxeditor.util.ApplicationUtil; /** * This class is a utility class for updating the editor from a p2 update site, @@ -140,141 +120,4 @@ public class P2Util { } PreferencesUtil.setP2Repositories(repoElements); } - - /** - * - * - */ - public static void checkForUpdates() { - // the main job which performs the update - Job updateJob = new Job("Update Job") { - @Override - public IStatus run(IProgressMonitor monitor) { - return doCheckForUpdates(monitor); - } - }; - updateJob.schedule(); - } - - /** - * @param monitor - * @return - */ - private static IStatus doCheckForUpdates(IProgressMonitor monitor) { - - BundleContext bundleContext = TaxonomicEditorPlugin.getContext(); - ServiceReference reference = bundleContext.getServiceReference(IProvisioningAgent.SERVICE_NAME); - if (reference == null) { - IStatus errorStatus = new Status(IStatus.ERROR, TaxonomicEditorPlugin.PLUGIN_ID, - "No provisioning agent found. This application is not set up for updates."); - return errorStatus; - } - - final IProvisioningAgent agent = (IProvisioningAgent) bundleContext.getService(reference); - IStatus updateStatus; - try { - updateStatus = P2Util.checkForUpdates(agent, monitor); - MessagingUtils.info(updateStatus); - } finally { - bundleContext.ungetService(reference); - } - return updateStatus; - } - - /** - * @param agent - * @param monitor - * @return - * @throws OperationCanceledException - */ - static IStatus checkForUpdates(IProvisioningAgent agent, final IProgressMonitor monitor) { - ProvisioningSession session = new ProvisioningSession(agent); - // the default update operation looks for updates to the currently - // running profile, using the default profile root marker. To change - // which installable units are being updated, use the more detailed - // constructors. - final UpdateOperation operation = new UpdateOperation(session); -// try { -// setUpdateRepositories(operation); -// } catch (URISyntaxException e) { -// MessagingUtils.errorDialog("Invalid update site URI", -// operation, -// "The update site URI has an invalid syntax", -// TaxonomicEditorPlugin.PLUGIN_ID, -// e, -// false); -// return null; -// } - - final IStatus status = operation.resolveModal(monitor); - - if (status.getCode() == UpdateOperation.STATUS_NOTHING_TO_UPDATE) { - return status; - } - - if (status.isOK() && status.getSeverity() != IStatus.ERROR) { - // We need this block of code to be in async execution - // since the confirm dialogs work only on the UI thread - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - String updates = ""; - Update[] possibleUpdates = operation - .getPossibleUpdates(); - for (Update update : possibleUpdates) { - updates += update + "\n"; - } - - boolean doInstall = MessagingUtils.confirmDialog("Updates available", "Do you want to install the available updates ?"); - // We may need to think whether we still run in async mode once - // the user agrees to update. Maybe be reasonable to change to blocking - // from this point until the update is complete. - - // More complex status handling might include showing the user what - // updates are available if there are multiples, differentiating - // patches vs. updates, etc. In this example, we simply update as - // suggested by the operation. - if(doInstall) { - ProvisioningJob provisioningJob = operation.getProvisioningJob(monitor); - if (provisioningJob == null) { - MessagingUtils.messageDialog("Error in performing update", - operation, - "ProvisioningJob could not be created." + System.getProperty("line.separator") + - "Either this application does not support p2 software installation or this application has been launched from within the Eclipse IDE", - null, - false); - - } else { - // register a job change listener to track - // installation progress and notify user upon success - provisioningJob - .addJobChangeListener(new JobChangeAdapter() { - @Override - public void done(IJobChangeEvent event) { - if (event.getResult().isOK()) { - // We need this block of code to be in async execution - // since the confirm dialogs work only on the UI thread - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - boolean restart = MessagingUtils.confirmDialog( - "Updates installed, restart?", - "Updates have been installed successfully, do you want to restart?"); - if (restart) { - PlatformUI.getWorkbench().restart(); - } - } - }); - } - super.done(event); - } - }); - provisioningJob.schedule(); - } - } - } - }); - } - return status; - } } diff --git a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/UpdateHandler.java b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/UpdateHandler.java index bca8c9923..a835cdc5c 100644 --- a/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/UpdateHandler.java +++ b/eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/update/UpdateHandler.java @@ -23,40 +23,40 @@ import org.eclipse.jface.wizard.WizardDialog; */ public class UpdateHandler extends PreloadingRepositoryHandler { - boolean hasNoRepos = false; + boolean hasNoRepos = false; - @Override + @Override protected void doExecute(LoadMetadataRepositoryJob job) { - if (hasNoRepos) { - return; - } - UpdateOperation operation = getProvisioningUI().getUpdateOperation(null, null); + if (hasNoRepos) { + return; + } + UpdateOperation operation = getProvisioningUI().getUpdateOperation(null, null); - // check for updates - operation.resolveModal(null); - if (getProvisioningUI().getPolicy().continueWorkingWithOperation(operation, getShell())) { - if (UpdateSingleIUWizard.validFor(operation)) { - // Special case for only updating a single root - UpdateSingleIUWizard wizard = new UpdateSingleIUWizard(getProvisioningUI(), operation); - WizardDialog dialog = new WizardDialog(getShell(), wizard); - dialog.create(); - dialog.open(); - } else { - // Open the normal version of the update wizard - getProvisioningUI().openUpdateWizard(false, operation, job); - } - } - } + // check for updates + operation.resolveModal(null); + if (getProvisioningUI().getPolicy().continueWorkingWithOperation(operation, getShell())) { + if (UpdateSingleIUWizard.validFor(operation)) { + // Special case for only updating a single root + UpdateSingleIUWizard wizard = new UpdateSingleIUWizard(getProvisioningUI(), operation); + WizardDialog dialog = new WizardDialog(getShell(), wizard); + dialog.create(); + dialog.open(); + } else { + // Open the normal version of the update wizard + getProvisioningUI().openUpdateWizard(false, operation, job); + } + } + } - @Override + @Override protected boolean preloadRepositories() { - hasNoRepos = false; - RepositoryTracker repoMan = getProvisioningUI().getRepositoryTracker(); - if (repoMan.getKnownRepositories(getProvisioningUI().getSession()).length == 0) { - hasNoRepos = true; - return false; - } - return super.preloadRepositories(); - } + hasNoRepos = false; + RepositoryTracker repoMan = getProvisioningUI().getRepositoryTracker(); + if (repoMan.getKnownRepositories(getProvisioningUI().getSession()).length == 0) { + hasNoRepos = true; + return false; + } + return super.preloadRepositories(); + } } diff --git a/eu.etaxonomy.taxeditor.application/src/main/resources/log4j.properties b/eu.etaxonomy.taxeditor.application/src/main/resources/log4j.properties deleted file mode 100644 index c7c943eb9..000000000 --- a/eu.etaxonomy.taxeditor.application/src/main/resources/log4j.properties +++ /dev/null @@ -1,29 +0,0 @@ -### ************ APPENDER ***********************************### - -### direct log messages to stdout ### -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### direct messages to file hibernate.log ### -log4j.appender.file=org.apache.log4j.FileAppender -log4j.appender.file.File=taxeditor.log -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### ************* LOG LEVELS *********************************### - -### set log levels - for more verbose logging change 'info' to 'debug' ### -### levels: error, warn, debug, info -log4j.rootLogger=INFO, stdout - -### set directory-specific levels below - -### basic level for editor directory -log4j.logger.eu.etaxonomy.taxeditor.editor = WARN, stdout - -log4j.logger.eu.etaxonomy.taxeditor.editor.handler = DEBUG, stdout - -### log level for conversation handler -#log4j.logger.eu.etaxonomy.cdm.api.application = DEBUG, stdout diff --git a/eu.etaxonomy.taxeditor.bulkeditor/.classpath b/eu.etaxonomy.taxeditor.bulkeditor/.classpath index 5ff90b230..264aebb56 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/.classpath +++ b/eu.etaxonomy.taxeditor.bulkeditor/.classpath @@ -1,8 +1,8 @@ - - - - - - - - + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.bulkeditor/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.bulkeditor/META-INF/MANIFEST.MF index 7f53d0534..37a72a3f4 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.bulkeditor/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Bulkeditor Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.bulkeditor;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin Bundle-Vendor: EDIT Export-Package: eu.etaxonomy.taxeditor.annotatedlineeditor, @@ -19,9 +19,10 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.expressions, eu.etaxonomy.taxeditor.store, eu.etaxonomy.taxeditor.cdmlib -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy -Import-Package: org.eclipse.core.runtime, +Import-Package: eu.etaxonomy.taxeditor.editor, + org.eclipse.core.runtime, org.eclipse.equinox.app, org.eclipse.jface.text, org.eclipse.jface.text.presentation, diff --git a/eu.etaxonomy.taxeditor.bulkeditor/plugin.xml b/eu.etaxonomy.taxeditor.bulkeditor/plugin.xml index f408f10ff..0f3dae0a7 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/plugin.xml +++ b/eu.etaxonomy.taxeditor.bulkeditor/plugin.xml @@ -115,8 +115,9 @@ - + + + eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java index 5469cb069..3243ffbe4 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineDocumentProvider.java @@ -237,7 +237,8 @@ public class AnnotatedLineDocumentProvider extends AbstractDocumentProvider { if (annotation instanceof IEntityContainer) { IEntityContainer container = (IEntityContainer) annotation; if (container.isMarkedAsNew() || container.isDirty()) { - persistenceService.save(container.getEntity()); // save + Object entity = persistenceService.save(container.getEntity()); // save + container.setEntity(entity); container.setDirty(false); container.markAsNew(false); } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java index 08876fef0..e1208b01c 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/AnnotatedLineEditor.java @@ -1,12 +1,12 @@ // $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. -*/ + * 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.annotatedlineeditor; import java.util.Iterator; @@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -47,290 +48,293 @@ import eu.etaxonomy.taxeditor.store.CdmStore; */ public class AnnotatedLineEditor extends TextEditor implements IConversationEnabled, IPostOperationEnabled { - protected ConversationHolder conversation; - - private IEntityPersistenceService persistenceService; - protected ILineDisplayStrategy lineDisplayStrategy; - - - /** - *

Constructor for AnnotatedLineEditor.

- * - * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. - */ - public AnnotatedLineEditor(ConversationHolder conversation) { - this.conversation = conversation; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.editors.text.TextEditor#doSetInput(org.eclipse.ui.IEditorInput) - */ - /** {@inheritDoc} */ - @Override - protected void doSetInput(IEditorInput input) throws CoreException { - - AnnotatedLineDocumentProvider provider = new AnnotatedLineDocumentProvider(input); - - provider.setLineDisplayStrategy(lineDisplayStrategy, input); - setDocumentProvider(provider); - - super.doSetInput(input); - } - - /** - *

Setter for the field persistenceService.

- * - * @param persistenceService a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService} object. - */ - protected void setPersistenceService( - IEntityPersistenceService persistenceService) { - this.persistenceService = persistenceService; - } - - /** - *

Getter for the field persistenceService.

- * - * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService} object. - */ - protected IEntityPersistenceService getPersistenceService() { - return persistenceService; - } - - /** - *

Setter for the field lineDisplayStrategy.

- * - * @param lineDisplayStrategy a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.ILineDisplayStrategy} object. - */ - protected void setLineDisplayStrategy( - ILineDisplayStrategy lineDisplayStrategy) { - this.lineDisplayStrategy = lineDisplayStrategy; - } - - /** {@inheritDoc} */ - @Override - protected ISourceViewer createSourceViewer(Composite parent, - IVerticalRuler ruler, int styles) { - - fAnnotationAccess= getAnnotationAccess(); - fOverviewRuler= createOverviewRuler(getSharedColors()); - LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(), - isOverviewRulerVisible(), styles); -// isOverviewRulerVisible(), styles | SWT.WRAP); - getSourceViewerDecorationSupport(viewer); - - return viewer; - } - - /** - * Create an annotated line with an "empty" entity, i.e. using the editor - * input's default entity type and a zero-length title cache. - * - * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. - */ - public LineAnnotation createAnnotatedLineNewObject() { - - // Create new object - - AnnotatedLineDocumentProvider documentProvider = (AnnotatedLineDocumentProvider) getDocumentProvider(); - IEntityCreator entityCreator = documentProvider.getEntityCreator(getEditorInput()); - Object entity = entityCreator.createEntity(null); - - LineAnnotation annotation = createAnnotatedLine(entity); - if (annotation != null) { - annotation.markAsNew(true); - } - return annotation; - } - - /** - * Create an annotated line, first creating an entity of type "key" - this key - * must be recognized by the editor's entity creator. - * - * @param key a {@link java.lang.Object} object. - * @param titleCache a {@link java.lang.String} object. - * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. - */ - public LineAnnotation createAnnotatedLineNewObject(Object key, String titleCache) { - - - - // Create new object - Object entity = ((AnnotatedLineDocumentProvider) getDocumentProvider()). - getEntityCreator(getEditorInput()).createEntity(key, titleCache); - // checks if the creator also saves the entity (in a different conversation), in which case - // we need to bind back this editors conversation - // we also need to reload the entity because the conversation used to - // to create / save the entity may have been closed - if(entity != null && ((AnnotatedLineDocumentProvider) getDocumentProvider()).getEntityCreator(getEditorInput()).savesEntity()) { - getConversationHolder().bind(); - Object object = CdmStore.getService(IOccurrenceService.class).load(((CdmBase)entity).getUuid()); - entity = HibernateProxyHelper.deproxy(object); - } - - if(entity == null) { - return null; - } - LineAnnotation annotation = createAnnotatedLine(entity); - if (annotation != null) { - annotation.markAsNew(true); - } - - return annotation; - - } - - @Override - public boolean isDirty() { - return super.isDirty(); - } - - /** - * Creates an annotated line at the end of the document. The annotation contains the entity. - * - * @param entity a {@link java.lang.Object} object. - * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. - */ - public LineAnnotation createAnnotatedLine(Object entity) { - - IEditorInput input = getEditorInput(); - AnnotatedLineDocumentProvider provider = (AnnotatedLineDocumentProvider) getDocumentProvider(); - - LineAnnotation annotation = null; - try { - annotation = provider.createAnnotatedLine(input, entity); - - // Jump to new line - IAnnotationModel model = provider.getAnnotationModel(input); - if(model != null){ - int start= model.getPosition(annotation).getOffset(); - selectAndReveal(start, 0); - } - - } catch (BadLocationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return annotation; - } - - /** - *

removeAnnotatedLine

- * - * @param lineno a int. - */ - public void removeAnnotatedLine(int lineno) { - ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(lineno); - } - - /** - *

removeAnnotatedLine

- * - * @param annotation a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. - */ - public void removeAnnotatedLine(LineAnnotation annotation) { - ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(annotation); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSave(org.eclipse.core.runtime.IProgressMonitor) - */ - /** {@inheritDoc} */ - @Override - public void doSave(IProgressMonitor progressMonitor) { - if (getConversationHolder() != null) { - if( ! getConversationHolder().isBound()){ - getConversationHolder().bind(); - } - super.doSave(progressMonitor); - getConversationHolder().commit(true); - } else { - super.doSave(progressMonitor); - } - firePropertyChange(PROP_DIRTY); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.texteditor.AbstractTextEditor#setFocus() - */ - /** {@inheritDoc} */ - @Override - public void setFocus() { - super.setFocus(); - if (getConversationHolder() != null) { - getConversationHolder().bind(); - } - PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus(); - // TODO pass focus to underlying widgets - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() - */ - /** - *

getConversationHolder

- * - * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. - */ - @Override + protected ConversationHolder conversation; + + private IEntityPersistenceService persistenceService; + protected ILineDisplayStrategy lineDisplayStrategy; + + + /** + *

Constructor for AnnotatedLineEditor.

+ * + * @param conversation a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. + */ + public AnnotatedLineEditor(ConversationHolder conversation) { + this.conversation = conversation; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.editors.text.TextEditor#doSetInput(org.eclipse.ui.IEditorInput) + */ + /** {@inheritDoc} */ + @Override + protected void doSetInput(IEditorInput input) throws CoreException { + + AnnotatedLineDocumentProvider provider = new AnnotatedLineDocumentProvider(input); + + provider.setLineDisplayStrategy(lineDisplayStrategy, input); + setDocumentProvider(provider); + + super.doSetInput(input); + } + + /** + *

Setter for the field persistenceService.

+ * + * @param persistenceService a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService} object. + */ + protected void setPersistenceService( + IEntityPersistenceService persistenceService) { + this.persistenceService = persistenceService; + } + + /** + *

Getter for the field persistenceService.

+ * + * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService} object. + */ + protected IEntityPersistenceService getPersistenceService() { + return persistenceService; + } + + /** + *

Setter for the field lineDisplayStrategy.

+ * + * @param lineDisplayStrategy a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.ILineDisplayStrategy} object. + */ + protected void setLineDisplayStrategy( + ILineDisplayStrategy lineDisplayStrategy) { + this.lineDisplayStrategy = lineDisplayStrategy; + } + + /** {@inheritDoc} */ + @Override + protected ISourceViewer createSourceViewer(Composite parent, + IVerticalRuler ruler, int styles) { + + fAnnotationAccess= getAnnotationAccess(); + fOverviewRuler= createOverviewRuler(getSharedColors()); + LineSelectionViewer viewer = new LineSelectionViewer(parent, ruler, getOverviewRuler(), + isOverviewRulerVisible(), styles); + // isOverviewRulerVisible(), styles | SWT.WRAP); + getSourceViewerDecorationSupport(viewer); + + return viewer; + } + + /** + * Create an annotated line with an "empty" entity, i.e. using the editor + * input's default entity type and a zero-length title cache. + * + * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. + */ + public LineAnnotation createAnnotatedLineNewObject() { + + // Create new object + + AnnotatedLineDocumentProvider documentProvider = (AnnotatedLineDocumentProvider) getDocumentProvider(); + IEntityCreator entityCreator = documentProvider.getEntityCreator(getEditorInput()); + Object entity = entityCreator.createEntity(null); + + LineAnnotation annotation = createAnnotatedLine(entity); + if (annotation != null) { + annotation.markAsNew(true); + } + return annotation; + } + + /** + * Create an annotated line, first creating an entity of type "key" - this key + * must be recognized by the editor's entity creator. + * + * @param key a {@link java.lang.Object} object. + * @param titleCache a {@link java.lang.String} object. + * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. + */ + public LineAnnotation createAnnotatedLineNewObject(Object key, String titleCache) { + + + + // Create new object + Object entity = ((AnnotatedLineDocumentProvider) getDocumentProvider()). + getEntityCreator(getEditorInput()).createEntity(key, titleCache); + // checks if the creator also saves the entity (in a different conversation), in which case + // we need to bind back this editors conversation + // we also need to reload the entity because the conversation used to + // to create / save the entity may have been closed + if(entity != null && ((AnnotatedLineDocumentProvider) getDocumentProvider()).getEntityCreator(getEditorInput()).savesEntity()) { + getConversationHolder().bind(); + Object object = CdmStore.getService(IOccurrenceService.class).load(((CdmBase)entity).getUuid()); + entity = HibernateProxyHelper.deproxy(object); + } + + if(entity == null) { + return null; + } + LineAnnotation annotation = createAnnotatedLine(entity); + if (annotation != null) { + annotation.markAsNew(true); + } + + return annotation; + + } + + @Override + public boolean isDirty() { + return super.isDirty(); + } + + /** + * Creates an annotated line at the end of the document. The annotation contains the entity. + * + * @param entity a {@link java.lang.Object} object. + * @return a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. + */ + public LineAnnotation createAnnotatedLine(Object entity) { + + IEditorInput input = getEditorInput(); + AnnotatedLineDocumentProvider provider = (AnnotatedLineDocumentProvider) getDocumentProvider(); + + LineAnnotation annotation = null; + try { + annotation = provider.createAnnotatedLine(input, entity); + + // Jump to new line + IAnnotationModel model = provider.getAnnotationModel(input); + if(model != null){ + int start= model.getPosition(annotation).getOffset(); + selectAndReveal(start, 0); + } + + } catch (BadLocationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return annotation; + } + + /** + *

removeAnnotatedLine

+ * + * @param lineno a int. + */ + public void removeAnnotatedLine(int lineno) { + ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(lineno); + } + + /** + *

removeAnnotatedLine

+ * + * @param annotation a {@link eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation} object. + */ + public void removeAnnotatedLine(LineAnnotation annotation) { + ((AnnotatedLineDocumentProvider) getDocumentProvider()).removeAnnotatedLine(annotation); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSave(org.eclipse.core.runtime.IProgressMonitor) + */ + /** {@inheritDoc} */ + @Override + public void doSave(IProgressMonitor progressMonitor) { + if (getConversationHolder() != null) { + if( ! getConversationHolder().isBound()){ + getConversationHolder().bind(); + } + super.doSave(progressMonitor); + getConversationHolder().commit(true); + } else { + super.doSave(progressMonitor); + } + firePropertyChange(PROP_DIRTY); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractTextEditor#setFocus() + */ + /** {@inheritDoc} */ + @Override + public void setFocus() { + super.setFocus(); + if (getConversationHolder() != null) { + getConversationHolder().bind(); + } + ((AbstractBulkEditorInput)getEditorInput()).bind(); + PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus(); + // TODO pass focus to underlying widgets + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() + */ + /** + *

getConversationHolder

+ * + * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. + */ + @Override public ConversationHolder getConversationHolder() { - return conversation; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap) - */ - /** {@inheritDoc} */ - @Override + return conversation; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap) + */ + /** {@inheritDoc} */ + @Override public void update(CdmDataChangeMap changeEvents) {} - /** - * Refreshes text in all lines. - */ - protected void refreshLineDisplay() { - IDocumentProvider provider = getDocumentProvider(); - IEditorInput input = getEditorInput(); - IAnnotationModel model = provider.getAnnotationModel(input); - Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator(); - while (iter.hasNext()) { - Object next = iter.next(); - if (next instanceof LineAnnotation) { - LineAnnotation annotation = (LineAnnotation) next; - ((AnnotatedLineDocumentProvider) getDocumentProvider()). - updateLineFromAnnotation(annotation); - } - } - } - - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) - */ - /** {@inheritDoc} */ - @Override + /** + * Refreshes text in all lines. + */ + protected void refreshLineDisplay() { + IDocumentProvider provider = getDocumentProvider(); + IEditorInput input = getEditorInput(); + IAnnotationModel model = provider.getAnnotationModel(input); + Iterator iter = getDocumentProvider().getAnnotationModel(getEditorInput()).getAnnotationIterator(); + while (iter.hasNext()) { + Object next = iter.next(); + if (next instanceof LineAnnotation) { + LineAnnotation annotation = (LineAnnotation) next; + ((AnnotatedLineDocumentProvider) getDocumentProvider()). + updateLineFromAnnotation(annotation); + } + } + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) + */ + /** {@inheritDoc} */ + @Override public boolean postOperation(CdmBase objectAffectedByOperation) { - refreshLineDisplay(); - - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.editors.text.TextEditor#dispose() - */ - /** {@inheritDoc} */ - @Override - public void dispose() { - super.dispose(); - conversation.close(); - } - - /** - *

onComplete

- * - * @return a boolean. - */ - @Override + refreshLineDisplay(); + + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.editors.text.TextEditor#dispose() + */ + /** {@inheritDoc} */ + @Override + public void dispose() { + super.dispose(); + conversation.close(); + ((AbstractBulkEditorInput)getEditorInput()).dispose(); + } + + /** + *

onComplete

+ * + * @return a boolean. + */ + @Override public boolean onComplete() { - // TODO Auto-generated method stub - return false; - } + // TODO Auto-generated method stub + return false; + } + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityContainer.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityContainer.java index 9761f55f4..230d5240e 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityContainer.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityContainer.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -28,54 +28,56 @@ public interface IEntityContainer { * @return a T object. */ T getEntity(); - + + void setEntity(Object entity); + /** *

getEditableText

* * @return a {@link java.lang.String} object. */ String getEditableText(); - + /** *

getAttachedEntities

* * @return a {@link java.util.Set} object. */ Set getAttachedEntities(); - + /** *

markAsMerged

* * @param mergeTarget a T object. */ void markAsMerged(T mergeTarget); - + /** *

markAsDeleted

*/ void markAsDeleted(); - + /** *

markAsNew

* * @param isNew a boolean. */ void markAsNew(boolean isNew); - + /** *

isMarkedAsMerged

* * @return a boolean. */ boolean isMarkedAsMerged(); - + /** *

isMarkedAsDeleted

* * @return a boolean. */ boolean isMarkedAsDeleted(); - + /** *

isMarkedAsNew

* diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityPersistenceService.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityPersistenceService.java index 39acd4ff0..b57e8b7bc 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityPersistenceService.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/IEntityPersistenceService.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -24,23 +24,23 @@ import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableExcepti * @version 1.0 */ public interface IEntityPersistenceService { - + /** *

create

* * @param entity a {@link java.lang.Object} object. * @return a boolean. */ - boolean create(T entity); - + T create(T entity); + /** *

save

* * @param entity a {@link java.lang.Object} object. * @return a boolean. */ - boolean save(T entity); - + T save(T entity); + /** *

merge

* @@ -49,13 +49,13 @@ public interface IEntityPersistenceService { * @return a boolean. */ boolean merge(T entity, T mergeTarget); - + /** *

delete

* * @param entity a {@link java.lang.Object} object. * @return a boolean. - * @throws ReferencedObjectUndeletableException + * @throws ReferencedObjectUndeletableException */ boolean delete(T entity) throws ReferencedObjectUndeletableException; } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineAnnotation.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineAnnotation.java index 6d30942d8..ef4f124b7 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineAnnotation.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/annotatedlineeditor/LineAnnotation.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -29,7 +29,7 @@ public class LineAnnotation extends Annotation implements IEntityContainer /** Constant TYPE_GENERIC="Annotation.TYPE_UNKNOWN" */ public static final String TYPE_GENERIC = Annotation.TYPE_UNKNOWN; - + private T entity; private ILineDisplayStrategy lineDisplayStrategy; @@ -38,7 +38,7 @@ public class LineAnnotation extends Annotation implements IEntityContainer private boolean markedAsNew; private T mergeTarget; - + /** *

Constructor for LineAnnotation.

* @@ -51,7 +51,7 @@ public class LineAnnotation extends Annotation implements IEntityContainer this.lineDisplayStrategy = lineDisplayStrategy; setType(TYPE_GENERIC); } - + /* (non-Javadoc) * @see org.eclipse.jface.text.source.Annotation#getText() */ @@ -60,7 +60,7 @@ public class LineAnnotation extends Annotation implements IEntityContainer public String getText() { return getEditableText(); } - + /* (non-Javadoc) * @see org.eclipse.jface.text.source.Annotation#setText(java.lang.String) */ @@ -68,17 +68,17 @@ public class LineAnnotation extends Annotation implements IEntityContainer @Override public void setText(String text) { lineDisplayStrategy.setText(text, entity); - dirty = true; + dirty = true; super.setText(text); } - + /** {@inheritDoc} */ @Override public String toString() { // For debugging return getText(); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#getAttachedEntities() */ @@ -87,7 +87,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a {@link java.util.Set} object. */ - public Set getAttachedEntities() { + @Override + public Set getAttachedEntities() { // TODO Auto-generated method stub return null; } @@ -100,7 +101,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a T object. */ - public T getEntity() { + @Override + public T getEntity() { return entity; } @@ -112,7 +114,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a {@link java.lang.String} object. */ - public String getEditableText() { + @Override + public String getEditableText() { return lineDisplayStrategy.getText(entity); } @@ -124,7 +127,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a T object. */ - public T getMergeTarget() { + @Override + public T getMergeTarget() { return mergeTarget; } @@ -136,7 +140,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a boolean. */ - public boolean isMarkedAsDeleted() { + @Override + public boolean isMarkedAsDeleted() { return super.isMarkedDeleted(); } @@ -148,7 +153,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a boolean. */ - public boolean isMarkedAsMerged() { + @Override + public boolean isMarkedAsMerged() { return markedAsMerged; } @@ -160,7 +166,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a boolean. */ - public boolean isMarkedAsNew() { + @Override + public boolean isMarkedAsNew() { return markedAsNew; } @@ -170,7 +177,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer /** *

markAsDeleted

*/ - public void markAsDeleted() { + @Override + public void markAsDeleted() { super.markDeleted(true); if (!isMarkedAsMerged()) { lineDisplayStrategy.setStatusMessage(entity + " deleted.", entity); @@ -185,7 +193,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @param mergeTarget a T object. */ - public void markAsMerged(T mergeTarget) { + @Override + public void markAsMerged(T mergeTarget) { this.mergeTarget = mergeTarget; markedAsMerged = true; lineDisplayStrategy.setStatusMessage("'" + entity + "' merged into '" + mergeTarget + "'.", entity); @@ -195,7 +204,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#markAsNew() */ /** {@inheritDoc} */ - public void markAsNew(boolean isNew) { + @Override + public void markAsNew(boolean isNew) { markedAsNew = isNew; lineDisplayStrategy.setStatusMessage("New entity created.", entity); } @@ -204,7 +214,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * @see eu.etaxonomy.taxeditor.bulkeditor.IEntityContainer#setDirty(boolean) */ /** {@inheritDoc} */ - public void setDirty(boolean dirty) { + @Override + public void setDirty(boolean dirty) { this.dirty = dirty; } @@ -216,7 +227,8 @@ public class LineAnnotation extends Annotation implements IEntityContainer * * @return a boolean. */ - public boolean isDirty() { + @Override + public boolean isDirty() { return dirty; } @@ -228,4 +240,12 @@ public class LineAnnotation extends Annotation implements IEntityContainer public String getHoverText() { return lineDisplayStrategy.getHoverText(entity); } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityContainer#setEntity(java.lang.Object) + */ + @Override + public void setEntity(Object entity) { + this.entity = (T) entity; + } } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java index 4c97dbfb5..5b7b601e7 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditor.java @@ -171,6 +171,7 @@ public class BulkEditor extends AnnotatedLineEditor implements IPartContentHasDe displayWarningDialog(); isInitialFocus = false; } + super.setFocus(); } private void displayWarningDialog() { diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java index a6ae0fd77..613ee50fb 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/BulkEditorLineDisplay.java @@ -12,7 +12,6 @@ package eu.etaxonomy.taxeditor.bulkeditor; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.action.IStatusLineManager; @@ -26,13 +25,11 @@ import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.IAnnotatableEntity; import eu.etaxonomy.cdm.model.common.ICdmBase; import eu.etaxonomy.cdm.model.common.Marker; -import eu.etaxonomy.cdm.model.common.MarkerType; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.taxeditor.annotatedlineeditor.EntityListener; import eu.etaxonomy.taxeditor.annotatedlineeditor.ILineDisplayStrategy; import eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput; -import eu.etaxonomy.taxeditor.preference.PreferencesUtil; /** *

BulkEditorLineDisplay class.

@@ -99,8 +96,6 @@ public class BulkEditorLineDisplay implements ILineDisplayStrategy { if (entity instanceof IAnnotatableEntity) { IAnnotatableEntity annotatableEntity = (IAnnotatableEntity) HibernateProxyHelper.deproxy(entity); - Map editMarkerTypePreferences = PreferencesUtil.getEditMarkerTypePreferences(); - String markerText = ""; List markers = new ArrayList(); for (Marker marker : annotatableEntity.getMarkers()) { diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertPerson2TeamHandler.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertPerson2TeamHandler.java index a016571e2..dd2a4979d 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertPerson2TeamHandler.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertPerson2TeamHandler.java @@ -78,11 +78,11 @@ public class ConvertPerson2TeamHandler extends AbstractHandler { if (object instanceof Person){ Person person = HibernateProxyHelper.deproxy(object, Person.class); try { - team = CdmStore.getService(IAgentService.class).convertPerson2Team(person); + team = CdmStore.getService(IAgentService.class).convertPerson2Team(person.getUuid()); } catch (IllegalArgumentException e) { MessagingUtils.errorDialog("Can not convert Person into a Team", null, e.getLocalizedMessage(), TaxeditorBulkeditorPlugin.PLUGIN_ID,e, true); } catch (MergeException e) { - MessagingUtils.informationDialog("Convert not possible", "Person can not be transformed into team as it is referenced in a way that does not allow converting"); + MessagingUtils.informationDialog("Convert not possible", "Person can not be transformed into team as it is already part of a team."); } }else{ MessagingUtils.informationDialog("Can not convert Person into a Team", "convert Person to Team can only be called on a person."); diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertTeam2PersonHandler.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertTeam2PersonHandler.java index 846ada15f..047cad68c 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertTeam2PersonHandler.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/ConvertTeam2PersonHandler.java @@ -20,10 +20,8 @@ import org.eclipse.ui.IEditorPart; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.texteditor.IDocumentProvider; -import eu.etaxonomy.cdm.api.service.AgentServiceImpl; import eu.etaxonomy.cdm.api.service.IAgentService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.agent.AgentBase; import eu.etaxonomy.cdm.model.agent.Person; import eu.etaxonomy.cdm.model.agent.Team; import eu.etaxonomy.cdm.strategy.merge.MergeException; @@ -47,9 +45,9 @@ public class ConvertTeam2PersonHandler extends AbstractHandler { @Override public Person execute(ExecutionEvent event) throws ExecutionException { ISelection selection = HandlerUtil.getCurrentSelection(event); - + IEditorPart editor = HandlerUtil.getActiveEditor(event); - + IEditorInput input = editor.getEditorInput(); if (editor.isDirty()){ boolean proceed = MessageDialog.openQuestion(null, @@ -61,17 +59,17 @@ public class ConvertTeam2PersonHandler extends AbstractHandler { } } if((input instanceof IEntityPersistenceService) && (selection instanceof IStructuredSelection)){ - - + + IDocumentProvider provider = ((BulkEditor) editor).getDocumentProvider(); - LineAnnotationModel model = + LineAnnotationModel model = (LineAnnotationModel) provider.getAnnotationModel(input); - - + + IStructuredSelection structuredSelection = (IStructuredSelection) selection; - + IEntityPersistenceService persistenceService = (IEntityPersistenceService) input; - + Person person ; for(Object object : structuredSelection.toList()){ LineAnnotation annotation = (LineAnnotation) model.getAnnotation(object); @@ -79,7 +77,7 @@ public class ConvertTeam2PersonHandler extends AbstractHandler { if (object instanceof Team){ Team team = HibernateProxyHelper.deproxy(object, Team.class); try { - person = CdmStore.getService(IAgentService.class).convertTeam2Person(team); + person = CdmStore.getService(IAgentService.class).convertTeam2Person(team.getUuid()); } catch (IllegalArgumentException e) { MessagingUtils.informationDialog("Can not convert Team to Person", e.getMessage()); } catch (MergeException e) { @@ -88,7 +86,7 @@ public class ConvertTeam2PersonHandler extends AbstractHandler { }else{ MessagingUtils.informationDialog("Can not convert Team to Person", "convertTeam2Person can only be called on a team."); } - + if (person != null){ ((BulkEditor) editor).removeAnnotatedLine(annotation); ((BulkEditor) editor).createAnnotatedLine(person); diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/DeleteHandler.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/DeleteHandler.java index 041359836..08d0355e8 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/DeleteHandler.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/handler/DeleteHandler.java @@ -1,18 +1,17 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.bulkeditor.handler; -import java.util.Iterator; -import java.util.Set; -import java.util.UUID; +import java.util.ArrayList; +import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -22,13 +21,10 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IViewReference; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.IWorkbenchPage; +import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; import eu.etaxonomy.cdm.api.service.DeleteResult; import eu.etaxonomy.cdm.api.service.IAgentService; import eu.etaxonomy.cdm.api.service.IGroupService; @@ -38,11 +34,10 @@ import eu.etaxonomy.cdm.api.service.IReferenceService; import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.api.service.IUserService; import eu.etaxonomy.cdm.api.service.config.NameDeletionConfigurator; -import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; +import eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase; -import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.Group; -import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.User; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; @@ -50,18 +45,16 @@ import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonBase; -import eu.etaxonomy.cdm.persistence.dao.hibernate.HibernateBeanInitializer; -import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService; import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotation; import eu.etaxonomy.taxeditor.annotatedlineeditor.LineAnnotationModel; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin; -import eu.etaxonomy.taxeditor.bulkeditor.referencingobjects.ReferencingObjectsView; +import eu.etaxonomy.taxeditor.model.DeleteResultMessagingUtils; import eu.etaxonomy.taxeditor.model.MessagingUtils; -import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; -import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.CdmStore; +import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog; +import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteTaxonConfiguratorComposite; /** @@ -76,119 +69,136 @@ public class DeleteHandler extends AbstractHandler { */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - + ISelection selection = HandlerUtil.getCurrentSelection(event); - + IEditorPart editor = HandlerUtil.getActiveEditor(event); - + IEditorInput input = editor.getEditorInput(); - + if((input instanceof IEntityPersistenceService) && (selection instanceof IStructuredSelection)){ - - + + IDocumentProvider provider = ((BulkEditor) editor).getDocumentProvider(); - LineAnnotationModel model = + LineAnnotationModel model = (LineAnnotationModel) provider.getAnnotationModel(input); - - + + IStructuredSelection structuredSelection = (IStructuredSelection) selection; - + IEntityPersistenceService persistenceService = (IEntityPersistenceService) input; - - + + for(Object object : structuredSelection.toList()){ - + LineAnnotation annotation = (LineAnnotation) model.getAnnotation(object); - DeleteResult result = new DeleteResult(); + DeleteResult result = new DeleteResult(); + String errorMessage= "The object "; //result.setError(); try { ICdmApplicationConfiguration controller; - controller = (ICdmApplicationConfiguration) CdmStore.getCurrentApplicationConfiguration(); - //persistenceService.delete(object); + controller = CdmStore.getCurrentApplicationConfiguration(); + if (object instanceof SpecimenOrObservationBase){ - IOccurrenceService service = controller.getOccurrenceService(); - SpecimenOrObservationBase persistedObject = service.load(((SpecimenOrObservationBase) object).getUuid()); - if (persistedObject != null){ - result = service.delete(persistedObject); - } + if (object != null){ + result = service.delete(((SpecimenOrObservationBase) object).getUuid()); + errorMessage = "The specimen or observation "; + } } else if (object instanceof Reference){ IReferenceService service = controller.getReferenceService(); - - Reference persistedObject = service.load(((Reference) object).getUuid()); - if (persistedObject != null){ - result = service.delete(persistedObject); + if (object != null){ + result = service.delete(((Reference) object).getUuid()); + errorMessage = "The reference "; } - + } else if (object instanceof Group){ IGroupService service = controller.getGroupService(); - Group persistedObject = service.load(((Group) object).getUuid()); - if (persistedObject != null){ - result = service.delete(persistedObject); + if (object != null){ + result = service.delete(((Group) object).getUuid()); + errorMessage = "The group "; } }else if (object instanceof User){ IUserService service = controller.getUserService(); - User persistedObject = service.load(((User) object).getUuid()); - if (persistedObject != null){ - result = service.delete(persistedObject); + if (object != null){ + result = service.delete(((User) object).getUuid()); + errorMessage = "The user "; } } else if (object instanceof TaxonNameBase){ INameService service = controller.getNameService(); - TaxonNameBase name = service.load(((TaxonNameBase) object).getUuid()); - if (name != null){ + if (object != null){ NameDeletionConfigurator config = new NameDeletionConfigurator(); - result = service.delete(name.getUuid(), config); - } + DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", null, "Do you really want to delete the name", MessageDialog.WARNING, new String[] { "Delete", "Skip" }, 0); + int result_dialog= dialog.open(); + if (result_dialog == 1){ + return null; + } + result = service.delete(((TaxonNameBase) object).getUuid(), config); + errorMessage = "The name "; + } } else if (object instanceof TaxonBase){ ITaxonService service = controller.getTaxonService(); - TaxonBase taxonBase = service.load(((TaxonBase) object).getUuid()); - if (taxonBase != null){ + if (object != null){ if (object instanceof Taxon){ - result = service.deleteTaxon(((TaxonBase) object).getUuid(), null, null); + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setDeleteInAllClassifications(true); + DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", null, "Do you really want to delete the taxon", MessageDialog.WARNING, new String[] { "Delete", "Skip" }, 0); + int result_dialog= dialog.open(); + if (result_dialog == 1){ + return null; + } + result = service.deleteTaxon(((TaxonBase) object).getUuid(), config, null); + errorMessage = "The taxon "; }else{ - result = service.deleteSynonym((Synonym)object, null); + SynonymDeletionConfigurator config = new SynonymDeletionConfigurator(); + + result = service.deleteSynonym(((Synonym)object).getUuid(), config); + errorMessage = "The synonym "; } } } else if (object instanceof TeamOrPersonBase){ IAgentService service = controller.getAgentService(); - TeamOrPersonBase teamOrPerson = (TeamOrPersonBase)service.load(((TeamOrPersonBase) object).getUuid()); - result = service.delete((TeamOrPersonBase)object); + //TeamOrPersonBase teamOrPerson = (TeamOrPersonBase)service.load(((TeamOrPersonBase) object).getUuid()); + result = service.delete(((TeamOrPersonBase)object).getUuid()); + errorMessage = "The team or person "; } } catch (Exception e){ MessagingUtils.errorDialog("Exception occured. Delete not possible", getClass(), e.getMessage(), TaxeditorBulkeditorPlugin.PLUGIN_ID, null, true); } if (result.isError() || result.isAbort()){ if (!result.getExceptions().isEmpty()) { - String message = null; + List messages = new ArrayList(); int i = result.getExceptions().size(); for (Exception e:result.getExceptions()){ - i--; - message+= e.getMessage(); - if (i>0){ - message+= ", "; - } + messages.add(e.getMessage()); } - - - MessagingUtils.messageDialog("Delete not possible", getClass(), result.getExceptions().toString(), null); + errorMessage += "could not be deleted."; + //MessagingUtils.errorDialog("test", getClass(), "message", TaxeditorBulkeditorPlugin.PLUGIN_ID, result.getExceptions().iterator().next(),true); + DeleteResultMessagingUtils.messageDialogWithDetails(result,errorMessage, TaxeditorBulkeditorPlugin.PLUGIN_ID); }else{ MessagingUtils.messageDialog("Delete not possible", getClass(), "The object could not be deleted. An exception occured.", null); - } } if (result.isOk() ){ ((BulkEditor) editor).removeAnnotatedLine(annotation); if(result.getUpdatedObjects().size() != 0 || !result.getExceptions().isEmpty()){ - MessagingUtils.informationDialog("Delete successfull", "The object is deleted but there are updated objects: " + result.toString()); + List messages = new ArrayList(); + int i = result.getExceptions().size(); + for (Exception e:result.getExceptions()){ + messages.add(e.getMessage()); + } + errorMessage += "was deleted but related object(s) could not be deleted. "; + //MessagingUtils.errorDialog("test", getClass(), "message", TaxeditorBulkeditorPlugin.PLUGIN_ID, result.getExceptions().iterator().next(),true); + DeleteResultMessagingUtils.messageDialogWithDetails(result, errorMessage, TaxeditorBulkeditorPlugin.PLUGIN_ID); } } - - } + + } } - - + + return null; } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java index 8cf5d3357..00f746d97 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AbstractBulkEditorInput.java @@ -14,6 +14,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.UUID; import org.eclipse.jface.resource.ImageDescriptor; @@ -35,6 +36,7 @@ import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider; import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.CdmBaseSortProvider; import eu.etaxonomy.taxeditor.bulkeditor.input.sortprovider.TitleCacheComparator; import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin; +import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -46,7 +48,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @version 1.0 * @param */ -public abstract class AbstractBulkEditorInput implements IEditorInput, IEntityPersistenceService { +public abstract class AbstractBulkEditorInput extends CdmEntitySessionInput implements IEditorInput , + IEntityPersistenceService { private UUID entityUuid; @@ -56,6 +59,10 @@ public abstract class AbstractBulkEditorInput implements IEd private static Class serviceClass; + public AbstractBulkEditorInput() { + super(true); + } + /** *

NewInstance

* @@ -232,7 +239,7 @@ public abstract class AbstractBulkEditorInput implements IEd public boolean merge(T entity, T mergeTarget) { if (entity instanceof IMergable) { try { - CdmStore.getCommonService().merge(mergeTarget.getId(), entity.getId(), (Class)entity.getClass()); + CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), (Class)entity.getClass()); } catch (MergeException e) { MessagingUtils.errorDialog("Bulk Editor Merge Error", this, @@ -248,7 +255,7 @@ public abstract class AbstractBulkEditorInput implements IEd /** {@inheritDoc} */ @Override - public boolean create(T entity) { + public T create(T entity) { return save(entity); } @@ -305,9 +312,35 @@ public abstract class AbstractBulkEditorInput implements IEd /** * @return */ - public List getModel() { + public List getModel() { return model; } + protected boolean replaceInModel(T entity) { + int index = model.indexOf(entity); + if(index >= 0) { + model.set(index, entity); + return true; + } else { + return false; + } + } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return getModel(); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + // TODO Auto-generated method stub + return null; + } } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java index 4c2dccc55..f7f65de9f 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/AgentEditorInput.java @@ -48,11 +48,13 @@ public class AgentEditorInput extends AbstractBulkEditorInput return ID; } + @Override public String getName() { return BulkEditorInputType.AGENT.label; } + @Override public String getToolTipText() { return getName(); @@ -71,6 +73,7 @@ public class AgentEditorInput extends AbstractBulkEditorInput return true; } + /** {@inheritDoc} */ @Override public boolean isConvertingEnabled() { @@ -85,10 +88,10 @@ public class AgentEditorInput extends AbstractBulkEditorInput if(entity instanceof Person && mergeTarget instanceof Person) { IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(Person.class); strategy.setMergeMode("institutionalMemberships", MergeMode.FIRST); - CdmStore.getCommonService().merge(mergeTarget.getId(), entity.getId(), Person.class); + CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), Person.class); } else { IMergeStrategy strategy = DefaultMergeStrategy.NewInstance(TeamOrPersonBase.class); - CdmStore.getCommonService().merge(mergeTarget.getId(), entity.getId(), TeamOrPersonBase.class); + CdmStore.getCommonService().merge(mergeTarget.getUuid(), entity.getUuid(), TeamOrPersonBase.class); } } catch (MergeException e) { MessagingUtils.errorDialog("Bulk Editor Merge Error", @@ -117,7 +120,6 @@ public class AgentEditorInput extends AbstractBulkEditorInput public boolean delete(AgentBase entity) throws ReferencedObjectUndeletableException { - return CdmStore.getService(IAgentService.class).delete(entity) != null; } @@ -137,14 +139,20 @@ public class AgentEditorInput extends AbstractBulkEditorInput return sortProviders; } + @Override protected IEntityCreator createEntityCreator() { return new AgentCreator(); } @Override - public boolean save(TeamOrPersonBase entity) { - return CdmStore.getService(IAgentService.class).saveOrUpdate(entity) != null; + public TeamOrPersonBase save(TeamOrPersonBase entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return (TeamOrPersonBase) CdmStore.getService(IAgentService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(IAgentService.class).saveOrUpdate(entity) ; + return entity; + } } @Override @@ -154,4 +162,13 @@ public class AgentEditorInput extends AbstractBulkEditorInput return false; } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/GroupEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/GroupEditorInput.java index 98724faa8..008293998 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/GroupEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/GroupEditorInput.java @@ -1,18 +1,16 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.bulkeditor.input; -import java.util.Arrays; import java.util.List; -import java.util.UUID; import eu.etaxonomy.cdm.api.service.IGroupService; import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator; @@ -30,9 +28,9 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class GroupEditorInput extends AbstractBulkEditorInput { public static final String ID = "bulkeditor.input.group"; - + private static GroupEditorInput instance; - + /** * @return the instance */ @@ -42,7 +40,7 @@ public class GroupEditorInput extends AbstractBulkEditorInput { } return instance; } - + /* (non-Javadoc) * @see org.eclipse.ui.IEditorInput#getName() */ @@ -63,8 +61,13 @@ public class GroupEditorInput extends AbstractBulkEditorInput { * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService#save(java.lang.Object) */ @Override - public boolean save(Group entity) { - return CdmStore.getService(IGroupService.class).saveOrUpdate(entity) != null; + public Group save(Group entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(IGroupService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(IGroupService.class).saveOrUpdate(entity); + return entity; + } } /* (non-Javadoc) @@ -86,10 +89,10 @@ public class GroupEditorInput extends AbstractBulkEditorInput { /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#loadEntity(java.util.UUID) - + @Override protected Group loadEntity(UUID entityUuid) { - List propertyPaths = Arrays.asList(new String[]{}); + List propertyPaths = Arrays.asList(new String[]{}); return CdmStore.getService(IGroupService.class).load(entityUuid, propertyPaths); } */ @@ -100,7 +103,7 @@ public class GroupEditorInput extends AbstractBulkEditorInput { protected IEntityCreator createEntityCreator() { return new GroupCreator(); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getText(eu.etaxonomy.cdm.model.common.ICdmBase) */ @@ -109,6 +112,14 @@ public class GroupEditorInput extends AbstractBulkEditorInput { return entity.getName(); } - + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java index c9298f93b..6116162d2 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameEditorInput.java @@ -1,22 +1,19 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.bulkeditor.input; -import java.util.Arrays; import java.util.List; -import java.util.UUID; import eu.etaxonomy.cdm.api.service.INameService; import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator; -import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator; import eu.etaxonomy.taxeditor.bulkeditor.IBulkEditorSortProvider; @@ -34,14 +31,14 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class NameEditorInput extends AbstractBulkEditorInput { /** - * + * */ private static final long serialVersionUID = -3085029575759626823L; private static NameEditorInput instance; /** Constant ID="bulkeditor.input.name" */ public static final String ID = "bulkeditor.input.name"; - + /** *

Getter for the field instance.

* @@ -53,7 +50,7 @@ public class NameEditorInput extends AbstractBulkEditorInput { } return instance; } - + /* (non-Javadoc) * @see org.eclipse.ui.IEditorInput#getName() */ @@ -62,7 +59,8 @@ public class NameEditorInput extends AbstractBulkEditorInput { * * @return a {@link java.lang.String} object. */ - public String getName() { + @Override + public String getName() { return BulkEditorInputType.NAME.label; } @@ -74,7 +72,8 @@ public class NameEditorInput extends AbstractBulkEditorInput { * * @return a {@link java.lang.String} object. */ - public String getToolTipText() { + @Override + public String getToolTipText() { return getName(); } @@ -102,22 +101,29 @@ public class NameEditorInput extends AbstractBulkEditorInput { return CdmStore.getSearchManager().findNames(configurator); } - /** {@inheritDoc} + /** {@inheritDoc} @Override public TaxonNameBase loadEntity(UUID uuid) { - List propertyPaths = Arrays.asList(new String[]{}); + List propertyPaths = Arrays.asList(new String[]{}); return CdmStore.getService(INameService.class).load(uuid, propertyPaths); } */ - /** {@inheritDoc} + /** {@inheritDoc} **/ - public boolean delete(TaxonNameBase entity) { + @Override + public boolean delete(TaxonNameBase entity) { return CdmStore.getService(INameService.class).delete(entity) != null; } /** {@inheritDoc} */ - public boolean save(TaxonNameBase entity) { - return CdmStore.getService(INameService.class).saveOrUpdate(entity) != null; + @Override + public TaxonNameBase save(TaxonNameBase entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(INameService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(INameService.class).saveOrUpdate(entity); + return entity; + } } /* (non-Javadoc) @@ -134,12 +140,12 @@ public class NameEditorInput extends AbstractBulkEditorInput { @Override public List> getSortProviders() { List> sortProviders = super.getSortProviders(); - + sortProviders.add(0, new IdentifiableEntitySortProvider()); - + return sortProviders; } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getTypeText(java.lang.Object) */ @@ -150,7 +156,7 @@ public class NameEditorInput extends AbstractBulkEditorInput { } return super.getTypeText(entity); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getText(eu.etaxonomy.cdm.model.common.ICdmBase) */ @@ -159,5 +165,13 @@ public class NameEditorInput extends AbstractBulkEditorInput { return (entity).getFullTitleCache(); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameRelationshipEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameRelationshipEditorInput.java index a317feca1..893232a91 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameRelationshipEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/NameRelationshipEditorInput.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -30,7 +30,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class NameRelationshipEditorInput extends AbstractBulkEditorInput { /** - * + * */ private static final long serialVersionUID = -7453923697752787687L; @@ -50,7 +50,7 @@ public class NameRelationshipEditorInput extends AbstractBulkEditorInput propertyPaths = Arrays.asList(new String[]{}); + List propertyPaths = Arrays.asList(new String[]{}); return null; // CdmStore.getNameService().load(entityUuid, propertyPaths); } @@ -117,7 +117,7 @@ public class NameRelationshipEditorInput extends AbstractBulkEditorInput propertyPaths = Arrays.asList(new String[]{}); @@ -125,7 +124,7 @@ public class OccurrenceEditorInput extends AbstractBulkEditorInput save(SpecimenOrObservationBase entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(IOccurrenceService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(IOccurrenceService.class).save(entity); + return entity; + } } @@ -161,4 +165,12 @@ public class OccurrenceEditorInput extends AbstractBulkEditorInput { /** - * + * */ private static final long serialVersionUID = 3806243517765126749L; /** Constant ID="bulkeditor.input.reference" */ public static final String ID = "bulkeditor.input.reference"; - + private static ReferenceEditorInput instance; /** @@ -53,7 +53,7 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { public static String getID() { return ID; } - + /* (non-Javadoc) * @see org.eclipse.ui.IEditorInput#getName() */ @@ -62,7 +62,8 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { * * @return a {@link java.lang.String} object. */ - public String getName() { + @Override + public String getName() { return BulkEditorInputType.REFERENCE.label; } @@ -74,7 +75,8 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { * * @return a {@link java.lang.String} object. */ - public String getToolTipText() { + @Override + public String getToolTipText() { return getName(); } @@ -98,7 +100,7 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { public boolean isMergingEnabled() { return true; } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMarkerTypeEditingEnabled(eu.etaxonomy.cdm.model.common.MarkerType) */ @@ -111,31 +113,38 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { return super.isMarkerTypeEditingEnabled(markerType); } - + /** {@inheritDoc} */ @Override public List listEntities(IIdentifiableEntityServiceConfigurator configurator) { return CdmStore.getSearchManager().findReferences(configurator); } - + // Entity persistence - + /** {@inheritDoc} */ @Override public Reference loadEntity(UUID entityUuid) { - List propertyPaths = Arrays.asList(new String[]{"*", "inReference.*", "authorTeam.*"}); + List propertyPaths = Arrays.asList(new String[]{"*", "inReference.*", "authorTeam.*"}); return CdmStore.getService(IReferenceService.class).load(entityUuid, propertyPaths); } - /** {@inheritDoc} + /** {@inheritDoc} * @throws ReferencedObjectUndeletableException */ - public boolean delete(Reference entity) throws ReferencedObjectUndeletableException { + @Override + public boolean delete(Reference entity) throws ReferencedObjectUndeletableException { return CdmStore.getService(IReferenceService.class).delete(entity) != null; } /** {@inheritDoc} */ - public boolean save(Reference entity) { - return CdmStore.getService(IReferenceService.class).saveOrUpdate(entity) != null; + @Override + public Reference save(Reference entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(IReferenceService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(IReferenceService.class).saveOrUpdate(entity); + return entity; + } } /* (non-Javadoc) @@ -145,20 +154,20 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { protected IEntityCreator createEntityCreator() { return new ReferenceCreator(); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getSortProviders() */ @Override public List> getSortProviders() { List> sortProviders = super.getSortProviders(); - + sortProviders.add(0, new IdentifiableEntitySortProvider()); sortProviders.add(1, new ReferenceSortProvider()); - + return sortProviders; } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getTypeText(java.lang.Object) */ @@ -170,4 +179,12 @@ public class ReferenceEditorInput extends AbstractBulkEditorInput { return super.getTypeText(entity); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/TaxonEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/TaxonEditorInput.java index 3367a5e09..aa6dd1537 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/TaxonEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/TaxonEditorInput.java @@ -5,20 +5,17 @@ import java.util.Arrays; import java.util.List; import java.util.UUID; -import eu.etaxonomy.cdm.api.service.INameService; import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.api.service.config.FindTaxaAndNamesConfiguratorImpl; import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator; import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator; import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.persistence.query.MatchMode; import eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityCreator; -import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.NameCreator; import eu.etaxonomy.taxeditor.bulkeditor.input.entitycreator.TaxonCreator; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -27,9 +24,9 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ private static TaxonEditorInput instance; /** Constant ID="bulkeditor.input.taxon" */ public static final String ID = "bulkeditor.input.taxon"; - - - + + + /** *

Getter for the field instance.

* @@ -39,11 +36,11 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ if (instance == null) { instance = new TaxonEditorInput(); } - + return instance; } - - + + @Override public String getName() { return BulkEditorInputType.TAXON.label; @@ -54,7 +51,7 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ return getName(); } - + /** *

getID

* @@ -63,7 +60,7 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ public static Object getID() { return ID; } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.BulkEditorInput#isMergingEnabled() */ @@ -73,11 +70,16 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ return false; } @Override - public boolean save(TaxonBase entity) { - return CdmStore.getService(ITaxonService.class).saveOrUpdate(entity) != null; + public TaxonBase save(TaxonBase entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(ITaxonService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(ITaxonService.class).saveOrUpdate(entity); + return entity; + } } - + /** {@inheritDoc} */ @Override @@ -88,7 +90,7 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ List taxa = CdmStore.getSearchManager().findTaxa(configurator); List taxaCopy = new ArrayList(); for (TaxonBase taxon:taxa){ - + if (taxon instanceof Taxon){ taxaCopy.add(HibernateProxyHelper.deproxy(taxon, Taxon.class)); }else{ @@ -101,15 +103,16 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ @Override protected TaxonBase loadEntity(UUID entityUuid) { - List propertyPaths = Arrays.asList(new String[]{}); + List propertyPaths = Arrays.asList(new String[]{}); return CdmStore.getService(ITaxonService.class).load(entityUuid, propertyPaths); } - - /** {@inheritDoc} + + /** {@inheritDoc} * @throws ReferencedObjectUndeletableException */ - public boolean delete(TaxonBase entity) { + @Override + public boolean delete(TaxonBase entity) { return CdmStore.getService(ITaxonService.class).delete(entity) != null; } @Override @@ -117,4 +120,13 @@ public class TaxonEditorInput extends AbstractBulkEditorInput{ return new TaxonCreator(); } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/UserEditorInput.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/UserEditorInput.java index c80733b1e..72dd138a4 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/UserEditorInput.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/UserEditorInput.java @@ -1,18 +1,16 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.bulkeditor.input; -import java.util.Arrays; import java.util.List; -import java.util.UUID; import eu.etaxonomy.cdm.api.service.IUserService; import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator; @@ -30,9 +28,9 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class UserEditorInput extends AbstractBulkEditorInput { public static final String ID = "bulkeditor.input.user"; - + private static UserEditorInput instance; - + /** * @return the instance */ @@ -42,7 +40,7 @@ public class UserEditorInput extends AbstractBulkEditorInput { } return instance; } - + /* (non-Javadoc) * @see org.eclipse.ui.IEditorInput#getName() */ @@ -63,8 +61,14 @@ public class UserEditorInput extends AbstractBulkEditorInput { * @see eu.etaxonomy.taxeditor.annotatedlineeditor.IEntityPersistenceService#save(java.lang.Object) */ @Override - public boolean save(User entity) { - return CdmStore.getService(IUserService.class).saveOrUpdate(entity) != null; + public User save(User entity) { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + return CdmStore.getService(IUserService.class).merge(entity, true).getMergedEntity(); + } else { + CdmStore.getService(IUserService.class).saveOrUpdate(entity); + return entity; + } + } /* (non-Javadoc) @@ -84,13 +88,13 @@ public class UserEditorInput extends AbstractBulkEditorInput { return CdmStore.getSearchManager().findUsers(configurator); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#loadEntity(java.util.UUID) - + @Override protected User loadEntity(UUID entityUuid) { - List propertyPaths = Arrays.asList(new String[]{}); + List propertyPaths = Arrays.asList(new String[]{}); return CdmStore.getService(IUserService.class).load(entityUuid, propertyPaths); } */ @@ -101,7 +105,7 @@ public class UserEditorInput extends AbstractBulkEditorInput { protected IEntityCreator createEntityCreator() { return new UserCreator(); } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.bulkeditor.input.AbstractBulkEditorInput#getText(eu.etaxonomy.cdm.model.common.ICdmBase) */ @@ -110,5 +114,13 @@ public class UserEditorInput extends AbstractBulkEditorInput { return String.format("%s, %s", entity.getUsername(), entity.getPerson()); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + + } + } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/entitycreator/UserCreator.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/entitycreator/UserCreator.java index aba437843..81ebab53c 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/entitycreator/UserCreator.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/input/entitycreator/UserCreator.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -43,7 +43,12 @@ public class UserCreator implements IEntityCreator{ public User createEntity(Object key, String text) { try{ User user = User.NewInstance(text, text); - CdmStore.getService(IUserService.class).createUser(user); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IUserService.class).createUser(user); + user = CdmStore.getService(IUserService.class).loadWithUpdate(user.getUuid()); + } else { + CdmStore.getService(IUserService.class).createUser(user); + } return user; } catch (AccessDeniedException e){ MessagingUtils.messageDialog("Access denied", getClass(), e.getMessage(), e); diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/preference/BulkEditorMarkerPreferencePage.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/preference/BulkEditorMarkerPreferencePage.java index 2830dd82d..b183539a5 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/preference/BulkEditorMarkerPreferencePage.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/preference/BulkEditorMarkerPreferencePage.java @@ -10,84 +10,43 @@ package eu.etaxonomy.taxeditor.bulkeditor.preference; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import eu.etaxonomy.cdm.model.common.MarkerType; import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.TermStore; /** - *

BulkEditorMarkerPreferenceComposite class.

- * * @author p.ciardelli * @created 17.08.2009 * @version 1.0 */ -public class BulkEditorMarkerPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { +public class BulkEditorMarkerPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { - private Map markerTypeEditingMap = new HashMap(); - /* (non-Javadoc) - * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) - */ @Override public void init(IWorkbench workbench) { setPreferenceStore(PreferencesUtil.getPreferenceStore()); if(!CdmStore.isActive()) { MessagingUtils.noDataSourceWarningDialog(null); - }else{ - markerTypeEditingMap = PreferencesUtil.getEditMarkerTypePreferences(); } } - /* (non-Javadoc) - * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) - */ - @Override - protected Control createContents(Composite parent) { - Composite container = new Composite(parent, SWT.NULL); - container.setLayout(new GridLayout()); + @Override + protected void createFieldEditors() { if(CdmStore.isActive()){ for (final MarkerType markerType : TermStore.getTerms(MarkerType.class)) { - final Button button = new Button(container, SWT.CHECK); - button.setText(String.format("Edit '%s' markers", markerType.getLabel())); - - button.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - markerTypeEditingMap.put(markerType, button.getSelection()); - } - }); - - boolean edit = markerTypeEditingMap.get(markerType) == null ? true : markerTypeEditingMap.get(markerType); - - button.setSelection(edit); + addField(new BooleanFieldEditor(IPreferenceKeys.EDIT_MARKER_TYPE_PREFIX + + markerType.getClass().getName() + markerType.getLabel(), String.format("Edit '%s' markers", + markerType.getLabel()), getFieldEditorParent())); } } - return container; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.PreferencePage#performOk() - */ - @Override - public boolean performOk() { - PreferencesUtil.setEditMarkerTypePreferences(markerTypeEditingMap); - return super.performOk(); - } + } } diff --git a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java index 604f3874a..789596477 100644 --- a/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java +++ b/eu.etaxonomy.taxeditor.bulkeditor/src/main/java/eu/etaxonomy/taxeditor/bulkeditor/referencingobjects/ReferencingObjectsView.java @@ -57,6 +57,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; import eu.etaxonomy.taxeditor.model.DescriptionHelper; import eu.etaxonomy.taxeditor.model.LineSelection; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart; @@ -67,7 +68,7 @@ import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart; * @created 08.07.2009 * @version 1.0 */ -public class ReferencingObjectsView extends AbstractCdmViewPart{ +public class ReferencingObjectsView extends AbstractCdmViewPart { private static final Logger logger = Logger .getLogger(ReferencingObjectsView.class); @@ -78,6 +79,11 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ private String referencedObjectTitleCache; private ConversationHolder conversation; + private ICdmEntitySession cdmEntitySession; + + public ReferencingObjectsView() { + cdmEntitySession = CdmStore.getCurrentSessionManager().bindNullSession(); + } /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#createViewer(org.eclipse.swt.widgets.Composite) @@ -149,6 +155,10 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ viewer.setColumnProperties(titles); } + @Override + public void setFocus() { + cdmEntitySession.bind(); + } /** *

updateReferencingObjects

* @@ -171,9 +181,12 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ @Override public void run() { if (entityUUID != null){ - + ICdmEntitySession previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession(); + cdmEntitySession.bind(); List referencingObjects = getReferencingObjects(entityUUID, objectClass); - + if(previousCdmEntitySession != null) { + previousCdmEntitySession.bind(); + } updateView(referencingObjects); } @@ -226,6 +239,7 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ } } catch (Exception e) { logger.error("Error retrieving referencing objects", e); + setContentDescription("The referencing objects view could not be loaded completely. Some Problems occured."); } return null; } @@ -312,6 +326,7 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ conversation.close(); selectionService.removePostSelectionListener(this); selectionService.removeSelectionListener(this); + cdmEntitySession.dispose(); super.dispose(); } @@ -352,5 +367,4 @@ public class ReferencingObjectsView extends AbstractCdmViewPart{ } - } diff --git a/eu.etaxonomy.taxeditor.cdmlib/.classpath b/eu.etaxonomy.taxeditor.cdmlib/.classpath index b0f55de13..568cd56b0 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.classpath +++ b/eu.etaxonomy.taxeditor.cdmlib/.classpath @@ -1,209 +1,201 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/.gitignore b/eu.etaxonomy.taxeditor.cdmlib/.gitignore index c5e82d745..41b529a21 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/.gitignore +++ b/eu.etaxonomy.taxeditor.cdmlib/.gitignore @@ -1 +1,5 @@ -bin \ No newline at end of file +bin +/target/ +/target/ +/target/ +/target/ diff --git a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF index 463d22a8d..a59ec583e 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF @@ -2,15 +2,16 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CDM Library Dependencies Plugin Bundle-SymbolicName: eu.etaxonomy.taxeditor.cdmlib;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Eclipse-BundleShape: dir Export-Package: com.google.api, com.google.api.detect, com.google.api.translate, + eu.etaxonomy.cdm, eu.etaxonomy.cdm.api.application, + eu.etaxonomy.cdm.api.cache, eu.etaxonomy.cdm.api.conversation, eu.etaxonomy.cdm.api.facade, - eu.etaxonomy.cdm.api.lazyloading, eu.etaxonomy.cdm.api.service, eu.etaxonomy.cdm.api.service.config, eu.etaxonomy.cdm.api.service.description, @@ -49,6 +50,7 @@ Export-Package: com.google.api, eu.etaxonomy.cdm.ext.occurrence.gbif, eu.etaxonomy.cdm.ext.openurl, eu.etaxonomy.cdm.ext.sru, + eu.etaxonomy.cdm.format, eu.etaxonomy.cdm.hibernate, eu.etaxonomy.cdm.hibernate.search, eu.etaxonomy.cdm.io.api.application, @@ -76,6 +78,7 @@ Export-Package: com.google.api, eu.etaxonomy.cdm.io.sdd.ikeyplus, eu.etaxonomy.cdm.io.sdd.in, eu.etaxonomy.cdm.io.sdd.out, + eu.etaxonomy.cdm.io.service, eu.etaxonomy.cdm.io.specimen, eu.etaxonomy.cdm.io.specimen.abcd206.in, eu.etaxonomy.cdm.io.specimen.excel.in, @@ -113,7 +116,6 @@ Export-Package: com.google.api, eu.etaxonomy.cdm.persistence.dao.hibernate.occurrence, eu.etaxonomy.cdm.persistence.dao.hibernate.reference, eu.etaxonomy.cdm.persistence.dao.hibernate.taxon, - eu.etaxonomy.cdm.persistence.dao.hibernate.validation, eu.etaxonomy.cdm.persistence.dao.hibernate.view, eu.etaxonomy.cdm.persistence.dao.media, eu.etaxonomy.cdm.persistence.dao.name, @@ -136,7 +138,6 @@ Export-Package: com.google.api, eu.etaxonomy.cdm.print.out.pdf, eu.etaxonomy.cdm.print.out.taxpub, eu.etaxonomy.cdm.print.out.xml, - eu.etaxonomy.cdm.remote, eu.etaxonomy.cdm.remote.config, eu.etaxonomy.cdm.remote.controller, eu.etaxonomy.cdm.remote.controller.dto, @@ -189,16 +190,34 @@ Export-Package: com.google.api, eu.etaxonomy.cdm.validation.annotation, eu.etaxonomy.cdm.validation.constraint, eu.etaxonomy.remote.dto.rdf, + eu.etaxonomy.taxeditor.remoting, + eu.etaxonomy.taxeditor.remoting.cache, + eu.etaxonomy.taxeditor.remoting.server, + eu.etaxonomy.taxeditor.remoting.source, + eu.etaxonomy.taxeditor.service, + eu.etaxonomy.taxeditor.session, + eu.etaxonomy.taxeditor.session.mock, + javassist.util.proxy, javax.persistence, junit.framework;uses:="org.junit.runner.manipulation,org.junit.runner,org.junit.runner.notification", + net.sf.ehcache, + net.sf.ehcache.config, + net.sf.ehcache.statistics, + net.sf.ehcache.store, net.sf.json;uses:="net.sf.json.processors,net.sf.json.util,org.apache.commons.lang.exception", + org.aopalliance.aop, org.apache.commons.collections;uses:="org.apache.commons.collections.keyvalue,new org.apache.commons.collections", + org.apache.commons.collections.buffer, + org.apache.commons.dbcp, org.apache.commons.io;uses:="org.apache.commons.io.filefilter", org.apache.commons.lang;uses:="org.apache.commons.lang.exception", org.apache.commons.lang.exception, + org.apache.commons.lang.text, + org.apache.commons.logging, org.apache.fop.apps, org.apache.http, org.apache.http.client, + org.apache.http.util, org.apache.log4j;uses:="org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi", org.apache.log4j.chainsaw; uses:="org.apache.log4j, @@ -265,13 +284,28 @@ Export-Package: com.google.api, org.hibernate, org.hibernate.annotations.common.reflection, org.hibernate.cache.internal, + org.hibernate.cfg, org.hibernate.classic, org.hibernate.collection.internal, + org.hibernate.collection.spi, org.hibernate.criterion, + org.hibernate.engine.internal, + org.hibernate.engine.spi, + org.hibernate.engine.transaction.spi, org.hibernate.envers.query.criteria, + org.hibernate.internal, + org.hibernate.internal.util, + org.hibernate.internal.util.collections, + org.hibernate.mapping, + org.hibernate.persister.collection, + org.hibernate.persister.entity, + org.hibernate.pretty, + org.hibernate.property, org.hibernate.proxy, + org.hibernate.proxy.pojo.javassist, org.hibernate.search, org.hibernate.search.spatial.impl, + org.hibernate.type, org.jadira.usertype.dateandtime.joda, org.jadira.usertype.dateandtime.shared.spi, org.jboss.logging, @@ -311,6 +345,10 @@ Export-Package: com.google.api, org.odftoolkit.odfdom.dom.element, org.odftoolkit.odfdom.dom.element.style, org.odftoolkit.odfdom.dom.style, + org.slf4j, + org.springframework.aop, + org.springframework.aop.framework, + org.springframework.beans, org.springframework.beans.factory, org.springframework.beans.factory.annotation; uses:="org.apache.commons.logging, @@ -321,6 +359,9 @@ Export-Package: com.google.api, org.springframework.beans.factory.wiring, org.springframework.core.type, org.springframework.beans.factory", + org.springframework.beans.factory.config, + org.springframework.beans.factory.support, + org.springframework.beans.factory.xml, org.springframework.cache.ehcache, org.springframework.context; uses:="org.springframework.core.io, @@ -328,14 +369,19 @@ Export-Package: com.google.api, org.springframework.core.io.support, org.springframework.beans.factory.config, org.springframework.beans.factory", + org.springframework.context.config, org.springframework.context.event; uses:="org.springframework.core, org.aopalliance.intercept, org.springframework.context, org.springframework.beans.factory", + org.springframework.context.support, org.springframework.core;uses:="org.springframework.util", + org.springframework.core.env, org.springframework.core.io;uses:="org.jboss.virtual", + org.springframework.core.io.support, org.springframework.core.type.classreading, + org.springframework.jdbc.datasource, org.springframework.orm.hibernate3; uses:="org.apache.commons.logging, org.aopalliance.intercept, @@ -362,9 +408,15 @@ Export-Package: com.google.api, org.springframework.dao, org.springframework.transaction.support", org.springframework.orm.hibernate4, + org.springframework.remoting, + org.springframework.remoting.httpinvoker, + org.springframework.remoting.support, org.springframework.security.access, org.springframework.security.authentication, + org.springframework.security.authentication.dao, + org.springframework.security.authentication.encoding, org.springframework.security.authentication.event, + org.springframework.security.config, org.springframework.security.core, org.springframework.security.core.context, org.springframework.security.core.userdetails, @@ -401,6 +453,7 @@ Export-Package: com.google.api, org.springframework.transaction, org.apache.commons.logging, org.springframework.beans.factory", + org.springframework.util, org.springframework.web.servlet; uses:="org.springframework.web.multipart, org.apache.commons.logging, @@ -415,9 +468,11 @@ Export-Package: com.google.api, org.springframework.ui, javax.servlet.http" Bundle-Vendor: EDIT -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Require-Bundle: org.eclipse.osgi, - org.eclipse.equinox.common + org.eclipse.equinox.common, + org.apache.commons.httpclient;bundle-version="3.1.0", + org.eclipse.core.runtime Bundle-ClassPath: ., lib/activation-1.1.1.jar, lib/antlr-2.7.7.jar, @@ -574,15 +629,6 @@ Bundle-ClassPath: ., lib/spring-security-core-3.1.3.RELEASE.jar, lib/stax-1.2.0.jar, lib/stax-api-1.0.1.jar, - lib/unitils-core-3.3.jar, - lib/unitils-database-3.3.jar, - lib/unitils-dbmaintainer-3.3.jar, - lib/unitils-dbunit-3.3.jar, - lib/unitils-easymock-3.3.jar, - lib/unitils-inject-3.3.jar, - lib/unitils-mock-3.3.jar, - lib/unitils-orm-3.3.jar, - lib/unitils-spring-3.3.jar, lib/usertype.jodatime-2.0.1.jar, lib/usertype.spi-2.0.1.jar, lib/validation-api-1.0.0.GA.jar, @@ -612,12 +658,13 @@ Bundle-ClassPath: ., lib/xmlbeans-2.3.0.jar, lib/poi-ooxml-schemas-3.10-FINAL.jar, lib/swagger-annotations-1.3.5.jar, - lib/cdmlib-commons-3.8.0.jar, - lib/cdmlib-ext-3.8.0.jar, - lib/cdmlib-io-3.8.0.jar, - lib/cdmlib-model-3.8.0.jar, - lib/cdmlib-persistence-3.8.0.jar, - lib/cdmlib-print-3.8.0.jar, - lib/cdmlib-remote-3.8.0.jar, - lib/cdmlib-services-3.8.0.jar + lib/apache-log4j-extras-1.2.17.jar, + lib/cdmlib-commons-3.12.0.jar, + lib/cdmlib-ext-3.12.0.jar, + lib/cdmlib-io-3.12.0.jar, + lib/cdmlib-model-3.12.0.jar, + lib/cdmlib-persistence-3.12.0.jar, + lib/cdmlib-print-3.12.0.jar, + lib/cdmlib-remote-3.12.0.jar, + lib/cdmlib-services-3.12.0.jar Import-Package: eu.etaxonomy.cdm.api.application diff --git a/eu.etaxonomy.taxeditor.cdmlib/build.properties b/eu.etaxonomy.taxeditor.cdmlib/build.properties index e60f70e25..26d5f02be 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/build.properties +++ b/eu.etaxonomy.taxeditor.cdmlib/build.properties @@ -155,15 +155,6 @@ bin.includes = META-INF/,\ lib/spring-security-core-3.1.3.RELEASE.jar,\ lib/stax-1.2.0.jar,\ lib/stax-api-1.0.1.jar,\ - lib/unitils-core-3.3.jar,\ - lib/unitils-database-3.3.jar,\ - lib/unitils-dbmaintainer-3.3.jar,\ - lib/unitils-dbunit-3.3.jar,\ - lib/unitils-easymock-3.3.jar,\ - lib/unitils-inject-3.3.jar,\ - lib/unitils-mock-3.3.jar,\ - lib/unitils-orm-3.3.jar,\ - lib/unitils-spring-3.3.jar,\ lib/usertype.jodatime-2.0.1.jar,\ lib/usertype.spi-2.0.1.jar,\ lib/validation-api-1.0.0.GA.jar,\ @@ -194,19 +185,20 @@ bin.includes = META-INF/,\ lib/poi-ooxml-schemas-3.10-FINAL.jar,\ lib/xmlbeans-2.3.0.jar,\ lib/swagger-annotations-1.3.5.jar,\ - lib/cdmlib-commons-3.8.0.jar,\ - lib/cdmlib-ext-3.8.0.jar,\ - lib/cdmlib-io-3.8.0.jar,\ - lib/cdmlib-model-3.8.0.jar,\ - lib/cdmlib-persistence-3.8.0.jar,\ - lib/cdmlib-print-3.8.0.jar,\ - lib/cdmlib-remote-3.8.0.jar,\ - lib/cdmlib-services-3.8.0.jar + lib/cdmlib-commons-3.12.0.jar,\ + lib/cdmlib-ext-3.12.0.jar,\ + lib/cdmlib-io-3.12.0.jar,\ + lib/cdmlib-model-3.12.0.jar,\ + lib/cdmlib-persistence-3.12.0.jar,\ + lib/cdmlib-print-3.12.0.jar,\ + lib/cdmlib-remote-3.12.0.jar,\ + lib/cdmlib-services-3.12.0.jar,\ + lib/apache-log4j-extras-1.2.17.jar,\ + resources/cdm.map.ser jars.compile.order = . output.. = bin/ source.. = src/main/java/,\ - src/main/resources/,\ - src/test/java/ + src/main/resources/ src.includes = src/ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/apache-log4j-extras-1.2.17.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/apache-log4j-extras-1.2.17.jar new file mode 100644 index 000000000..b08d8d56e Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/apache-log4j-extras-1.2.17.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1-sources.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1-sources.jar deleted file mode 100644 index 21ffee7c9..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1-sources.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1-sources.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1-sources.jar deleted file mode 100644 index 9625da0b6..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1-sources.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.3.jar deleted file mode 100644 index a3a7a7b9a..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.4.2.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.4.2.jar new file mode 100644 index 000000000..ab4c22e78 Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.4.2.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.3.jar deleted file mode 100644 index f9a1647bd..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.4.2.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.4.2.jar new file mode 100644 index 000000000..dfcb6ae7c Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.4.2.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.3.jar deleted file mode 100644 index bb209705b..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.4.2.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.4.2.jar new file mode 100644 index 000000000..01f8994f6 Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.4.2.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.3.jar deleted file mode 100644 index eefa626b0..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.4.2.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.4.2.jar new file mode 100644 index 000000000..778274e8d Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.4.2.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-easymock-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-easymock-3.3.jar deleted file mode 100644 index c603f0b85..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-easymock-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-inject-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-inject-3.3.jar deleted file mode 100644 index 8bf141ea0..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-inject-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-mock-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-mock-3.3.jar deleted file mode 100644 index f201831da..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-mock-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-orm-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-orm-3.3.jar deleted file mode 100644 index d8d4e89ac..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-orm-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.3.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.3.jar deleted file mode 100644 index 53074f02e..000000000 Binary files a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.3.jar and /dev/null differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar new file mode 100644 index 000000000..f30810b72 Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/pom.xml b/eu.etaxonomy.taxeditor.cdmlib/pom.xml index 7a72c8614..c0fc9f250 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/pom.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/pom.xml @@ -1,158 +1,564 @@ - - - - eu.etaxonomy - taxeditor-parent - 3.8.1 - - 4.0.0 - eu.etaxonomy.taxeditor.cdmlib - eclipse-plugin - CDM Library Dependencies Plugin - CDM Library and dependencies as a plugin - - - - org.apache.maven.plugins - maven-dependency-plugin - 2.4 - - - copy-dependencies - validate - - copy-dependencies - - - cdmlib-commons,cdmlib-model,cdmlib-persistence,cdmlib-remote,cdmlib-print,cdmlib-services,cdmlib-ext,cdmlib-io - lib - true - true - true - - - - copy-dependencies-sources - validate - - copy-dependencies - - - sources - cdmlib-commons,cdmlib-model,cdmlib-persistence,cdmlib-remote,cdmlib-print,cdmlib-services,cdmlib-ext,cdmlib-io - lib - true - true - true - false - - - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - remove-existing-jars - clean - - run - - - - Remove all cdmlib jars - - - - - - - - update-snapshot-jar-names - validate - - run - - - - Update cdmlib jars to SNAPSHOT when build with timestamp - - - - - - - - - - - - - - - - - - identificationKeyAPI - identificationKeyAPI - 1.0-SNAPSHOT - - - eu.etaxonomy - cdmlib-commons - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-model - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-persistence - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-remote - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-print - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-services - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-io - ${cdmlib.version} - - - eu.etaxonomy - cdmlib-ext - ${cdmlib.version} - - - org.aspectj - aspectjrt - 1.7.1 - - - org.aspectj - aspectjweaver - 1.7.1 - - - - - + + + + eu.etaxonomy + taxeditor-parent + 3.12.0 + + 4.0.0 + eu.etaxonomy.taxeditor.cdmlib + eclipse-plugin + CDM Library Dependencies Plugin + CDM Library and dependencies as a plugin + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.7 + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.4 + + + copy-dependencies + validate + + copy-dependencies + + + + cdmlib-remote-webapp + + + cdmlib-services,cdmlib-commons,cdmlib-persistence,cdmlib-ext,cdmlib-model,cdmlib-io,cdmlib-print,cdmlib-remote + + ${basedir}/lib + true + true + true + + + + copy-dependency-war + validate + + copy-dependencies + + + + cdmlib-remote-webapp + + + ${basedir}/src/main/resources/etc/jetty + + true + true + true + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.7 + + + update-snapshot-jar-names + validate + + run + + + + Anonymizing war + + + + + Update cdmlib jars to SNAPSHOT when build with + timestamp + + + + + + + + + + + + + + remove-existing-jars + clean + + run + + + + Remove all cdmlib jars + + + + + + + + + + + + + copyAllJars + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.4 + + + copy-all-dependencies + validate + + copy-dependencies + + + + cdmlib-remote-webapp + + ${basedir}/lib + true + true + true + + + + + + + + + + + SpringSource Enterprise Bundle Repository - External Bundle + Milestones + + http://repository.springsource.com/maven/bundles/milestone + + + + SpringSource Enterprise Bundle Repository - SpringSource + Bundle + Releases + + http://repository.springsource.com/maven/bundles/release + + + + SpringSource Enterprise Bundle Repository - External Bundle + Releases + + http://repository.springsource.com/maven/bundles/external + + + + + + eu.etaxonomy + cdmlib-remote-webapp + ${cdmlib.version} + war + + + eu.etaxonomy + cdmlib-commons + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-model + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-persistence + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-remote + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-print + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-services + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-io + ${cdmlib.version} + + + eu.etaxonomy + cdmlib-ext + ${cdmlib.version} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net.sf.ehcache + ehcache-core + 2.4.3 + + + org.hibernate + hibernate-core + 4.1.10.Final + + + org.hibernate.common + hibernate-commons-annotations + 4.0.1.Final + + + org.hibernate + hibernate-search-engine + 4.2.0.Final + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + 1.0.1.Final + + + org.hibernate + hibernate-envers + 4.1.10.Final + + + org.hibernate + hibernate-entitymanager + 4.1.10.Final + + + dom4j + dom4j + 1.6 + + + org.jadira.usertype + usertype.jodatime + 2.0.1 + + + org.jadira.usertype + usertype.spi + 2.0.1 + + + + junit + junit + 4.11 + test + + + log4j + log4j + 1.2.17 + + + org.jdom + jdom + 1.1.3 + + + org.springframework + org.springframework.context + 3.2.2.RELEASE + + + org.springframework + org.springframework.context.support + 3.2.2.RELEASE + + + org.springframework + org.springframework.aspects + 3.2.2.RELEASE + + + org.springframework + org.springframework.test + 3.2.2.RELEASE + + + org.springframework + org.springframework.beans + 3.2.2.RELEASE + + + org.springframework + org.springframework.transaction + 3.2.2.RELEASE + + + org.springframework + org.springframework.web + 3.2.2.RELEASE + + + org.springframework + org.springframework.core + 3.2.2.RELEASE + + + org.springframework + org.springframework.aop + 3.2.2.RELEASE + + + org.springframework + org.springframework.expression + 3.2.2.RELEASE + + + org.springframework + org.springframework.orm + 3.2.2.RELEASE + + + org.springframework + org.springframework.jdbc + 3.2.2.RELEASE + + + org.springframework.security + spring-security-core + 3.1.3.RELEASE + + + org.springframework.security + spring-security-config + 3.1.3.RELEASE + + + org.springframework.security + spring-security-remoting + 3.1.3.RELEASE + + + org.jboss.logging + jboss-logging + 3.1.3.GA + + + org.hamcrest + hamcrest-core + 1.3 + + + com.mchange + c3p0 + 0.9.2 + + + org.jboss.spec.javax.transaction + jboss-transaction-api_1.1_spec + 1.0.0.Final + + + org.aspectj + aspectjrt + 1.7.1 + + + commons-logging + commons-logging + 1.1.1 + + + commons-lang + commons-lang + 2.6 + + + aopalliance + aopalliance + 1.0 + + + joda-time + joda-time + 2.1 + + + com.ibm.lsid + lsid-client + 1.1.2 + + + com.ibm.lsid + lsid-server + 1.1.2 + + + org.apache.lucene + lucene-core + 3.6.2 + + + org.slf4j + slf4j-api + 1.7.2 + + + org.javassist + javassist + 3.17.1-GA + + + au.com.bytecode + opencsv + 2.4 + + + + + + org.unitils + unitils-core + 3.4.2 + + + org.unitils + unitils-spring + 3.4.2 + + + org.unitils + unitils-database + 3.4.2 + + + commons-dbcp + commons-dbcp + 1.4 + + + commons-pool + commons-pool + 1.5.4 + + + org.unitils + unitils-dbmaintainer + 3.4.2 + + + com.h2database + h2 + 1.4.181 + + + org.unitils + unitils-dbunit + 3.4.2 + + + org.dbunit + dbunit + 2.4.9 + + + + + + wsdl4j + wsdl4j + 1.6.3 + + + javax.validation + validation-api + 1.1.0.Final + + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/resources/cdm.map.ser b/eu.etaxonomy.taxeditor.cdmlib/resources/cdm.map.ser new file mode 100644 index 000000000..931f12eed Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/resources/cdm.map.ser differ diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationException.java new file mode 100644 index 000000000..c17e1673c --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationException.java @@ -0,0 +1,23 @@ +// $Id$ +/** +* Copyright (C) 2015 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.cdm.api.application; + +/** + * @author cmathew + * @date 18 Jun 2015 + * + */ +public class CdmApplicationException extends Exception { + + public CdmApplicationException(Exception ex) { + super(ex); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java index 90cfc0990..47757c986 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java @@ -1,28 +1,95 @@ /** -* Copyright (C) 2014 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. -*/ + * Copyright (C) 2014 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.cdm.api.application; -import javax.sql.DataSource; - -import org.hibernate.SessionFactory; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.apache.log4j.Logger; -import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor; +import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.authentication.dao.ReflectionSaltSource; +import org.springframework.security.authentication.encoding.Md5PasswordEncoder; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionStatus; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; +import eu.etaxonomy.cdm.api.service.IAgentService; +import eu.etaxonomy.cdm.api.service.IAnnotationService; +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ICollectionService; +import eu.etaxonomy.cdm.api.service.ICommonService; import eu.etaxonomy.cdm.api.service.IDatabaseService; +import eu.etaxonomy.cdm.api.service.IDescriptionService; +import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService; +import eu.etaxonomy.cdm.api.service.IEntityValidationService; +import eu.etaxonomy.cdm.api.service.IFeatureNodeService; +import eu.etaxonomy.cdm.api.service.IFeatureTreeService; +import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService; +import eu.etaxonomy.cdm.api.service.IGroupService; +import eu.etaxonomy.cdm.api.service.IIdentificationKeyService; +import eu.etaxonomy.cdm.api.service.ILocationService; +import eu.etaxonomy.cdm.api.service.IMediaService; +import eu.etaxonomy.cdm.api.service.IMetadataService; +import eu.etaxonomy.cdm.api.service.INameService; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.IProgressMonitorService; +import eu.etaxonomy.cdm.api.service.IReferenceService; +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.api.service.ITermService; +import eu.etaxonomy.cdm.api.service.ITestService; +import eu.etaxonomy.cdm.api.service.IUserService; +import eu.etaxonomy.cdm.api.service.IVocabularyService; +import eu.etaxonomy.cdm.api.service.IWorkingSetService; +import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService; +import eu.etaxonomy.cdm.api.service.molecular.IPrimerService; +import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; import eu.etaxonomy.cdm.ext.geo.IEditGeoService; +import eu.etaxonomy.cdm.io.service.IIOService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmPermissionEvaluator; +import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator; +import eu.etaxonomy.cdm.persistence.hibernate.permission.UnanimousBasedUnrevokable; +import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionBaseVoter; +import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.DescriptionElementVoter; +import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.GrantAlwaysVoter; +import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonBaseVoter; +import eu.etaxonomy.cdm.persistence.hibernate.permission.voter.TaxonNodeVoter; +import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; +import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl; +import eu.etaxonomy.taxeditor.service.CdmAuthenticatedHttpInvokerRequestExecutor; +import eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; +import eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor; +import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; /** @@ -31,85 +98,378 @@ import eu.etaxonomy.cdm.ext.geo.IEditGeoService; * */ @Component -public class CdmApplicationRemoteConfiguration extends CdmApplicationDefaultConfiguration { - - @SuppressWarnings("unused") - private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class); - - @Autowired - IEditGeoService editGeoService; - - public CdmApplicationRemoteConfiguration() { - } - +public class CdmApplicationRemoteConfiguration implements ICdmApplicationConfiguration, ApplicationContextAware { + + @SuppressWarnings("unused") + private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class); + + protected ApplicationContext applicationContext; + + private ICdmRemoteSource remoteSource; + + private Map serviceMap = new HashMap, IService>(); + + private ICdmEntitySessionManager cdmEntitySessionManager; + + private CdmPermissionEvaluator cdmPermissionEvaluator; + + private ProviderManager authenticationManager; + + private ICachedCommonService cachedCommonService; + + public CdmApplicationRemoteConfiguration() {} + + public CdmApplicationRemoteConfiguration(ICdmRemoteSource remoteSource) { + this.remoteSource = remoteSource; + + } + + public void setRemoteSource(ICdmRemoteSource remoteSource) { + this.remoteSource = remoteSource; + } + + private Object getService(Class clazz, String serviceSuffix, CommonsHttpInvokerRequestExecutor executor) { + if(serviceMap.containsKey(clazz)) { + return serviceMap.get(clazz); + } + Object service = getService(clazz, serviceSuffix, remoteSource, executor); + serviceMap.put(clazz, service); + return service; + } + + public static Object getService(Class clazz, + String serviceSuffix, + ICdmRemoteSource remoteSource, + CommonsHttpInvokerRequestExecutor executor) { + + String baseUrl; + if(remoteSource.getContextPath() == null || remoteSource.getContextPath().equals("")) { + baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()); + } else { + baseUrl = "http://" + remoteSource.getServer() + ":" + String.valueOf(remoteSource.getPort()) + "/" + remoteSource.getContextPath(); + } + HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean(); + proxy.setServiceInterface(clazz); + proxy.setServiceUrl(baseUrl + serviceSuffix); + if(executor != null) { + executor.setReadTimeout(0); + proxy.setHttpInvokerRequestExecutor(executor); + } + proxy.afterPropertiesSet(); + return proxy.getObject(); + } + + // ****************************** APPLICATION CONTEXT *************************************************/ + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{ + this.applicationContext = applicationContext; + } + /* (non-Javadoc) * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#getTransactionManager() */ @Override public PlatformTransactionManager getTransactionManager() throws UnsupportedOperationException { - throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration"); - } + throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration"); + } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction() + + /** + * @return */ + public IEditGeoService getEditGeoService() { + return (IEditGeoService) getService(IEditGeoService.class, "/remoting/editgeo.service", new CdmServiceRequestExecutor()); + } + + /** + * @return + */ + public ICachedCommonService getCachedCommonService(){ + if(cachedCommonService == null) { + cachedCommonService = new CachedCommonServiceImpl(); + } + return cachedCommonService; + } + + + public ICdmEntitySessionManager getCdmEntitySessionManager() { + if(cdmEntitySessionManager == null) { + cdmEntitySessionManager = new CdmEntitySessionManager(); + } + return cdmEntitySessionManager; + } + + + + + + + // ****************************** GETTER *************************************************/ + @Override - public TransactionStatus startTransaction() throws UnsupportedOperationException { - throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } + public final Object getBean(String name){ + throw new UnsupportedOperationException("getBean is not implemented for CdmApplicationRemoteConfiguration"); + } + + @Override + public IAgentService getAgentService(){ + return (IAgentService) getService(IAgentService.class, "/remoting/agent.service", new CdmServiceRequestExecutor()); + } + @Override + public IAnnotationService getAnnotationService(){ + return (IAnnotationService) getService(IAnnotationService.class, "/remoting/annotation.service", new CdmServiceRequestExecutor()); + } + + @Override + public IDatabaseService getDatabaseService(){ + return (IDatabaseService) getService(IDatabaseService.class, "/remoting/database.service", new CdmServiceRequestExecutor()); + } + + @Override + public INameService getNameService(){ + return (INameService) getService(INameService.class, "/remoting/name.service", new CdmServiceRequestExecutor()); + } + + @Override + public IReferenceService getReferenceService(){ + return (IReferenceService) getService(IReferenceService.class, "/remoting/reference.service", new CdmServiceRequestExecutor()); + } + + @Override + public ITaxonService getTaxonService(){ + return (ITaxonService) getService(ITaxonService.class, "/remoting/taxon.service", new CdmServiceRequestExecutor()); + } + + @Override + public IClassificationService getClassificationService(){ + return (IClassificationService) getService(IClassificationService.class, "/remoting/classification.service", new CdmServiceRequestExecutor()); + } + + @Override + public ITaxonNodeService getTaxonNodeService(){ + return (ITaxonNodeService) getService(ITaxonNodeService.class, "/remoting/taxonnode.service", new CdmServiceRequestExecutor()); + } + + @Override + public IDescriptionService getDescriptionService(){ + return (IDescriptionService) getService(IDescriptionService.class, "/remoting/description.service", new CdmServiceRequestExecutor()); + } + + @Override + public IOccurrenceService getOccurrenceService(){ + return (IOccurrenceService) getService(IOccurrenceService.class, "/remoting/occurrence.service", new CdmServiceRequestExecutor()); + } + + @Override + public IPrimerService getPrimerService(){ + return (IPrimerService) getService(IPrimerService.class, "/remoting/primer.service", new CdmServiceRequestExecutor()); + } + + @Override + public IAmplificationService getAmplificationService(){ + return (IAmplificationService) getService(IAmplificationService.class, "/remoting/amplification.service", new CdmServiceRequestExecutor()); + } + + @Override + public ISequenceService getSequenceService(){ + return (ISequenceService) getService(ISequenceService.class, "/remoting/sequence.service", new CdmServiceRequestExecutor()); + } + + @Override + public IMediaService getMediaService(){ + return (IMediaService) getService(IMediaService.class, "/remoting/media.service", new CdmServiceRequestExecutor()); + } + + @Override + public ITermService getTermService(){ + return (ITermService) getService(ITermService.class, "/remoting/term.service", new TermServiceRequestExecutor()); + } + + @Override + public ICommonService getCommonService(){ + return (ICommonService) getService(ICommonService.class, "/remoting/common.service", new CdmServiceRequestExecutor()); + } + + @Override + public ILocationService getLocationService(){ + return (ILocationService) getService(ILocationService.class, "/remoting/location.service", new CdmServiceRequestExecutor()); + } + + @Override + public IUserService getUserService(){ + return (IUserService) getService(IUserService.class, "/remoting-public/user.service", new CdmServiceRequestExecutor()); + } + + + public static IUserService getUserService(ICdmRemoteSource remoteSource) { + return (IUserService) getService(IUserService.class, "/remoting-public/user.service", remoteSource, new CommonsHttpInvokerRequestExecutor()); + } + + @Override + public IMetadataService getMetadataService() { + return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", new CommonsHttpInvokerRequestExecutor()); + } + + public static IMetadataService getMetadataService(ICdmRemoteSource remoteSource) { + return (IMetadataService) getService(IMetadataService.class, "/remoting-public/metadata.service", remoteSource, new CommonsHttpInvokerRequestExecutor()); + } + + @Override + public IGrantedAuthorityService getGrantedAuthorityService(){ + return (IGrantedAuthorityService) getService(IGrantedAuthorityService.class, "/remoting/grantedauthority.service", new CdmServiceRequestExecutor()); + } + + @Override + public IService getMainService(){ + return null; + } + + + @Override + public ProviderManager getAuthenticationManager(){ + if(authenticationManager != null) { + return authenticationManager; + } + + authenticationManager = getAuthenticationManager(getUserService()); + return authenticationManager; + } + + public static ProviderManager getAuthenticationManager(IUserService userService) { + Md5PasswordEncoder passwordEncoder = new Md5PasswordEncoder(); + ReflectionSaltSource saltSource = new ReflectionSaltSource(); + saltSource.setUserPropertyToUse("getUsername"); + + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + daoAuthenticationProvider.setUserDetailsService(userService); + daoAuthenticationProvider.setSaltSource(saltSource); + daoAuthenticationProvider.setPasswordEncoder(passwordEncoder); + + return new ProviderManager(Arrays.asList((AuthenticationProvider)daoAuthenticationProvider)); + } + + + @Override + public ConversationHolder NewConversation() { + return new ConversationHolderMock(); + } + + @Override + public ICollectionService getCollectionService(){ + return (ICollectionService) getService(ICollectionService.class, "/remoting/collection.service", new CdmServiceRequestExecutor()); + } + + @Override + public IFeatureTreeService getFeatureTreeService(){ + return (IFeatureTreeService) getService(IFeatureTreeService.class, "/remoting/featuretree.service", new CdmServiceRequestExecutor()); + } + + @Override + public IFeatureNodeService getFeatureNodeService(){ + return (IFeatureNodeService) getService(IFeatureNodeService.class, "/remoting/featurenode.service", new CdmServiceRequestExecutor()); + } + + @Override + public IVocabularyService getVocabularyService(){ + return (IVocabularyService) getService(IVocabularyService.class, "/remoting/vocabulary.service", new CdmServiceRequestExecutor()); + } + + @Override + public IIdentificationKeyService getIdentificationKeyService(){ + return (IIdentificationKeyService) getService(IIdentificationKeyService.class, "/remoting/identificationkey.service", new CdmServiceRequestExecutor()); + } + + @Override + public IPolytomousKeyService getPolytomousKeyService(){ + return (IPolytomousKeyService) getService(IPolytomousKeyService.class, "/remoting/polytomouskey.service", new CdmServiceRequestExecutor()); + } + + + @Override + public IPolytomousKeyNodeService getPolytomousKeyNodeService(){ + return (IPolytomousKeyNodeService) getService(IPolytomousKeyNodeService.class, "/remoting/polytomouskeynode.service", new CdmServiceRequestExecutor()); + } + + @Override + public IProgressMonitorService getProgressMonitorService() { + return (IProgressMonitorService) getService(IProgressMonitorService.class, "/remoting/progressmonitor.service", new CdmAuthenticatedHttpInvokerRequestExecutor()); + } + + @Override + public IWorkingSetService getWorkingSetService(){ + return (IWorkingSetService) getService(IWorkingSetService.class, "/remoting/workingset.service", new CdmServiceRequestExecutor()); + } + + @Override + public IGroupService getGroupService(){ + return (IGroupService) getService(IGroupService.class, "/remoting/group.service", new CdmServiceRequestExecutor()); + } + + + @Override + public IEntityValidationService getEntityValidationService(){ + return (IEntityValidationService) getService(IEntityValidationService.class, "/remoting/entityvalidation.service", new CdmServiceRequestExecutor()); + } + + + @Override + public IEntityConstraintViolationService getEntityConstraintViolationService(){ + return (IEntityConstraintViolationService) getService(IEntityConstraintViolationService.class, "/remoting/entityconstraintviolation.service", new CdmServiceRequestExecutor()); + } + + @Override + public ICdmPermissionEvaluator getPermissionEvaluator(){ + + if(cdmPermissionEvaluator != null) { + return cdmPermissionEvaluator; + } + List decisionVoters = new ArrayList(); + decisionVoters.add(new GrantAlwaysVoter()); + decisionVoters.add(new TaxonNodeVoter()); + decisionVoters.add(new TaxonBaseVoter()); + decisionVoters.add(new DescriptionBaseVoter()); + decisionVoters.add(new DescriptionElementVoter()); + UnanimousBasedUnrevokable accessDecisionManager = new UnanimousBasedUnrevokable(decisionVoters); + + cdmPermissionEvaluator = new CdmPermissionEvaluator(); + cdmPermissionEvaluator.setAccessDecisionManager(accessDecisionManager); + + return cdmPermissionEvaluator; + } + + + @Override + public TransactionStatus startTransaction() throws UnsupportedOperationException { + throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); + } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction() - */ @Override public TransactionStatus startTransaction(Boolean readOnly) throws UnsupportedOperationException { - throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } + throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration"); + } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#commitTransaction(org.springframework.transaction.TransactionStatus) - */ @Override public void commitTransaction(TransactionStatus txStatus) throws UnsupportedOperationException { - throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration"); - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#NewConversation() - */ - @Override - public ConversationHolder NewConversation() { - return new ConversationHolderMock(); - } - - /** - * @return - */ - public IEditGeoService getEditGeoService() { - return this.editGeoService; - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setDataSource(javax.sql.DataSource) - */ - @Override - public void setDataSource(DataSource dataSource) { - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setTransactionManager(org.springframework.transaction.PlatformTransactionManager) - */ - @Override - public void setTransactionManager(PlatformTransactionManager transactionManager) { - } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setSessionFactory(org.hibernate.SessionFactory) - */ - @Override - public void setSessionFactory(SessionFactory sessionFactory) { + throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration"); + } + + @Override + public void authenticate(String username, String password){ + UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password); + Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser); + SecurityContext context = SecurityContextHolder.getContext(); + context.setAuthentication(authentication); + } + + public IIOService getIOService() { + return (IIOService) getService(IIOService.class, "/remoting/io.service", new CdmServiceRequestExecutor()); + } + + public ITestService getTestService() { + return (ITestService) getService(ITestService.class, "/remoting/test.service", new CdmServiceRequestExecutor()); } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java index 5473ac141..86228cbb5 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java @@ -1,54 +1,57 @@ /** -* Copyright (C) 2014 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. -*/ + * Copyright (C) 2014 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.cdm.api.application; import java.util.List; -import java.util.Properties; import org.apache.log4j.Logger; import org.hibernate.collection.internal.AbstractPersistentCollection; import org.hibernate.proxy.AbstractLazyInitializer; -import org.springframework.beans.MutablePropertyValues; -import org.springframework.beans.factory.config.BeanDefinition; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.ApplicationListener; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import eu.etaxonomy.cdm.api.service.ITestService; import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor; -import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor; -import eu.etaxonomy.cdm.remote.ICdmRemoteSource; +import eu.etaxonomy.cdm.ext.geo.IEditGeoService; +import eu.etaxonomy.cdm.io.service.IIOService; +import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager; +import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; /** * CDM Application Controller class for remoting clients - * + * * FIXME:Remoting extending {@link CdmApplicationController} is a temporary workaround. * The {@link CdmApplicationController} should be split into a CdmApplicationControllerBase * class with {@link CdmApplicationController} and this class as subclasses * */ public class CdmApplicationRemoteController extends CdmApplicationController { - + private static final Logger logger = Logger.getLogger(CdmApplicationRemoteController.class); - public static final Resource DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE = - new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml"); + + public static final Resource DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE = + new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml"); private final Resource applicationContextResource; private final IProgressMonitor progressMonitor; - + private ICdmRemoteSource remoteSource; + + /** * Creates new instance of CdmApplicationRemoteController - * + * * @param applicationContextResource * @param remoteSource * @param omitTermLoading @@ -56,21 +59,20 @@ public class CdmApplicationRemoteController extends CdmApplicationController { * @param listeners * @return */ - public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource, - ICdmRemoteSource remoteSource, - boolean omitTermLoading, - IProgressMonitor progressMonitor, - List listeners) { - return new CdmApplicationRemoteController(applicationContextResource, - remoteSource, - omitTermLoading, - progressMonitor, - listeners); - - } +// public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource, +// ICdmRemoteSource remoteSource, +// IProgressMonitor progressMonitor, +// List listeners) { +// return new CdmApplicationRemoteController(applicationContextResource, +// remoteSource, +// false, +// progressMonitor, +// listeners); +// +// } /** * Creates new instance of CdmApplicationRemoteController - * + * * @param applicationContextResource * @param remoteSource * @param omitTermLoading @@ -78,116 +80,115 @@ public class CdmApplicationRemoteController extends CdmApplicationController { * @param listeners * @return */ - public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource, - boolean omitTermLoading, - IProgressMonitor progressMonitor, - List listeners) { - - return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE, - remoteSource, - omitTermLoading, - progressMonitor, - listeners); - + public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource, + IProgressMonitor progressMonitor, + List listeners) { + + return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE, + remoteSource, + false, + progressMonitor, + listeners); + } - - /** - * Constructs CdmApplicationRemoteController - * - * @param applicationContextResource - * @param remoteSource - * @param omitTermLoading - * @param progressMonitor - * @param listeners - */ - private CdmApplicationRemoteController(Resource applicationContextResource, - ICdmRemoteSource remoteSource, - boolean omitTermLoading, - IProgressMonitor progressMonitor, - List listeners){ - logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName()); - this.applicationContextResource = - applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE; + + public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource, + boolean validateXml, + IProgressMonitor progressMonitor, + List listeners) { + + return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE, + remoteSource, + validateXml, + progressMonitor, + listeners); + + } + + /** + * Constructs CdmApplicationRemoteController + * + * @param applicationContextResource + * @param remoteSource + * @param omitTermLoading + * @param progressMonitor + * @param listeners + */ + private CdmApplicationRemoteController(Resource applicationContextResource, + ICdmRemoteSource remoteSource, + boolean validateXml, + IProgressMonitor progressMonitor, + List listeners){ + logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName()); + this.applicationContextResource = + applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE; this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor(); + this.remoteSource = remoteSource; + setNewRemoteSource(remoteSource, validateXml, listeners); + + } + + - setNewRemoteSource(remoteSource, omitTermLoading, listeners); - - } - - - /** * Creates and starts a new spring application context - * + * * @param remoteSource object for connecting to an http-invoker server * @param omitTermLoading * @param listeners * @return */ - protected boolean setNewRemoteSource(ICdmRemoteSource remoteSource, - boolean omitTermLoading, - List listeners){ + public boolean setNewRemoteSource(ICdmRemoteSource remoteSource, + boolean validateXml, + List listeners){ logger.info("Connecting to '" + remoteSource.getName() + "'"); - MonitoredGenericApplicationContext applicationContext = new MonitoredGenericApplicationContext(); - int refreshTasks = 45; - int nTasks = 5 + refreshTasks; + int nTasks = 2; progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks); - progressMonitor.subTask("Registering remote source."); - PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); - Properties properties = new Properties(); - properties.setProperty("remoteServer", remoteSource.getServer()); - properties.setProperty("remotePort", String.valueOf(remoteSource.getPort())); - properties.setProperty("remoteContext", remoteSource.getContextPath()); - pspc.setProperties(properties); - applicationContext.addBeanFactoryPostProcessor(pspc); + progressMonitor.subTask("Initialising CDM Model Cache ..."); + CdmRemoteCacheManager.getInstance(); progressMonitor.worked(1); - - XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext); - //xmlReader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE); - progressMonitor.subTask("Registering resources."); - xmlReader.loadBeanDefinitions(applicationContextResource); + progressMonitor.subTask("Starting application context ..."); + init(); progressMonitor.worked(1); - - //omitTerms - if (omitTermLoading == true){ - String initializerName = "persistentTermInitializer"; - BeanDefinition beanDef = applicationContext.getBeanDefinition(initializerName); - MutablePropertyValues values = beanDef.getPropertyValues(); - values.addPropertyValue("omit", omitTermLoading); - } - - if (listeners != null){ - for(ApplicationListener listener : listeners){ - applicationContext.addApplicationListener(listener); - } - } - - - applicationContext.refresh(new SubProgressMonitor(progressMonitor, refreshTasks)); - applicationContext.start(); - - progressMonitor.subTask("Cleaning up."); - setApplicationContext(applicationContext); - progressMonitor.worked(1); - progressMonitor.done(); return true; } - + + + /* (non-Javadoc) * @see eu.etaxonomy.cdm.api.application.CdmApplicationController#init() */ @Override - protected void init(){ - configuration = (ICdmApplicationConfiguration)applicationContext.getBean("cdmApplicationRemoteConfiguration"); - AbstractLazyInitializer.setConfiguration(this); - AbstractPersistentCollection.setConfiguration(this); + protected void init(){ + configuration = new CdmApplicationRemoteConfiguration(remoteSource); + ((CdmApplicationRemoteConfiguration)configuration).setApplicationContext(applicationContext); + AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration); + AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration); + } + + public ICdmEntitySessionManager getCdmEntitySessionManager() { + return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager(); + } + public IIOService getIOService(){ + return ((CdmApplicationRemoteConfiguration)configuration).getIOService(); } + public ITestService getTestService(){ + return ((CdmApplicationRemoteConfiguration)configuration).getTestService(); + } + + public ICachedCommonService getCachedCommonService(){ + return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService(); + } + + public IEditGeoService getEditGeoService() { + return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService(); + } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java new file mode 100644 index 000000000..05ac0435a --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationState.java @@ -0,0 +1,290 @@ +// $Id$ +/** +* Copyright (C) 2015 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.cdm.api.application; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Dictionary; +import java.util.jar.Attributes; +import java.util.jar.JarFile; +import java.util.jar.Manifest; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osgi.util.ManifestElement; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; +import org.osgi.framework.Constants; +import org.springframework.security.core.context.SecurityContext; + +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.api.service.ICommonService; +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.ITestService; +import eu.etaxonomy.cdm.io.service.IIOService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; +import eu.etaxonomy.taxeditor.session.DefaultNewEntityListener; + +/** + * @author cmathew + * @date 17 Jun 2015 + * + */ +public class CdmApplicationState { + + private static CdmApplicationState cdmApplicationState; + + private ICdmApplicationConfiguration appConfig; + + private ICdmDataChangeService dataChangeService; + + private SecurityContext securityContext; + + private static CdmServiceCacher cdmServiceCacher; + + private static String cdmlibVersion = null; + private static String cdmlibLastModified = null; + + public static CdmApplicationState getInstance() { + if(cdmApplicationState == null) { + cdmApplicationState = new CdmApplicationState(); + } + + return cdmApplicationState; + } + + public void setAppConfig(ICdmApplicationConfiguration appConfig) { + this.appConfig = appConfig; + if(appConfig instanceof CdmApplicationRemoteController) { + CdmBase.setNewEntityListener(new DefaultNewEntityListener()); + } else { + CdmBase.setNewEntityListener(null); + } + } + + public ICdmApplicationConfiguration getAppConfig() { + return appConfig; + } + + public static void setCurrentAppConfig(ICdmApplicationConfiguration appConfig) { + getInstance().setAppConfig(appConfig); + } + + public static ICdmApplicationConfiguration getCurrentAppConfig() { + return getInstance().getAppConfig(); + } + + /** + * @return the dataChangeService + */ + public ICdmDataChangeService getDataChangeService() { + return dataChangeService; + } + + /** + * @param dataChangeService the dataChangeService to set + */ + public void setDataChangeService(ICdmDataChangeService dataChangeService) { + this.dataChangeService = dataChangeService; + } + + public static ICdmDataChangeService getCurrentDataChangeService() { + return getInstance().getDataChangeService(); + } + + public static void setCurrentDataChangeService(ICdmDataChangeService dataChangeService) { + getInstance().setDataChangeService(dataChangeService); + } + + + + /** + * @return the securityContext + */ + public SecurityContext getSecurityContext() { + return securityContext; + } + + /** + * @param securityContext the securityContext to set + */ + public void setSecurityContext(SecurityContext securityContext) { + this.securityContext = securityContext; + } + + /** + * @return the securityContext + */ + public static SecurityContext getCurrentSecurityContext() { + return getInstance().getSecurityContext(); + } + + /** + * @param securityContext the securityContext to set + */ + public static void setCurrentSecurityContext(SecurityContext securityContext) { + getInstance().setSecurityContext(securityContext); + } + + public static void dispose() { + getInstance().setCurrentDataChangeService(null); + getInstance().setAppConfig(null); + getInstance().setSecurityContext(null); + cdmApplicationState = null; + cdmServiceCacher = null; + cdmlibVersion = null; + cdmlibLastModified = null; + } + + + /** + * Generic method that will scan the getters of {@link ICdmApplicationConfiguration} for the given service + * interface. If a matching getter is found the according service implementation is returned by + * invoking the getter otherwise the method returns null. + * + * @param + * @param serviceClass + * @return the configured implementation of serviceClass or null + * @throws CdmApplicationException + */ + public static T getService(Class serviceClass) throws CdmApplicationException { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + Method[] methods = ICdmApplicationConfiguration.class.getDeclaredMethods(); + + T service = null; + + for (Method method : methods) { + Type type = method.getGenericReturnType(); + + if (type.equals(serviceClass)) { + try { + service = (T) method.invoke(configuration, null); + break; + } catch (IllegalArgumentException iae) { + throw new CdmApplicationException(iae); + } catch (IllegalAccessException iae) { + throw new CdmApplicationException(iae); + } catch (InvocationTargetException ite) { + throw new CdmApplicationException(ite); + } + } + } + + return service; + } + + + /** + * @see #getService(Class) + * As ICommonService is not extending IService we need a specific request here + */ + public static ICommonService getCommonService() { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + return configuration.getCommonService(); + + } + + public static IIOService getIOService() { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + return ((CdmApplicationRemoteController)configuration).getIOService(); + + } + + + public static ITestService getTestService() { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + return ((CdmApplicationRemoteController)configuration).getTestService(); + + } + + public static ICachedCommonService getCachedCommonService() { + ICdmApplicationConfiguration configuration = getCurrentAppConfig(); + + return ((CdmApplicationRemoteController)configuration).getCachedCommonService(); + + } + + public static CdmServiceCacher getCdmServiceCacher() { + return cdmServiceCacher; + } + + public static void setCdmServiceCacher(CdmServiceCacher cacher) { + cdmServiceCacher = cacher; + } + + public static void updateCdmlibManifestInfo() { + cdmlibVersion = null; + cdmlibLastModified = null; + String cdmlibPathPrefix = "lib/cdmlib-services-"; + String jarSuffix = ".jar"; + Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.cdmlib"); + Dictionary headers = bundle.getHeaders(); + String bundleClasspath = headers.get(Constants.BUNDLE_CLASSPATH); + try { + ManifestElement[] elements = ManifestElement.parseHeader(Constants.BUNDLE_CLASSPATH, bundleClasspath); + for (ManifestElement manifestElement : elements) { + String jar = manifestElement.getValue(); + if(jar.startsWith(cdmlibPathPrefix) && jar.endsWith(jarSuffix)) { + URL fileURL = bundle.getEntry(jar); + File file = null; + try { + String urlString = FileLocator.resolve(fileURL).toExternalForm().replace(" ", "%20"); + file = new File(new URI(urlString)); + JarFile jarFile = new JarFile(file); + Manifest manifest = jarFile.getManifest(); + Attributes attributes = manifest.getMainAttributes(); + // from the OSGI spec the LastModified value is " the number of milliseconds + // since midnight Jan. 1, 1970 UTC with the condition that a change must + // always result in a higher value than the previous last modified time + // of any bundle" + cdmlibVersion = attributes.getValue("Bundle-Version"); + cdmlibLastModified = attributes.getValue("Bnd-LastModified"); + + jarFile.close(); + if(cdmlibVersion == null || cdmlibLastModified == null) { + throw new IllegalStateException("Invalid cdmlib manifest info"); + } + } catch (URISyntaxException urise) { + throw new IllegalStateException(urise); + } catch (IOException ioe) { + throw new IllegalStateException(ioe); + } + } + } + } catch (BundleException e) { + throw new IllegalStateException(e); + } + } + + public static String getCdmlibVersion() { + if(cdmlibVersion == null) { + updateCdmlibManifestInfo(); + } + return cdmlibVersion; + } + + public static String getCdmlibLastModified() { + if(cdmlibLastModified == null) { + updateCdmlibManifestInfo(); + } + return cdmlibLastModified; + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmChangeEvent.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmChangeEvent.java new file mode 100644 index 000000000..4dddf33c8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmChangeEvent.java @@ -0,0 +1,96 @@ +// $Id$ +/** +* Copyright (C) 2015 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.cdm.api.application; + +import java.util.HashSet; +import java.util.Set; + +import eu.etaxonomy.cdm.model.common.CdmBase; + +/** + * @author cmathew + * @date 7 Apr 2015 + * + */ +public class CdmChangeEvent { + + public enum Action { + Create, + Update, + Delete + } + + private final Action action; + private final Set changedObjects; + private final Class sourceType; + private Class entityType; + private Object source; + + public CdmChangeEvent(Action action, Set changedObjects, Class sourceType) { + this.action = action; + this.changedObjects = changedObjects; + this.sourceType = sourceType; + } + + public CdmChangeEvent(Action action, CdmBase changedObject, Class sourceType) { + this.action = action; + changedObjects = new HashSet(); + changedObjects.add(changedObject); + this.sourceType = sourceType; + } + + public CdmChangeEvent(Action action, Set changedObjects, Class sourceType, Class entityType) { + this(action, changedObjects, sourceType); + this.entityType = entityType; + } + + public CdmChangeEvent(Action action, Set changedObjects, Object source) { + this(action, changedObjects, source.getClass()); + this.source = source; + } + + /** + * @return the action + */ + public Action getAction() { + return action; + } + + /** + * @return the changedObjects + */ + public Set getChangedObjects() { + return changedObjects; + } + + /** + * @return the sourceType + */ + public Class getSourceType() { + return sourceType; + } + + + /** + * @return the source + */ + public Object getSource() { + return source; + } + + public Class getEntityType() { + return entityType; + } + + public boolean hasChanges() { + return changedObjects != null && !changedObjects.isEmpty(); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmDataChangeService.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmDataChangeService.java new file mode 100644 index 000000000..f56910257 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmDataChangeService.java @@ -0,0 +1,94 @@ +// $Id$ +/** + * Copyright (C) 2015 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.cdm.api.application; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author cmathew + * @date 18 Jun 2015 + * + */ +public class CdmDataChangeService implements ICdmDataChangeService { + + protected final Set listeners; + + private final List currentEvents; + + public CdmDataChangeService() { + listeners = new HashSet(); + currentEvents = new ArrayList(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.store.ICdmDataChangeService#register(eu.etaxonomy.cdm.api.application.ICdmChangeListener) + */ + @Override + public void register(ICdmChangeListener listener) { + listeners.add(listener); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.application.ICdmDataChangeService#unregister(eu.etaxonomy.cdm.api.application.ICdmChangeListener) + */ + @Override + public void unregister(ICdmChangeListener listener) { + listeners.remove(listener); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.store.ICdmDataChangeService#addEvent(eu.etaxonomy.cdm.api.application.CdmChangeEvent) + */ + @Override + public void addEvent(CdmChangeEvent event) { + currentEvents.add(event); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.store.ICdmDataChangeService#fireCurrentChangeEvents(boolean) + */ + @Override + public void fireCurrentChangeEvents(boolean async) { + try { + for(CdmChangeEvent event : currentEvents) { + fireChangeEvent(event,async); + } + } finally { + currentEvents.clear(); + } + } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.store.ICdmDataChangeService#fireChangeEvent(eu.etaxonomy.cdm.api.application.CdmChangeEvent, boolean) + */ + @Override + public void fireChangeEvent(final CdmChangeEvent event, boolean async) { + + for(final ICdmChangeListener listener : listeners) { + listener.onChange(event); + } + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.store.ICdmDataChangeService#clear() + */ + @Override + public void clear() { + listeners.clear(); + currentEvents.clear(); + } + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmChangeListener.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmChangeListener.java new file mode 100644 index 000000000..4ae183460 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmChangeListener.java @@ -0,0 +1,21 @@ +// $Id$ +/** +* Copyright (C) 2015 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.cdm.api.application; + +/** + * @author cmathew + * @date 7 Apr 2015 + * + */ +public interface ICdmChangeListener { + + public void onChange(CdmChangeEvent event); + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmDataChangeService.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmDataChangeService.java new file mode 100644 index 000000000..84bb324c6 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/ICdmDataChangeService.java @@ -0,0 +1,32 @@ +// $Id$ +/** + * Copyright (C) 2015 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.cdm.api.application; + + +/** + * @author cmathew + * @date 18 Jun 2015 + * + */ +public interface ICdmDataChangeService { + + public abstract void register(ICdmChangeListener listener); + + public abstract void unregister(ICdmChangeListener listener); + + public abstract void addEvent(CdmChangeEvent event); + + public abstract void fireCurrentChangeEvents(boolean async); + + public abstract void fireChangeEvent(CdmChangeEvent event, boolean async); + + public abstract void clear(); + +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java index 4de156c49..288b20eb1 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java @@ -2,11 +2,22 @@ package eu.etaxonomy.cdm.api.cache; import java.util.UUID; -import org.springframework.beans.factory.annotation.Autowired; +import net.sf.ehcache.config.CacheConfiguration; +import net.sf.ehcache.config.SizeOfPolicyConfiguration; + import org.springframework.stereotype.Component; -import eu.etaxonomy.cdm.api.service.ITermService; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.taxeditor.remoting.cache.CacheLoader; +import eu.etaxonomy.taxeditor.remoting.cache.CdmEntityCacheKey; +import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; +import eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor; +import eu.etaxonomy.taxeditor.session.CdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver; /** * Class which uses CDM services to cache cdm entities @@ -20,41 +31,120 @@ import eu.etaxonomy.cdm.model.common.CdmBase; * @param */ @Component -public class CdmServiceCacher extends CdmCacher { +public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionManagerObserver { - @Autowired - ITermService termService; - @Override - protected T findByUuid(UUID uuid) { - return (T)termService.findWithoutFlush(uuid); - } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.cache.CdmCacher#setup() - */ + private ICdmEntitySessionManager cdmEntitySessionManager; + + private CdmTransientEntityCacher cdmTransientEntityCacher; + + private CacheLoader cacheLoader; + @Override protected void setup() { - // TODO Auto-generated method stub + DefinedTermBase.setCacher(this); + CdmTransientEntityCacher.setDefaultCacher(this); + TermServiceRequestExecutor.setDefaultCacher(this); + cacheLoader = new CacheLoader(this); + } + + + @Override + protected CacheConfiguration getDefaultCacheConfiguration() { + // For a better understanding on how to size caches, refer to + // http://ehcache.org/documentation/configuration/cache-size + + SizeOfPolicyConfiguration sizeOfConfig = new SizeOfPolicyConfiguration(); + sizeOfConfig.setMaxDepth(100); + sizeOfConfig.setMaxDepthExceededBehavior("abort"); + + return new CacheConfiguration(DEFAULT_CACHE_NAME, 0) + .eternal(true) + .statistics(true) + .sizeOfPolicy(sizeOfConfig) + .overflowToOffHeap(false); + + } + + @Override + protected CdmBase findByUuid(UUID uuid) { + CdmBase term = CdmApplicationState.getCurrentAppConfig().getTermService().findWithoutFlush(uuid); + return load(term); } /* (non-Javadoc) * @see eu.etaxonomy.cdm.model.ICdmCacher#isCachable(eu.etaxonomy.cdm.model.common.CdmBase) */ @Override - public boolean isCachable(CdmBase arg0) { - // TODO Auto-generated method stub + public boolean isCachable(CdmBase cdmEntity) { + if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) { + return true; + } return false; } + + public void setCdmEntitySessionManager(ICdmEntitySessionManager cdmEntitySessionManager) { + this.cdmEntitySessionManager = cdmEntitySessionManager; + if(cdmEntitySessionManager != null) { + cdmEntitySessionManager.addSessionObserver(this); + } + } + + + public CdmTransientEntityCacher getCurrentCacher() { + ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession(); + if(cdmEntitySession != null && cdmEntitySession instanceof CdmEntitySession) { + return ((CdmEntitySession) cdmEntitySession).getCacher(); + } + return null; + } + + @Override + public CdmBase getFromCache(CdmBase cdmBase) { + CdmBase cachedCdmEntity = null; + // first we check in the active session cache if the + // entity has been loaded there + // FIXME:Remoting do we really need the cdmTransientEntityCacher + // here. Is it not guarenteed that all every entity which 'isCachable' + // by this cacher is cached only in this cacher ? + if(!isCachable(cdmBase) && cdmTransientEntityCacher != null) { + CdmEntityCacheKey key = CdmTransientEntityCacher.generateKey(cdmBase); + cachedCdmEntity = cdmTransientEntityCacher.getFromCache(key); + + } + if(cachedCdmEntity == null) { + cachedCdmEntity = super.getFromCache(cdmBase); + } + return cachedCdmEntity; + } + + /* (non-Javadoc) * @see eu.etaxonomy.cdm.api.cache.CdmCacher#load(eu.etaxonomy.cdm.model.common.CdmBase) */ @Override - public CdmBase load(CdmBase arg0) { - // TODO Auto-generated method stub - return null; + public CdmBase load(CdmBase cdmEntity) { + CdmBase cachedCdmEntity = getFromCache(cdmEntity.getUuid()); + + if(isCachable(cdmEntity) && cachedCdmEntity == null) { + cachedCdmEntity = cacheLoader.load(cdmEntity, false, true); + } + return cachedCdmEntity; } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver#changed() + */ + @Override + public void changed() { + ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession(); + if(cdmEntitySession != null && cdmEntitySession instanceof CdmEntitySession) { + this.cdmTransientEntityCacher = ((CdmEntitySession) cdmEntitySession).getCacher(); + } else { + this.cdmTransientEntityCacher = null; + } + } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java new file mode 100644 index 000000000..08cc0114d --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java @@ -0,0 +1,13 @@ +package eu.etaxonomy.taxeditor.remoting; + +public class CdmEagerLoadingException extends RuntimeException { + + public CdmEagerLoadingException(Throwable t) { + super(t); + } + + public CdmEagerLoadingException(String message) { + super(message); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java new file mode 100644 index 000000000..13fcb4fcd --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java @@ -0,0 +1,18 @@ +package eu.etaxonomy.taxeditor.remoting; + +public class CdmRemotingException extends RuntimeException { + + /** + * + */ + private static final long serialVersionUID = -560332689478356360L; + + public CdmRemotingException(String message) { + super(message); + } + + public CdmRemotingException(Exception exception) { + super(exception); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java new file mode 100644 index 000000000..c99ce01b6 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java @@ -0,0 +1,412 @@ +// $Id$ +/** + * Copyright (C) 2015 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.remoting.cache; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.Element; + +import org.apache.log4j.Logger; +import org.springframework.util.ReflectionUtils; + +import eu.etaxonomy.cdm.api.service.pager.Pager; +import eu.etaxonomy.cdm.model.ICdmCacher; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; + +/** + * @author cmathew + * @date 19 Feb 2015 + * + */ +public class CacheLoader { + private static final Logger logger = Logger.getLogger(CacheLoader.class); + + private static boolean isRecursiveEnabled = true; + + protected final ICdmCacher cdmCacher; + + private final Cache cdmlibModelCache; + + + + public CacheLoader(ICdmCacher cdmCacher) { + this.cdmCacher = cdmCacher; + this.cdmlibModelCache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache(); + + } + + + public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) { + Element e = cdmlibModelCache.get(className); + if (e == null) { + return null; + } else { + return (CdmModelFieldPropertyFromClass) e.getObjectValue(); + } + } + + @SuppressWarnings("unchecked") + public T load(T obj, boolean recursive, boolean update) { + if(obj == null) { + return null; + } + if(obj instanceof CdmBase) { + return (T) load((CdmBase)obj, recursive, update); + } else if (obj instanceof Map) { + return (T) load((Map)obj, recursive, update); + } else if (obj instanceof Collection) { + return (T) load((Collection)obj, recursive, update); + } else if(obj instanceof Pager) { + load(((Pager)obj).getRecords(), recursive, update); + return obj; + } else if(obj instanceof MergeResult) { + return (T) load((MergeResult)obj, recursive, update); + } + + return obj; + } + + @SuppressWarnings("unchecked") + private T loadRecursive(T obj, List alreadyVisitedEntities, boolean update) { + if(obj == null) { + return null; + } + if(obj instanceof CdmBase) { + return (T) loadRecursive((CdmBase)obj, alreadyVisitedEntities, update); + } else if (obj instanceof Map) { + return (T) load((Map)obj, alreadyVisitedEntities, update); + } else if (obj instanceof Collection) { + return (T) load((Collection)obj, alreadyVisitedEntities, update); + } else if (obj instanceof MergeResult) { + return (T) loadRecursive((MergeResult)obj, alreadyVisitedEntities, update); + } + + + logger.info("No caching yet for type " + obj.getClass().getName()); + + return obj; + } + + public Map load(Map map, boolean recursive, boolean update){ + + + if(isRecursiveEnabled && recursive) { + logger.info("---- starting recursive load for cdm entity map"); + List alreadyVisitedEntities = new ArrayList(); + Map cachedMap = load(map, alreadyVisitedEntities, update); + alreadyVisitedEntities.clear(); + logger.info("---- ending recursive load for cdm entity map \n"); + return cachedMap; + } else { + return load(map, null, update); + } + } + + + private Map load(Map map, List alreadyVisitedEntities, boolean update){ + //map = (Map)deproxy(map); + + if(map == null || map.isEmpty()) { + return map; + } + + int originalMapSize = map.size(); + Object[] result = new Object[ map.size() * 2 ]; + Iterator> iter = map.entrySet().iterator(); + int i=0; + // to avoid ConcurrentModificationException + alreadyVisitedEntities.add(map); + while ( iter.hasNext() ) { + Map.Entry e = iter.next(); + result[i++] = e.getKey(); + result[i++] = e.getValue(); + } + + for(i=0; i Collection load(Collection collection, boolean recursive, boolean update){ + + Collection loadedCollection; + if(isRecursiveEnabled && recursive) { + logger.info("---- starting recursive load for cdm entity collection"); + List alreadyVisitedEntities = new ArrayList(); + Collection cachedCollection = load(collection, alreadyVisitedEntities, update); + alreadyVisitedEntities.clear(); + logger.info("---- ending recursive load for cdm entity collection \n"); + loadedCollection = cachedCollection; + } else { + loadedCollection = load(collection, null, update); + } + return loadedCollection; + } + + @SuppressWarnings("unchecked") + private Collection load(Collection collection, List alreadyVisitedEntities, boolean update) { + + + + if(collection == null || collection.isEmpty()) { + return collection; + } + int length = collection.size(); + Object[] result = new Object[length]; + Iterator collectionItr = collection.iterator(); + int count = 0; + // to avoid ConcurrentModificationException + alreadyVisitedEntities.add(collection); + while(collectionItr.hasNext()) { + Object obj = collectionItr.next(); + if(alreadyVisitedEntities == null) { + result[count] = load(obj, false, update); + } else { + result[count] = loadRecursive(obj, alreadyVisitedEntities, update); + } + + count++; + } + + collection.clear(); + + for ( int i = 0; i < length; i++ ) { + collection.add((T)result[i]); + } + + return collection; + } + + + public MergeResult load(MergeResult mergeResult, boolean recursive, boolean update) { + CdmBase cdmBase = load(mergeResult.getMergedEntity(), recursive, update); + load(mergeResult.getNewEntities(), recursive, update); + return new MergeResult(cdmBase, mergeResult.getNewEntities()); + } + + public MergeResult loadRecursive(MergeResult mergeResult,List alreadyVisitedEntities, boolean update) { + CdmBase cdmBase = loadRecursive(mergeResult.getMergedEntity(), alreadyVisitedEntities, update); + loadRecursive(mergeResult.getNewEntities(), alreadyVisitedEntities, update); + return new MergeResult(cdmBase, mergeResult.getNewEntities()); + } + + /** + * Puts the (Key,Value) pair of ({@link java.util.UUID}, {@link eu.etaxonomy.cdm.model.common.CdmBase}), + * in the cache corresponding to the given cache id + * + * @param cacheId + * @param uuid + * @param cdmEntity + */ + public CdmBase load(CdmBase cdmEntity, boolean recursive, boolean update) { + if(cdmEntity == null) { + return null; + } + + // start by looking up the cdm entity in the cache + CdmBase cachedCdmEntity = cdmCacher.getFromCache(cdmEntity); + + if(cachedCdmEntity != null) { + // if cdm entity was found in cache then + logger.info(" - object of type " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId() + " already exists"); + // .. return if the cached and input objects are identical, else (this is a newly loaded object so) continue + if(cachedCdmEntity == cdmEntity) { + return cachedCdmEntity; + } + } + + CdmBase loadedCdmBase; + if(isRecursiveEnabled && recursive) { + logger.info("---- starting recursive load for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId()); + List alreadyVisitedEntities = new ArrayList(); + CdmBase cb = loadRecursive(cdmEntity, alreadyVisitedEntities, update); + alreadyVisitedEntities.clear(); + logger.info("---- ending recursive load for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId() + "\n"); + loadedCdmBase = cb; + } else { + loadedCdmBase = load(cdmEntity); + } + return loadedCdmBase; + + } + + + protected CdmBase load(CdmBase cdmEntity) { + logger.info("loading object of type " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId()); + cdmCacher.put((CdmBase)ProxyUtils.deproxy(cdmEntity)); + return cdmCacher.getFromCache(cdmEntity); + } + + + private CdmBase loadRecursive(CdmBase cdmEntity, List alreadyVisitedEntities, boolean update) { + + CdmBase cachedCdmEntity = load(cdmEntity); + + + // we want to recursive through the cdmEntity (and not the cachedCdmEntity) + // since there could be new or deleted objects in the cdmEntity sub-graph + + // start by getting the fields from the cdm entity + String className = cdmEntity.getClass().getName(); + CdmModelFieldPropertyFromClass cmgmfc = getFromCdmlibModelCache(className); + if(cmgmfc != null) { + alreadyVisitedEntities.add(cdmEntity); + List fields = cmgmfc.getFields(); + for(String field : fields) { + // retrieve the actual object corresponding to the field. + // this object will be either a CdmBase or a Collection / Map + // with CdmBase as the generic type + + CdmBase cdmEntityInSubGraph = getCdmBaseTypeFieldValue(cdmEntity, cachedCdmEntity, field, alreadyVisitedEntities, update); + if(cdmEntityInSubGraph != null) { + //checkForIdenticalCdmEntity(alreadyVisitedEntities, cdmEntityInSubGraph); + if(!checkForIdenticalCdmEntity(alreadyVisitedEntities, cdmEntityInSubGraph)) { + logger.info("recursive loading object of type " + cdmEntityInSubGraph.getClass().getName() + " with id " + cdmEntityInSubGraph.getId()); + loadRecursive(cdmEntityInSubGraph, alreadyVisitedEntities, update); + } else { + logger.info("object of type " + cdmEntityInSubGraph.getClass().getName() + " with id " + cdmEntityInSubGraph.getId() + " already visited"); + } + } + } + } else { + throw new CdmClientCacheException("CdmEntity with class " + cdmEntity.getClass().getName() + " is not found in the cdmlib model cache. " + + "The cache may be corrupted or not in sync with the latest model version" ); + } + + return cachedCdmEntity; + } + + + private CdmBase getCdmBaseTypeFieldValue(CdmBase cdmEntity, + CdmBase cachedCdmEntity, + String fieldName, + List alreadyVisitedEntities, + boolean update) { + + // this method attempts to make sure that for any two objects found in + // the object graph, if they are equal then they should also be the same, + // which is crucial for the merge to work + if(cachedCdmEntity == null) { + throw new CdmClientCacheException("When trying to set field value, the cached cdm entity cannot be null"); + } + + Class clazz = cdmEntity.getClass(); + try { + // this call will search in the provided class as well as + // the super classes until it finds the field + Field field = ReflectionUtils.findField(clazz, fieldName); + + if(field == null) { + throw new CdmClientCacheException("Field '" + fieldName + + "' not found when searching in class '" + clazz.getName() + "' and its supercalsses"); + } + field.setAccessible(true); + Object o = field.get(cdmEntity); + // resetting the value in cdm entity to the deproxied object + o = ProxyUtils.deproxy(o); + field.set(cdmEntity, o); + Object cachedo = field.get(cachedCdmEntity); + CdmBase cdmEntityInSubGraph = null; + + if(update || ProxyUtils.isProxy(cachedo)) { + // if we are in update mode we have to make the field of the cached entity + // up-to-date by setting it to the value of the cdm entity being loaded + // + // if the cdm entity is a proxy then we always update to make sure that + // newly created entities are always up-to-date + // + // NOTE : the field is overridden in the case of the exception + // found below + field.set(cachedCdmEntity, o); + + } + + if(o != null && !ProxyUtils.isProxy(o)) { + if(CdmBase.class.isAssignableFrom(o.getClass())) { + logger.info("found initialised cdm entity '" + fieldName + "' in object of type " + clazz.getName() + " with id " + cdmEntity.getId()); + + cdmEntityInSubGraph = (CdmBase)o; + CdmBase cachedCdmEntityInSubGraph = cdmCacher.getFromCache(cdmEntityInSubGraph); + + if(cachedCdmEntityInSubGraph != null) { + if(cachedCdmEntityInSubGraph != cdmEntityInSubGraph) { + // exception : is the case where + // the field has been already initialised, cached and + // is not the same as the one in the cache, in which case we set the value + // of the field to the one found in the cache + logger.info("setting cached + real value to '" + fieldName + "' in object of type " + clazz.getName() + " with id " + cdmEntity.getId()); + field.set(cachedCdmEntity, cachedCdmEntityInSubGraph); + field.set(cdmEntity, cachedCdmEntityInSubGraph); + } else { + // since the field value object in cdmEntity + // is the same as the field value object in cachedCdmEntity + // we are sure that the its subgraph is also correctly loaded, + // so we can exit the recursion + return null; + } + } + } else if(o instanceof Map && !checkForIdenticalCdmEntity(alreadyVisitedEntities, o)) { + loadRecursive((Map)o, alreadyVisitedEntities, update); + } else if(o instanceof Collection && !checkForIdenticalCdmEntity(alreadyVisitedEntities, o)) { + loadRecursive((Collection)o, alreadyVisitedEntities, update); + } + } + // we return the original cdm entity in the sub graph because we + // want to continue to recurse on the input cdm entity graph + // and not the one in the cache + return cdmEntityInSubGraph; + } catch (SecurityException e) { + throw new CdmClientCacheException(e); + } catch (IllegalArgumentException e) { + throw new CdmClientCacheException(e); + } catch (IllegalAccessException e) { + throw new CdmClientCacheException(e); + } + } + + private boolean checkForIdenticalCdmEntity(List objList, Object objToCompare) { + if(objToCompare != null) { + for(Object obj : objList) { + if(obj == objToCompare) { + return true; + } + } + } + return false; + } + + + public static boolean isRecursiveEnabled() { + return isRecursiveEnabled; + } + + public static void setRecursiveEnabled(boolean ire) { + isRecursiveEnabled = ire; + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java new file mode 100644 index 000000000..e00649f76 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java @@ -0,0 +1,12 @@ +package eu.etaxonomy.taxeditor.remoting.cache; + +public class CdmClientCacheException extends RuntimeException { + + public CdmClientCacheException(String message) { + super(message); + } + + public CdmClientCacheException(Exception e) { + super(e); + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java new file mode 100644 index 000000000..74e543cef --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java @@ -0,0 +1,56 @@ +package eu.etaxonomy.taxeditor.remoting.cache; + +import eu.etaxonomy.cdm.model.common.CdmBase; + +public class CdmEntityCacheKey { + + private Class persistenceClass; + private int persistenceId; + + public CdmEntityCacheKey(CdmBase cdmBase) { + this.persistenceClass = cdmBase.getClass(); + this.persistenceId = cdmBase.getId(); + } + + public CdmEntityCacheKey(Class clazz, int id) { + this.persistenceClass = clazz; + this.persistenceId = id; + } + + + + public Class getPersistenceClass() { + return persistenceClass; + } + + public int getPersistenceId() { + return persistenceId; + } + @Override + public boolean equals(Object obj) { + if(obj == null || !(obj instanceof CdmEntityCacheKey)) { + return false; + } + + if(this == obj) { + return true; + } + CdmEntityCacheKey that = (CdmEntityCacheKey) obj; + if(this.persistenceClass.equals(that.persistenceClass) && this.persistenceId == that.persistenceId) { + return true; + } + + return false; + } + + @Override + public int hashCode() { + return (this.persistenceClass.getName() + String.valueOf(this.persistenceId)).hashCode(); + } + + @Override + public String toString() { + return this.persistenceClass.getName() + String.valueOf(this.persistenceId); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java new file mode 100644 index 000000000..cf53ea5e1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java @@ -0,0 +1,137 @@ +package eu.etaxonomy.taxeditor.remoting.cache; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Field; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.Element; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.hibernate.cfg.Configuration; +import org.hibernate.mapping.PersistentClass; +import org.hibernate.mapping.Property; +import org.hibernate.property.Getter; +import org.osgi.framework.Bundle; + + +public class CdmModelCacher { + + + + + public static String HB_CONFIG_FILE_PATH= "/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml"; + + public static final String CDM_MAP_SER_FILE_PATH = "resources/cdm.map.ser"; + + + + + public void cacheGetterFields(Cache cache) throws IOException, ClassNotFoundException, URISyntaxException { + Map modelClassMap = loadModelClassMap(); + + cache.removeAll(); + + for(Map.Entry entry : modelClassMap.entrySet()) { + cache.put(new Element(entry.getKey(), entry.getValue())); + } + } + + public Map loadModelClassMap() throws URISyntaxException, IOException, ClassNotFoundException { + + Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.cdmlib"); + + URL modelMapFileBundleURL = bundle.getEntry(CDM_MAP_SER_FILE_PATH); + URL modelMapFileURL = FileLocator.resolve(modelMapFileBundleURL); + String modelMapFilePath = modelMapFileURL.getFile(); + + FileInputStream fin = new FileInputStream(modelMapFilePath); + ObjectInputStream ois = new ObjectInputStream(fin); + Map modelClassMap = (Map) ois.readObject(); + ois.close(); + return modelClassMap; + } + + + public Map generateModelClassMap() { + + Configuration configuration = buildConfiguration(HB_CONFIG_FILE_PATH); + Iterator classMappingIterator = configuration.getClassMappings(); + + Map modelClassMap = new HashMap(); + + while(classMappingIterator.hasNext()) { + PersistentClass persistentClass = classMappingIterator.next(); + Class mappedClass = persistentClass.getMappedClass(); + String mappedClassName = mappedClass.getName(); + + CdmModelFieldPropertyFromClass cmgmfc = new CdmModelFieldPropertyFromClass(mappedClassName); + System.out.println("Adding class : " + mappedClassName + " to cache"); + addGetters(persistentClass, cmgmfc); + modelClassMap.put(mappedClassName, cmgmfc); + } + return modelClassMap; + } + + + public static Configuration buildConfiguration(String hibernateConfigFilePath) { + Configuration configuration = new Configuration().configure(hibernateConfigFilePath); + configuration.buildMappings(); + return configuration; + } + + private void addGetters(PersistentClass persistentClass, CdmModelFieldPropertyFromClass cmgmfc) { + if (persistentClass != null) { + Iterator propertyIt = persistentClass.getPropertyIterator(); + + while(propertyIt.hasNext()) + { + Property property = (Property)propertyIt.next(); + Getter getter = property.getGetter(persistentClass.getMappedClass()); + if(getter != null && getter.getMember() != null) { + Field field = (Field)getter.getMember(); + + //logger.info(" - contains field '" + field.getName() + "' of type '" + field.getType().getName() + "'"); + cmgmfc.addGetMethods(field.getName()); + } + } + addGetters(persistentClass.getSuperclass(), cmgmfc); + } + } + + + + public static void main(String argv[]) { + + // To re-create the serialised cdm map run, + // mvn exec:java -Dexec.mainClass="eu.etaxonomy.taxeditor.remoting.cache.CdmModelCacher" + // in the eu.etaxonomy.taxeditor.cdmlib project root dir + String CDM_MAP_SER_DIR = "resources/"; + + CdmModelCacher cdmModelCacher = new CdmModelCacher(); + Map modelClassMap = cdmModelCacher.generateModelClassMap(); + try{ + + FileOutputStream fout = new FileOutputStream(CDM_MAP_SER_DIR + "cdm.map.ser"); + ObjectOutputStream oos = new ObjectOutputStream(fout); + oos.writeObject(modelClassMap); + oos.close(); + System.out.println("CDM Map serialized"); + + }catch(Exception ex){ + ex.printStackTrace(); + } + + } + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelFieldPropertyFromClass.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelFieldPropertyFromClass.java new file mode 100644 index 000000000..e90ec6d3c --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelFieldPropertyFromClass.java @@ -0,0 +1,51 @@ +package eu.etaxonomy.taxeditor.remoting.cache; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class CdmModelFieldPropertyFromClass implements Serializable { + + private static final long serialVersionUID = 5726395976531887526L; + private String className; + private String parentClassName; + + private List fields = new ArrayList(); + + + public CdmModelFieldPropertyFromClass(String className) { + this.setClassName(className); + } + + public String getParentClassName() { + return parentClassName; + } + + public void setParentClassName(String parentClassName) { + this.parentClassName = parentClassName; + } + + public List getFields() { + return fields; + } + + public void setFields(List fields) { + this.fields = fields; + } + + public void addGetMethods(String getMethod) { + this.fields.add(getMethod); + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java new file mode 100644 index 000000000..a2c4d1c66 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java @@ -0,0 +1,94 @@ +package eu.etaxonomy.taxeditor.remoting.cache; + +import java.io.IOException; +import java.net.URISyntaxException; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheException; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.config.CacheConfiguration; +import net.sf.ehcache.config.SizeOfPolicyConfiguration; + +import org.apache.log4j.Logger; + + +public class CdmRemoteCacheManager { + + private static final Logger logger = Logger.getLogger(CdmRemoteCacheManager.class); + + + private Cache cdmlibModelCache; + + private static CdmRemoteCacheManager cdmRemoteCacheManager = null; + + public static final String CDM_MODEL_CACHE_NAME = "cdmModelGetMethodsCache"; + + private static Thread initThread; + + private static boolean cacheInitialised = false; + + public enum CdmCacheManagerType { + CDMLIB_MODEL, + DEFAULT + } + + public static CdmRemoteCacheManager getInstance(){ + + if(cdmRemoteCacheManager == null) { + cdmRemoteCacheManager = new CdmRemoteCacheManager(); + } + return cdmRemoteCacheManager; + } + private CdmRemoteCacheManager() { + + + try { + // NOTE:Programmatically creating the cache manager may solve the problem of + // recreating data written to disk on startup + // see https://stackoverflow.com/questions/1729605/ehcache-persist-to-disk-issues + //String cacheFilePath = CDMLIB_CACHE_MANAGER_CONFIG_RESOURCE.getFile().getAbsolutePath(); + //InputStream in = this.getClass().getClassLoader().getResourceAsStream("cdmlib-ehcache.xml"); + + SizeOfPolicyConfiguration sizeOfConfig = new SizeOfPolicyConfiguration(); + sizeOfConfig.setMaxDepth(1000); + sizeOfConfig.setMaxDepthExceededBehavior("abort"); + + CacheConfiguration modelcc = new CacheConfiguration(CDM_MODEL_CACHE_NAME, 0) + .eternal(true) + .statistics(true) + .sizeOfPolicy(sizeOfConfig) + .overflowToOffHeap(false); + + cdmlibModelCache = new Cache(modelcc); + + CacheManager.create().addCache(cdmlibModelCache); + CdmModelCacher cmdmc = new CdmModelCacher(); + cmdmc.cacheGetterFields(cdmlibModelCache); + + } catch (CacheException e) { + throw new CdmClientCacheException(e); + } catch (ClassNotFoundException e) { + throw new CdmClientCacheException(e); + } catch (IOException e) { + throw new CdmClientCacheException(e); + } catch (URISyntaxException e) { + throw new CdmClientCacheException(e); + } + + } + + + public Cache getCdmModelGetMethodsCache(){ + return cdmlibModelCache; + } + + public static void removeEntityCaches() { + CacheManager cm = CacheManager.create(); + String[] cacheNames = CacheManager.create().getCacheNames(); + for(String cacheName : cacheNames) { + if(!cacheName.equals(CDM_MODEL_CACHE_NAME)) { + cm.removeCache(cacheName); + } + } + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java new file mode 100644 index 000000000..f1909f0e7 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java @@ -0,0 +1,330 @@ +// $Id$ +/** + * Copyright (C) 2014 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.remoting.cache; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Element; +import net.sf.ehcache.Status; +import net.sf.ehcache.config.CacheConfiguration; +import net.sf.ehcache.config.SizeOfPolicyConfiguration; +import net.sf.ehcache.statistics.LiveCacheStatistics; + +import org.apache.log4j.Logger; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier; +import eu.etaxonomy.cdm.model.ICdmCacher; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; + +/** + * + * This cache guarantees that + * - all objects put will be ancestors of CdmBase + * - all CdmBase objects in the cache will be already de-proxied + * - after any CdmBase object is put in the cache, + * all non-null / non-proxy CdmBase objects in the sub-graph + * will also be present in the cache. + * + * @author cmathew + * @date 14 Oct 2014 + * + */ + +public class CdmTransientEntityCacher implements ICdmCacher { + + private static final Logger logger = Logger.getLogger(CdmTransientEntityCacher.class); + + + private final ICdmEntitySessionManager cdmEntitySessionManager; + + private static CdmServiceCacher cdmServiceCacher; + + private final String cacheId; + + private final Cache cache; + + private final CacheLoader cacheLoader; + + private final Map newEntitiesMap = new HashMap(); + + public CdmTransientEntityCacher(String cacheId, ICdmEntitySessionManager cdmEntitySessionManager) { + this.cacheId = cacheId; + + cache = new Cache(getEntityCacheConfiguration(cacheId)); + + CacheManager.create().removeCache(cache.getName()); + CacheManager.create().addCache(cache); + + this.cdmEntitySessionManager = cdmEntitySessionManager; + + cacheLoader = new CacheLoader(this); + + } + + public CdmTransientEntityCacher(Object sessionOwner, ICdmEntitySessionManager cdmEntitySessionManager) { + this(generateCacheId(sessionOwner), cdmEntitySessionManager); + } + + public static String generateCacheId(Object sessionOwner) { + return sessionOwner.getClass().getName() + String.valueOf(sessionOwner.hashCode()); + } + + /** + * Returns the default cache configuration. + * + * @return + */ + private CacheConfiguration getEntityCacheConfiguration(String cacheId) { + SizeOfPolicyConfiguration sizeOfConfig = new SizeOfPolicyConfiguration(); + sizeOfConfig.setMaxDepth(100); + sizeOfConfig.setMaxDepthExceededBehavior("abort"); + + return new CacheConfiguration(cacheId, 0) + .eternal(true) + .statistics(true) + .sizeOfPolicy(sizeOfConfig) + .overflowToOffHeap(false); + + } + + public static void setDefaultCacher(CdmServiceCacher css) { + cdmServiceCacher = css; + } + + public LiveCacheStatistics getCacheStatistics() { + if(cache.getStatus() == Status.STATUS_ALIVE) { + return cache.getLiveCacheStatistics(); + } + return null; + + } + + /** + * Returns the cache corresponding to the cache id + * + * @param cacheId + * @return + */ + private Cache getCache() { + return CacheManager.create().getCache(cacheId); + } + + public T load(T obj, boolean update) { + return cacheLoader.load(obj, true, update); + } + + public Map load(Map map, boolean update){ + return cacheLoader.load(map, true, update); + } + + public Collection load(Collection collection, boolean update){ + return cacheLoader.load(collection, true, update); + } + + public CdmBase load(CdmBase cdmEntity, boolean update) { + return cacheLoader.load(cdmEntity, true, update); + } + + + private CdmBase load(CdmEntityIdentifier cei, boolean update) { + return CdmApplicationState.getCommonService().findWithUpdate(cei.getCdmClass(), cei.getId()); + } + + + public UpdateResult load(UpdateResult result, boolean update) { + // probably a good time to broadcast to other sessions + + Set updatedObjects = result.getUpdatedObjects(); + Set reloadedObjects = new HashSet(); + Set updatedCdmIds = result.getUpdatedCdmIds(); + boolean updatedCdmIdsIsEmpty = updatedCdmIds.isEmpty(); + + // if the cdm identifier set contains identifiers of objects already + // present in the updated objects set reomve them + for(CdmBase updatedObject : updatedObjects) { + if(updatedObject != null && exists(new CdmEntityCacheKey(updatedObject.getClass(), updatedObject.getId()))) { + CdmEntityIdentifier cdmEntityIdentifier = new CdmEntityIdentifier(updatedObject.getId(), updatedObject.getClass()); + if(!updatedCdmIdsIsEmpty && updatedCdmIds.contains(cdmEntityIdentifier)) { + updatedCdmIds.remove(cdmEntityIdentifier); + } + reloadedObjects.add(cacheLoader.load(updatedObject, true, update)); + } + } + + // remote load cdm identifiers of objects which already exist + // in the cache + + for(CdmEntityIdentifier cei : updatedCdmIds) { + if(exists(new CdmEntityCacheKey(cei.getCdmClass(), cei.getId()))) { + reloadedObjects.add(load(cei, update)); + } + + } + updatedObjects.clear(); + result.addUpdatedObjects(reloadedObjects); + return result; + } + + public MergeResult load(MergeResult mergeResult, boolean update) { + return cacheLoader.load(mergeResult, true, update); + } + + public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) { + return cacheLoader.getFromCdmlibModelCache(className); + } + + + public void addNewEntity(CdmBase newEntity) { + if(newEntity != null && newEntity.getId() == 0 && newEntity.getUuid() != null) { + newEntitiesMap.put(newEntity.getUuid(), newEntity); + } + } + + @Override + public void put(CdmBase cdmEntity) { + + CdmBase cachedCdmEntity = cdmServiceCacher.load(cdmEntity); + if(cachedCdmEntity != null) { + logger.info("Cdm Entity with id : " + cdmEntity.getId() + " already exists in permanent cache. Ignoring put."); + return; + } + CdmEntityCacheKey id = new CdmEntityCacheKey(cdmEntity); + + cachedCdmEntity = getFromCache(id); + if(cachedCdmEntity == null) { + CdmBase cdmEntityToCache = cdmEntity; + CdmBase newEntity = newEntitiesMap.get(cdmEntity.getUuid()); + if(newEntity != null) { + newEntity.setId(cdmEntity.getId()); + cdmEntityToCache = newEntity; + } + getCache().put(new Element(id, cdmEntityToCache)); + cdmEntityToCache.initListener(); + newEntitiesMap.remove(cdmEntity.getUuid()); + logger.info(" - object of type " + cdmEntityToCache.getClass().getName() + " with id " + cdmEntityToCache.getId() + " put in cache"); + return; + } + logger.info(" - object of type " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId() + " already exists"); + } + + + private Element getCacheElement(CdmEntityCacheKey key) { + return getCache().get(key); + } + + + public CdmBase getFromCache(CdmEntityCacheKey id) { + Element e = getCacheElement(id); + + if (e == null) { + return null; + } else { + return (CdmBase) e.getObjectValue(); + } + } + + public CdmBase getFromCache(Class clazz, int id) { + CdmEntityCacheKey cacheId = generateKey(clazz,id); + return getFromCache(cacheId); + } + + @Override + public CdmBase getFromCache(CdmBase cdmBase) { + + CdmEntityCacheKey cacheId = generateKey((CdmBase)ProxyUtils.deproxy(cdmBase)); + // first try this cache + CdmBase cachedCdmEntity = getFromCache(cacheId); + + if(cachedCdmEntity == null) { + // ... then try the permanent cache + cachedCdmEntity = cdmServiceCacher.getFromCache(cdmBase.getUuid()); + } + + return cachedCdmEntity; + } + + public CdmBase getFromCache(CdmBase cdmBase, Class clazz) { + + cdmBase = CdmBase.deproxy(cdmBase, clazz); + return getFromCache(cdmBase); + } + + public List getAllEntities() { + List entities = new ArrayList(); + Map elementsMap = getCache().getAllWithLoader(getCache().getKeys(), null); + for (Map.Entry entry : elementsMap.entrySet()) { + entities.add(entry.getValue()); + } + return entities; + } + + public boolean exists(CdmEntityCacheKey key) { + return (getCacheElement(key) != null); + } + + public boolean existsAndIsNotNull(CdmEntityCacheKey id) { + return getFromCache(id) != null; + } + + public void clear() { + cache.removeAll(); + } + + public void dispose() { + CacheManager.create().removeCache(cache.getName()); + cache.dispose(); + newEntitiesMap.clear(); + + } + + + public static CdmEntityCacheKey generateKey(Class clazz, int id) { + return new CdmEntityCacheKey(clazz, id); + } + + + public static CdmEntityCacheKey generateKey(CdmBase cdmBase) { + Class entityClass = cdmBase.getClass(); + int id = cdmBase.getId(); + return new CdmEntityCacheKey(entityClass, id); + } + + @Override + public CdmBase load(CdmBase cdmEntity) { + return load(cdmEntity, true); + } + + @Override + public boolean isCachable(CdmBase cdmEntity) { + return true; + } + + @Override + public boolean exists(CdmBase cdmBase) { + return exists(generateKey(cdmBase)); + } + + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java new file mode 100644 index 000000000..731952916 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java @@ -0,0 +1,539 @@ +// $Id$ +/** + * Copyright (C) 2015 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.remoting.cache; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import net.sf.ehcache.Cache; +import net.sf.ehcache.CacheManager; +import net.sf.ehcache.Element; + +import org.apache.log4j.Logger; +import org.hibernate.collection.spi.PersistentCollection; +import org.hibernate.proxy.HibernateProxy; +import org.hibernate.proxy.LazyInitializer; +import org.springframework.util.ReflectionUtils; + +import eu.etaxonomy.cdm.api.cache.CdmCacher; +import eu.etaxonomy.cdm.model.common.CdmBase; + +/** + * @author cmathew + * @date 9 Feb 2015 + * + */ +public class EntityCacherDebugResult { + + private static final Logger logger = Logger.getLogger(EntityCacherDebugResult.class); + + private Map duplicateCdmEntityMap; + + private List notInCacheList; + + private CdmTransientEntityCacher cacher; + + private List rootElements; + + StringBuilder debugOutput = new StringBuilder(); + + public EntityCacherDebugResult() { + } + + + public EntityCacherDebugResult(CdmTransientEntityCacher cacher, Collection rootEntities) { + this.cacher = cacher; + init(); + + if(rootEntities != null && !rootEntities.isEmpty()) { + for(CdmBase rootEntity : rootEntities) { + debug(rootEntity, true); + String out = toString(duplicateCdmEntityMap, notInCacheList, rootEntity); + System.out.println(out); + debugOutput.append(out); + clear(); + } + + } + } + + private void init() { + duplicateCdmEntityMap = new HashMap(); + notInCacheList = new ArrayList(); + rootElements = new ArrayList(); + } + + private void clear() { + duplicateCdmEntityMap.clear(); + notInCacheList.clear(); + } + + public void addDuplicateEntity(CdmEntityInfo cei, CdmEntityInfo cachedCei) { + duplicateCdmEntityMap.put(cei, cachedCei); + } + + public void addEntityNotInCache(CdmEntityInfo cei) { + notInCacheList.add(cei); + } + + public List getRootElements() { + return rootElements; + } + + private void print(Map duplicateCdmEntityMap, + List notInCacheList, + CdmBase rootEntity) { + System.out.println(toString(duplicateCdmEntityMap, notInCacheList, rootEntity)); + } + + + @Override + public String toString() { + return debugOutput.toString(); + } + + private String toString(Map duplicateCdmEntityMap, + List notInCacheList, + CdmBase rootEntity) { + + + StringBuilder sb = new StringBuilder(); + sb.append(System.getProperty("line.separator")); + sb.append("<<< Root Entity " + rootEntity.getUserFriendlyTypeName() + " with id " + rootEntity.getId() + " >>>"); + sb.append(System.getProperty("line.separator")); + if(duplicateCdmEntityMap.isEmpty()) { + sb.append("No Duplicate CDM Entities."); + } else { + sb.append("Duplicate CDM Entities,"); + + for (Map.Entry entry : duplicateCdmEntityMap.entrySet()) + { + sb.append(System.getProperty("line.separator")); + CdmEntityInfo cei = entry.getKey(); + CdmBase cb = (CdmBase) cei.getObject(); + + sb.append(" - " + cei.getField().getName() + ":" + cb.getUserFriendlyTypeName() + "/" + cb.getId()); + if(cei.getParent() != null) { + Object cbParent = cei.getParent().getObject(); + sb.append(" in entity " + cbParent.getClass().getCanonicalName()); + if(cbParent instanceof CdmBase) { + + sb.append(" with id : " + ((CdmBase)cbParent).getId()); + } + } + sb.append(System.getProperty("line.separator")); + sb.append(" -- entity belongs to cache(s) : " + getCachesContainingEntity(cb)); + sb.append(System.getProperty("line.separator")); + + + CdmEntityInfo dupCei = entry.getValue(); + CdmBase dupCb = (CdmBase) dupCei.getObject(); + + String dupCeiFieldName = ""; + if(dupCei.getField() != null) { + dupCeiFieldName = dupCei.getField().getName(); + } + sb.append(" - " + dupCeiFieldName + ":" + dupCb.getUserFriendlyTypeName() + "/" + dupCb.getId()); + if(dupCei.getParent() != null) { + Object dupCbParent = dupCei.getParent().getObject(); + sb.append(" in entity " + dupCbParent.getClass().getCanonicalName()); + if(dupCbParent instanceof CdmBase) { + sb.append(" with id : " + ((CdmBase)dupCbParent).getId()); + } + } + sb.append(System.getProperty("line.separator")); + sb.append(" -- entity belongs to cache(s) : " + getCachesContainingEntity(dupCb)); + sb.append(System.getProperty("line.separator")); + sb.append("-----------"); + } + } + + sb.append(System.getProperty("line.separator")); + sb.append(System.getProperty("line.separator")); + + if(notInCacheList.isEmpty()) { + sb.append("No Entities found which are not in Cache."); + } else { + sb.append("Not In Cache Entities,"); + + for(CdmEntityInfo cei : notInCacheList) { + CdmBase cb = (CdmBase) cei.getObject(); + Object cbParent = cei.getParent().getObject(); + + sb.append(System.getProperty("line.separator")); + + String fieldName = ""; + if(cei.getField() != null) { + fieldName = cei.getField().getName(); + } + sb.append(" - " + fieldName + ":" + cb.getUserFriendlyTypeName() + "/" + cb.getId()); + + if(cbParent instanceof CdmBase) { + sb.append(" of entity " + ((CdmBase)cbParent).getUserFriendlyTypeName()); + } else { + sb.append(" of entity " + cbParent.getClass().getName()); + } + } + } + sb.append(System.getProperty("line.separator")); + return sb.toString(); + } + + private String getCachesContainingEntity(CdmBase cdmEntity) { + Cache defaultCache = CacheManager.create().getCache(CdmCacher.DEFAULT_CACHE_NAME); + String caches = ""; + Element dce = defaultCache.get(cdmEntity.getUuid()); + if(dce != null && dce.getObjectValue() == cdmEntity) { + caches = "{DC}"; + } + + Object cte = cacher.getFromCache(CdmTransientEntityCacher.generateKey(cdmEntity)); + if(cte != null && cte == cdmEntity) { + caches += "{TC}"; + } + return caches; + } + + + private void debug(CdmBase cdmEntity, boolean recursive) { + if(cdmEntity == null) { + return; + } + logger.info("---- starting recursive debug for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId()); + List alreadyVisitedEntities = new ArrayList(); + CdmEntityInfo cei = new CdmEntityInfo(ProxyUtils.deproxy(cdmEntity)); + debugRecursive(cdmEntity, alreadyVisitedEntities, cei); + rootElements.add(cei); + alreadyVisitedEntities.clear(); + logger.info("---- ending recursive debug for cdm entity " + cdmEntity.getClass().getName() + " with id " + cdmEntity.getId() + "\n"); + } + + private void debugRecursive(T obj, + List alreadyVisitedEntities, + CdmEntityInfo cei) { + if(obj == null) { + return; + } + if(obj instanceof CdmBase) { + debugRecursive((CdmBase)obj, alreadyVisitedEntities, cei); + } else if (obj instanceof Map) { + debug((Map)obj, alreadyVisitedEntities, cei); + } else if (obj instanceof Collection) { + debug((Collection)obj, alreadyVisitedEntities, cei); + } + + logger.info("No caching yet for type " + obj.getClass().getName()); + + + } + + private void debug(Map map, + List alreadyVisitedEntities, + CdmEntityInfo cei) { + if(map == null || map.isEmpty()) { + return; + } + + int originalMapSize = map.size(); + + Iterator> iter = map.entrySet().iterator(); + int i=0; + while ( iter.hasNext() ) { + Map.Entry e = iter.next(); + CdmEntityInfo childCei = new CdmEntityInfo(e); + cei.addChild(childCei); + + CdmEntityInfo keyCei = new CdmEntityInfo(ProxyUtils.deproxy(e.getKey())); + childCei.addChild(keyCei); + CdmEntityInfo valueCei = new CdmEntityInfo(ProxyUtils.deproxy(e.getValue())); + childCei.addChild(valueCei); + + debugRecursive(e.getKey(), alreadyVisitedEntities, keyCei); + debugRecursive(e.getValue(), alreadyVisitedEntities, valueCei); + } + } + + private void debug(Collection collection, + List alreadyVisitedEntities, + CdmEntityInfo cei) { + int length = collection.size(); + Object[] result = new Object[length]; + Iterator collectionItr = collection.iterator(); + + while(collectionItr.hasNext()) { + Object obj = collectionItr.next(); + CdmEntityInfo childCei = new CdmEntityInfo(ProxyUtils.deproxy(obj)); + cei.addChild(childCei); + debugRecursive(obj, alreadyVisitedEntities, childCei); + + } + + } + + private void debugRecursive(CdmBase cdmEntity, + List alreadyVisitedEntities, + CdmEntityInfo cei) { + + CdmBase cachedCdmEntityInSubGraph = null; + + if(cei.getObject() instanceof CdmBase) { + CdmBase cb = (CdmBase)cei.getObject(); + cachedCdmEntityInSubGraph = cacher.getFromCache(cb); + if(cachedCdmEntityInSubGraph != cb) { + // found a cdm entity which is not in cache - need to record this + //logger.info(" - found entity not in cache " + fieldName + "' in object of type " + clazz.getName() + " with id " + cdmEntity.getId()); + addEntityNotInCache(cei); + } + } + + + // we want to recursive through the cdmEntity (and not the cachedCdmEntity) + // since there could be new or deleted objects in the cdmEntity sub-graph + + // start by getting the fields from the cdm entity + String className = cdmEntity.getClass().getName(); + CdmModelFieldPropertyFromClass cmgmfc = cacher.getFromCdmlibModelCache(className); + if(cmgmfc != null) { + alreadyVisitedEntities.add(cei); + List fields = cmgmfc.getFields(); + for(String field : fields) { + // retrieve the actual object corresponding to the field. + // this object will be either a CdmBase or a Collection / Map + // with CdmBase as the generic type + String f = field; + CdmEntityInfo childCei = getDebugCdmBaseTypeFieldValue(cdmEntity, field, alreadyVisitedEntities, cei); + if(!childCei.isProxy()) { + Object object = childCei.getObject(); + if(object != null && object instanceof CdmBase) { + CdmBase cdmEntityInSubGraph = (CdmBase)object; + if(!containsIdenticalCdmEntity(alreadyVisitedEntities, cdmEntityInSubGraph)) { + logger.info("recursive debugging object of type " + cdmEntityInSubGraph.getClass().getName() + " with id " + cdmEntityInSubGraph.getId()); + debugRecursive(cdmEntityInSubGraph, alreadyVisitedEntities, childCei); + } else { + logger.info("object of type " + cdmEntityInSubGraph.getClass().getName() + " with id " + cdmEntityInSubGraph.getId() + " already visited"); + } + } + } + } + } else { + throw new CdmClientCacheException("CdmEntity with class " + cdmEntity.getClass().getName() + " is not found in the cdmlib model cache. " + + "The cache may be corrupted or not in sync with the latest model version" ); + } + + } + + + private CdmEntityInfo getDebugCdmBaseTypeFieldValue(CdmBase cdmEntity, + String fieldName, + List alreadyVisitedEntities, + CdmEntityInfo cei) { + + CdmEntityInfo childCei = null; + Class clazz = cdmEntity.getClass(); + try { + // this call will search in the provided class as well as + // the super classes until it finds the field + Field field = ReflectionUtils.findField(clazz, fieldName); + + if(field == null) { + throw new CdmClientCacheException("Field '" + fieldName + + "' not found when searching in class '" + clazz.getName() + "' and its supercalsses"); + } + field.setAccessible(true); + Object o = field.get(cdmEntity); + o = ProxyUtils.deproxy(o); + CdmBase cdmEntityInSubGraph = null; + + boolean isHibernateProxy = false; + boolean isPersistentCollection = false; + + childCei = new CdmEntityInfo(o); + cei.addChild(childCei); + childCei.setField(field); + + if(o != null) { + boolean isProxy = ProxyUtils.isProxy(o); + + childCei.setProxy(isProxy); + if(!isProxy) { + childCei.setObject(o); + if(CdmBase.class.isAssignableFrom(o.getClass())) { + logger.info("found initialised cdm entity '" + fieldName + "' in object of type " + clazz.getName() + " with id " + cdmEntity.getId()); + cdmEntityInSubGraph = (CdmBase)o; + + //logger.info(" - found duplicate entity at " + fieldName + "' in object of type " + clazz.getName() + " with id " + cdmEntity.getId()); + CdmEntityInfo dupCei = getDuplicate(alreadyVisitedEntities, cdmEntityInSubGraph); + if(dupCei != null) { + addDuplicateEntity(childCei, dupCei); + } + + } else if(o instanceof Map) { + debugRecursive((Map)o, alreadyVisitedEntities, childCei); + } else if(o instanceof Collection) { + debugRecursive((Collection)o, alreadyVisitedEntities, childCei); + } + + } + } + // we return the original cdm entity in the sub graph because we + // want to continue to recurse on the input cdm entity graph + // and not the one in the cache + + return childCei; + } catch (SecurityException e) { + throw new CdmClientCacheException(e); + } catch (IllegalArgumentException e) { + throw new CdmClientCacheException(e); + } catch (IllegalAccessException e) { + throw new CdmClientCacheException(e); + } + } + + + private CdmEntityInfo getDuplicate(List alreadyVisitedEntities, Object objectToCompare) { + if(objectToCompare != null ) { + for(CdmEntityInfo cei: alreadyVisitedEntities) { + if(objectToCompare.equals(cei.getObject()) && objectToCompare != cei.getObject()) { + return cei; + } + } + } + return null; + } + + private boolean containsIdenticalCdmEntity(List ceiSet, Object objectToCompare) { + boolean foundIdentical = false; + if(objectToCompare != null) { + for(CdmEntityInfo cei : ceiSet) { + if(cei.getObject() == objectToCompare) { + foundIdentical = true; + } else if(objectToCompare.equals(cei.getObject())) { + return false; + } + } + } + return foundIdentical; + } + + public class CdmEntityInfo { + + private Object object; + private CdmEntityInfo parent; + private List children; + private Field field; + private String label; + private boolean isProxy; + + public CdmEntityInfo(Object object) { + this.object = object; + isProxy = false; + children = new ArrayList(); + } + + public CdmEntityInfo getParent() { + return parent; + } + + public void setParent(CdmEntityInfo parent) { + this.parent = parent; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public void addChild(CdmEntityInfo cei) { + this.children.add(cei); + cei.setParent(this); + } + + public Field getField() { + return field; + } + + public void setField(Field field) { + this.field = field; + } + + + public String getLabel() { + String label; + String fieldName = ""; + if(field != null) { + fieldName = field.getName(); + } + + if(object != null) { + String className = object.getClass().getName(); + if(object instanceof HibernateProxy) { + LazyInitializer hli = ((HibernateProxy)object).getHibernateLazyInitializer(); + if(hli.isUninitialized()) { + className = "HibernateProxy"; + } else { + className = "InitialisedHibernateProxy"; + } + label = "[" + className + "] " + fieldName; + } else if(object instanceof PersistentCollection) { + PersistentCollection pc = ((PersistentCollection)object); + if(!pc.wasInitialized()) { + className = "PersistentCollection"; + } else { + className = "InitialisedPersistentCollection"; + } + label = "[" + className + "] " + fieldName; + } else if(object instanceof Collection) { + label = "[" + className + "] " + fieldName + " : " + String.valueOf(((Collection)object).size()); + } else if(object instanceof Map) { + label = "[" + className + "] " + fieldName + " : " + String.valueOf(((Map)object).size()); + } else if(object instanceof CdmBase) { + label = getCachesContainingEntity((CdmBase)object) + "[" + className + ",id" + ((CdmBase)object).getId() + "] " + fieldName + " : " + object.toString(); + } else { + label = "[" + className + "] " + fieldName + " : " + object.toString(); + } + } else { + label = "[NULL] " + fieldName; + } + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public Object getObject() { + return object; + } + + public void setObject(Object object) { + this.object = object; + } + + public boolean isProxy() { + return isProxy; + } + + public void setProxy(boolean isProxy) { + this.isProxy = isProxy; + } + + + + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java new file mode 100644 index 000000000..ceca3e97e --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java @@ -0,0 +1,221 @@ +// $Id$ +/** +* Copyright (C) 2015 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.remoting.cache; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.UUID; + +import org.hibernate.collection.internal.PersistentBag; +import org.hibernate.collection.internal.PersistentList; +import org.hibernate.collection.internal.PersistentMap; +import org.hibernate.collection.internal.PersistentSet; +import org.hibernate.collection.internal.PersistentSortedMap; +import org.hibernate.collection.internal.PersistentSortedSet; +import org.hibernate.collection.spi.PersistentCollection; +import org.hibernate.proxy.HibernateProxy; +import org.hibernate.proxy.LazyInitializer; +import org.springframework.util.ReflectionUtils; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.PersistentMultiLanguageText; +import eu.etaxonomy.taxeditor.remoting.CdmRemotingException; + +/** + * @author cmathew + * @date 17 Feb 2015 + * + */ +public class ProxyUtils { + + + + public static enum CollectionType { + SET, + LIST, + MAP; + + @Override + public String toString() { + return this.name().toLowerCase(); + } + } + + public static Object getCollectionType(Object obj) { + if(obj != null) { + if(obj instanceof List) { + return CollectionType.LIST; + } + if(obj instanceof Set) { + return CollectionType.SET; + } + if(obj instanceof Map) { + return CollectionType.MAP; + } + throw new CdmRemotingException("Cannot get Collection Type for " + obj.getClass().getName()); + } + return null; + } + + public static Object getObject(PersistentCollection pc) { + if(pc != null) { + if(pc instanceof PersistentSet) { + return new HashSet((Set)pc); + } + if(pc instanceof PersistentSortedSet) { + return new TreeSet((Set)pc); + } + if(pc instanceof PersistentList || pc instanceof PersistentBag) { + return new ArrayList((List)pc); + } + if(pc instanceof PersistentMap || pc instanceof PersistentMultiLanguageText) { + return new HashMap((Map)pc); + } + if(pc instanceof PersistentSortedMap) { + return new TreeMap((Map)pc); + } + throw new CdmRemotingException("Cannot get Collection field for type " + pc.getClass().getName()); + } + return null; + } + + public static CollectionField getCollectionField(PersistentCollection pc) { + if(pc != null) { + if(pc instanceof PersistentSet) { + return new CollectionField(new HashSet((Set)pc), CollectionType.SET); + } + if(pc instanceof PersistentSortedSet) { + return new CollectionField(new TreeSet((Set)pc), CollectionType.SET); + } + if(pc instanceof PersistentList) { + return new CollectionField(new ArrayList((List)pc), CollectionType.LIST); + } + if(pc instanceof PersistentMap || pc instanceof PersistentMultiLanguageText) { + return new CollectionField(new HashMap((Map)pc), CollectionType.MAP); + } + if(pc instanceof PersistentSortedMap) { + return new CollectionField(new TreeMap((Map)pc), CollectionType.MAP); + } + throw new CdmRemotingException("Cannot get Collection field for type " + pc.getClass().getName()); + } + return null; + } + + public static class CollectionField { + private final Object col; + private final CollectionType type; + public CollectionField(Object col, CollectionType type) { + this.col = col; + this.type = type; + } + + public Object getCollection() { + return this.col; + } + + public CollectionType getType() { + return this.type; + } + } + + + public static Object deproxy(Object o) { + if(o != null && o instanceof HibernateProxy) { + LazyInitializer hli = ((HibernateProxy)o).getHibernateLazyInitializer(); + if(!hli.isUninitialized()) { + return hli.getImplementation(); + + } + } + + if(o != null && o instanceof PersistentCollection) { + PersistentCollection pc = ((PersistentCollection)o); + if(pc.wasInitialized()) { + return ProxyUtils.getObject(pc); + + } + } + return o; + } + + public static boolean isProxy(Object o) { + if(o != null && o instanceof HibernateProxy) { + LazyInitializer hli = ((HibernateProxy)o).getHibernateLazyInitializer(); + if(hli.isUninitialized()) { + return true; + } + } + + if(o != null && o instanceof PersistentCollection) { + PersistentCollection pc = ((PersistentCollection)o); + if(!pc.wasInitialized()) { + return true; + } + } + + return false; + } + + public static Object remoteLoadPersistentCollectionIfProxy(Object o, UUID ownerUuid, String fieldName) throws ClassNotFoundException { + if(o != null && o instanceof HibernateProxy) { + LazyInitializer hli = ((HibernateProxy)o).getHibernateLazyInitializer(); + if(hli.isUninitialized()) { + return CdmApplicationState.getCachedCommonService().find((Class)Class.forName(hli.getEntityName()), + ((Integer)hli.getIdentifier()).intValue()); + } + } + + if(o != null && o instanceof PersistentCollection) { + PersistentCollection pc = ((PersistentCollection)o); + if(!pc.wasInitialized()) { + return CdmApplicationState.getCachedCommonService().initializeCollection(ownerUuid, fieldName); + } + } + + return o; + } + + + + + public static void setRoleValueInOwner(Object owner, String role, Object value) { + if(role == null || role.isEmpty()) { + throw new CdmRemotingException("Role cannot be null or an empty string"); + } + + String fieldName = role.substring(role.lastIndexOf(".") + 1); + + Field field = ReflectionUtils.findField(owner.getClass(), fieldName); + + if(field == null) { + throw new CdmRemotingException("Field '" + fieldName + + "' not found when searching in class '" + owner.getClass() + "' and its supercalsses"); + } + + field.setAccessible(true); + + try { + field.set(owner, value); + } catch (IllegalArgumentException e) { + throw new CdmRemotingException(e); + } catch (IllegalAccessException e) { + throw new CdmRemotingException(e); + } + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java new file mode 100644 index 000000000..33cd998ea --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java @@ -0,0 +1,31 @@ +// $Id$ +/** +* Copyright (C) 2014 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.remoting.server; + +/** + * @author cmathew + * @date 23 Sep 2014 + * + */ +public class CDMServerException extends Exception { + + public CDMServerException(String message) { + super(message); + } + + public CDMServerException(Exception e) { + super(e); + } + + public CDMServerException(String message,Exception e) { + super(message,e); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerUtils.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerUtils.java new file mode 100644 index 000000000..976d2a58b --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerUtils.java @@ -0,0 +1,79 @@ +// $Id$ +/** +* Copyright (C) 2015 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.remoting.server; + +import java.io.File; +import java.io.IOException; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringEscapeUtils; + +import eu.etaxonomy.cdm.api.application.CdmApplicationUtils; +import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties; +import eu.etaxonomy.cdm.database.CdmPersistentDataSource; + +/** + * @author cmathew + * @date 11 Nov 2015 + * + */ +public class CDMServerUtils { + + + public static String convertEditorToServerConfig() { + StringBuilder configStringBuilder = new StringBuilder(); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(""); + configStringBuilder.append(""); + configStringBuilder.append("" + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + + for(CdmPersistentDataSource dataSource : CdmPersistentDataSource.getAllDataSources()) { + String beanId = dataSource.getName(); + String user = dataSource.getUsername(); + String password = dataSource.getPassword(); + String driverClass = dataSource.getCdmSourceProperty(CdmSourceProperties.DRIVER_CLASS); + String jdbcUrl = StringEscapeUtils.escapeXml(dataSource.getCdmSourceProperty(CdmSourceProperties.URL)); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + configStringBuilder.append(" " + System.lineSeparator()); + + } + configStringBuilder.append("" + System.lineSeparator()); + + return configStringBuilder.toString(); + } + + public static File writeManagedServerConfig(String config, String fileName) throws IOException { + File managedConfigFile = new File(CdmApplicationUtils.getWritableResourceDir(), fileName); + if(managedConfigFile.exists()) { + managedConfigFile.delete(); + } + if(managedConfigFile.createNewFile()) { + FileUtils.writeStringToFile(managedConfigFile, config); + } + return managedConfigFile; + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java similarity index 88% rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java index a6cd14cd2..e40e3625f 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java @@ -1,13 +1,13 @@ /** * Copyright (C) 2014 EDIT -* European Distributed Institute of Taxonomy +* 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.cdm.remote; +package eu.etaxonomy.taxeditor.remoting.source; import static eu.etaxonomy.cdm.common.XmlHelp.getBeansRoot; import static eu.etaxonomy.cdm.common.XmlHelp.insertXmlBean; @@ -27,15 +27,8 @@ import eu.etaxonomy.cdm.common.CdmUtils; import eu.etaxonomy.cdm.common.XmlHelp; import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils; import eu.etaxonomy.cdm.config.CdmPersistentXMLSource; -import eu.etaxonomy.cdm.config.CdmSourceException; -import eu.etaxonomy.cdm.config.ICdmPersistentSource; import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties; -import eu.etaxonomy.cdm.database.CdmDataSource; -import eu.etaxonomy.cdm.database.CdmPersistentDataSource; -import eu.etaxonomy.cdm.database.DataSourceNotFoundException; -import eu.etaxonomy.cdm.database.DatabaseTypeEnum; -import eu.etaxonomy.cdm.database.ICdmDataSource; -import eu.etaxonomy.cdm.database.types.IDatabaseType; +import eu.etaxonomy.cdm.config.ICdmPersistentSource; import eu.etaxonomy.cdm.model.name.NomenclaturalCode; /** @@ -44,22 +37,22 @@ import eu.etaxonomy.cdm.model.name.NomenclaturalCode; */ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements ICdmPersistentSource{ private static final Logger logger = Logger.getLogger(CdmPersistentRemoteSource.class); - + public static final String REMOTESOURCE_BEAN_POSTFIX = "RemoteSource"; private String beanName; private Properties cdmSourceProperties; private List cdmSourceAttributes; - + /** * Creates a new instance of CdmPersistentRemoteSource - * + * * @param name * @param server * @param port * @param contextPath * @param nomenclaturalCode * @return - * @throws CdmRemoteSourceException + * @throws CdmRemoteSourceException */ public static CdmPersistentRemoteSource NewInstance(String remoteSource) throws CdmRemoteSourceException { if(exists(remoteSource)) { @@ -67,49 +60,48 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC } else { throw new CdmRemoteSourceException("Remote source '" + remoteSource + "' does not exist in sources setting file"); } - + } - + /**S * Creates a new CdmPersistentRemoteSource - * + * * @param name * @param server * @param port * @param contextPath * @param nomenclaturalCode - * @throws CdmRemoteSourceException + * @throws CdmRemoteSourceException */ - private CdmPersistentRemoteSource(String remoteSource) throws CdmRemoteSourceException { - + private CdmPersistentRemoteSource(String remoteSource) throws CdmRemoteSourceException { + CdmPersistentXMLSource cdmPersistentXMLSource = CdmPersistentXMLSource.NewInstance(remoteSource, REMOTESOURCE_BEAN_POSTFIX); if(cdmPersistentXMLSource.getElement() != null) { beanName = cdmPersistentXMLSource.getBeanName(); - // properties from the persistent xml file + // properties from the persistent xml file cdmSourceProperties = cdmPersistentXMLSource.getCdmSourceProperties(); cdmSourceAttributes = cdmPersistentXMLSource.getCdmSourceAttributes(); checkProperties(cdmSourceProperties); } else { throw new CdmRemoteSourceException("Remote source '" + remoteSource + "' does not exist in settings file"); - } - initDatabaseConnection(); + } } - + private static void checkProperties(Properties cdmSourceProperties) throws CdmRemoteSourceException { if(!cdmSourceProperties.containsKey(CdmSourceProperties.SERVER.toString())) { - throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); + throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); } String port = (String)cdmSourceProperties.get(CdmSourceProperties.PORT.toString()); if(port == null || port.isEmpty()) { - throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); - } + throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); + } if(!cdmSourceProperties.containsKey(CdmSourceProperties.CONTEXTPATH.toString())) { - throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); - } + throw new CdmRemoteSourceException("Could not initialise remote source. Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"); + } // default NomenclaturalCode is always ICNAFP - if(!cdmSourceProperties.containsKey(CdmSourceProperties.NOMENCLATURAL_CODE.toString())) { + if(!cdmSourceProperties.containsKey(CdmSourceProperties.NOMENCLATURAL_CODE.toString())) { cdmSourceProperties.put(CdmSourceProperties.NOMENCLATURAL_CODE.toString(), NomenclaturalCode.ICNAFP.name()); - } + } } /* (non-Javadoc) @@ -119,12 +111,12 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC public String getBeanName() { return beanName; } - + @Override public String getServer() { return cdmSourceProperties.getProperty(CdmSourceProperties.SERVER.toString()); } - + @Override public int getPort() { String port = CdmUtils.Nz(cdmSourceProperties.getProperty(CdmSourceProperties.PORT.toString())); @@ -135,17 +127,17 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC return Integer.valueOf(port); } } - + @Override public String getContextPath() { return cdmSourceProperties.getProperty(CdmSourceProperties.CONTEXTPATH.toString()); } - + @Override public NomenclaturalCode getNomenclaturalCode() { return NomenclaturalCode.fromString(cdmSourceProperties.getProperty(CdmSourceProperties.NOMENCLATURAL_CODE.toString())); } - + public static CdmPersistentRemoteSource save(String strRemoteSourceName, ICdmRemoteSource remoteSource) throws CdmRemoteSourceException { Properties cdmSourceProperties = new Properties(); cdmSourceProperties.put(CdmSourceProperties.SERVER.toString(), remoteSource.getServer()); @@ -155,7 +147,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC checkProperties(cdmSourceProperties); return save(strRemoteSourceName, cdmSourceProperties); } - + private static CdmPersistentRemoteSource save(String strRemoteSourceName,Properties cdmSourceProperties) throws CdmRemoteSourceException { //root @@ -180,19 +172,19 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC } //save - saveToXml(root.getDocument(), - CdmPersistentSourceUtils.getResourceDirectory(), - CdmPersistentXMLSource.CDMSOURCE_FILE_NAME, + saveToXml(root.getDocument(), + CdmPersistentSourceUtils.getResourceDirectory(), + CdmPersistentXMLSource.CDMSOURCE_FILE_NAME, XmlHelp.prettyFormat ); return NewInstance(strRemoteSourceName) ; } - + /** * @param strDataSourceName * @param dataSource - * @param code + * @param code * @return * the updated dataSource, null if not succesful */ @@ -201,7 +193,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC CdmPersistentSourceUtils.delete(CdmPersistentSourceUtils.getBeanName(strRemoteSourceName,REMOTESOURCE_BEAN_POSTFIX)); return save(strRemoteSourceName, remoteSource); } - + /** * Tests existing of the datsource in the according config file. * @return true if a datasource with the given name exists in the according datasource config file. @@ -210,22 +202,22 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC Element bean = CdmPersistentSourceUtils.getCdmSourceBeanXml(strRemoteSourceName, REMOTESOURCE_BEAN_POSTFIX); return (bean != null); } - + /** * Returns a list of all datasources stored in the datasource config file * @return all existing data sources - * @throws CdmRemoteSourceException + * @throws CdmRemoteSourceException */ @SuppressWarnings("unchecked") static public List getAllRemoteSources() throws CdmRemoteSourceException{ List remoteSources = new ArrayList(); - + Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream()); if (root == null){ return null; }else{ List lsChildren = root.getChildren("bean", root.getNamespace()); - + for (Element elBean : lsChildren){ String strId = elBean.getAttributeValue("id"); if (strId != null && strId.endsWith(REMOTESOURCE_BEAN_POSTFIX)){ @@ -236,7 +228,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC } return remoteSources; } - + @Override public String toString(){ if (getName() != null){ diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java similarity index 96% rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java index 9dbb34b3a..473cdca0f 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java @@ -6,7 +6,7 @@ * 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.cdm.remote; +package eu.etaxonomy.taxeditor.remoting.source; import eu.etaxonomy.cdm.model.name.NomenclaturalCode; diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java similarity index 65% rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java index d24baa6ee..59c24ea3b 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java @@ -1,26 +1,24 @@ /** * Copyright (C) 2014 EDIT -* European Distributed Institute of Taxonomy +* 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.cdm.remote; +package eu.etaxonomy.taxeditor.remoting.source; import java.util.Map; -import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean; - -import eu.etaxonomy.cdm.api.service.IDatabaseService; +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration; +import eu.etaxonomy.cdm.api.service.IMetadataService; import eu.etaxonomy.cdm.config.CdmSource; import eu.etaxonomy.cdm.config.CdmSourceException; -import eu.etaxonomy.cdm.database.DatabaseTypeEnum; import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName; import eu.etaxonomy.cdm.model.name.NomenclaturalCode; /** - * Base class representing a CDM remote source. + * Base class representing a CDM remote source. * This class handles all the configuration relating to the remoting aspect of * a CDM source. * @@ -34,12 +32,12 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { protected static final NomenclaturalCode DEFAULT_NOMENCLATURAL_CODE = NomenclaturalCode.ICNAFP; private String contextPath; private String baseUrl; - - private IDatabaseService databaseService; - + + private IMetadataService metadataService; + /** * Constructs a CdmRemoteSourceBase object with default values. - * + * */ protected CdmRemoteSourceBase() { setName(DEFAULT_NAME); @@ -48,42 +46,26 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { setContextPath(DEFAULT_CONTEXT_PATH); setNomenclaturalCode(DEFAULT_NOMENCLATURAL_CODE); } - + /** * Constructs a CdmRemoteSourceBase - * + * * @param name * @param server * @param port * @param contextPath * @param nomenclaturalCode */ - protected CdmRemoteSourceBase(String name, String server, int port, String contextPath, NomenclaturalCode nomenclaturalCode) { + public CdmRemoteSourceBase(String name, String server, int port, String contextPath, NomenclaturalCode nomenclaturalCode) { setName(name); setServer(server); setPort(port); setContextPath(contextPath); - setNomenclaturalCode(nomenclaturalCode); - initDatabaseConnection(); + setNomenclaturalCode(nomenclaturalCode); + metadataService = CdmApplicationRemoteConfiguration.getMetadataService(this); } - - protected void initDatabaseConnection() { - if(getContextPath() == null || getContextPath().equals("")) { - setBaseUrl("http://" + getServer() + ":" + String.valueOf(getPort())); - } else { - setBaseUrl("http://" + getServer() + ":" + String.valueOf(getPort()) + "/" + getContextPath()); - } - // the database service needs to be initialised (before the spring - // application context initialsation) since it is required to - // to make queries related to the source database - HttpInvokerProxyFactoryBean proxy = new HttpInvokerProxyFactoryBean(); - proxy.setServiceInterface(IDatabaseService.class); - proxy.setServiceUrl(baseUrl + "/remoting/database.service"); - proxy.afterPropertiesSet(); - databaseService = (IDatabaseService) proxy.getObject(); - } - + /* (non-Javadoc) * @see eu.etaxonomy.cdm.remote.ICdmRemoteSource#getBaseUrl() */ @@ -93,11 +75,11 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { } /** - * Sets the base url for the http-invoker services as listed in + * Sets the base url for the http-invoker services as listed in * httpInvokerServicesClients.xml. - * e.g. for 'http://127.0.0.1:8080/col/remoting/common.service', the + * e.g. for 'http://127.0.0.1:8080/col/remoting/common.service', the * base url would be 'http://127.0.0.1:8080/col' - * + * * @param baseUrl */ public void setBaseUrl(String baseUrl) { @@ -114,9 +96,9 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { /** * Sets the context path. - * e.g. for 'http://127.0.0.1:8080/col/remoting/common.service', the + * e.g. for 'http://127.0.0.1:8080/col/remoting/common.service', the * context path would be 'col' - * + * * @param contextPath */ public void setContextPath(String contextPath) { @@ -128,7 +110,7 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { */ @Override public String getDbSchemaVersion() throws CdmSourceException { - return databaseService.getDbSchemaVersion(); + return metadataService.getDbSchemaVersion(); } @@ -137,7 +119,7 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { */ @Override public boolean isDbEmpty() throws CdmSourceException { - return databaseService.isDbEmpty(); + return metadataService.isDbEmpty(); } @@ -146,12 +128,12 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { */ @Override public boolean checkConnection() throws CdmSourceException { - // assuming that database service works implies + // assuming that database service works implies // the connection is up - // if no exception is thrown then we assume that the + // if no exception is thrown then we assume that the // connection is up // FIXME:Remoting is this really correct? - databaseService.getDbSchemaVersion(); + metadataService.getDbSchemaVersion(); return true; } @@ -161,13 +143,13 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource { */ @Override public String getConnectionMessage() { - return "Conncting to Remote CDM Server " + getName(); + return "Connecting to Remote CDM Instance " + getName() + ":" + getPort() + "/" + getContextPath(); } - + @Override public Map getMetaDataMap() throws CdmSourceException { - return databaseService.getCdmMetadataMap(); + return metadataService.getCdmMetadataMap(); } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java similarity index 82% rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceException.java rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java index 3c2d7150e..a83ed5d07 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceException.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java @@ -1,7 +1,7 @@ /** * */ -package eu.etaxonomy.cdm.remote; +package eu.etaxonomy.taxeditor.remoting.source; /** * diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java new file mode 100644 index 000000000..b322ffa05 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java @@ -0,0 +1,451 @@ +// $Id$ +/** + * Copyright (C) 2015 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.remoting.source; + +import java.io.IOException; +import java.net.Socket; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.util.EntityUtils; +import org.apache.log4j.Logger; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.database.CdmPersistentDataSource; +import eu.etaxonomy.cdm.database.ICdmDataSource; +import eu.etaxonomy.cdm.model.metadata.CdmMetaData; +import eu.etaxonomy.taxeditor.remoting.server.CDMServerException; + +/** + * @author cmathew + * @date 20 Jan 2015 + * + */ +public class CdmServerInfo { + public static final Logger logger = Logger.getLogger(CdmServerInfo.class); + + private final static String CDMSERVER_PREFIX = "cdmserver"; + private final static String NAME_PRODUCTION = "edit-production"; + private final static String SERVER_PRODUCTION = "dev.e-taxonomy.eu"; + + private final static String NAME_INTEGRATION = "edit-integration"; + private final static String SERVER_INTEGRATION = "int.e-taxonomy.eu"; + + private final static String NAME_DEMO_1 = "edit-WS I"; + private final static String SERVER_DEMO_1 = "160.45.63.230"; + + private final static String NAME_DEMO_2 = "edit-WS II"; + private final static String SERVER_DEMO_2 = "160.45.63.231"; + + private final static String NAME_TEST = "edit-test"; + private final static String SERVER_TEST = "test.e-taxonomy.eu"; + + public final static String SERVER_LOCALHOST = "localhost"; + private final static String NAME_LOCALHOST = "localhost"; + public final static String NAME_LOCALHOST_MGD = "localhost mgd."; + + private final static String NAME_LOCALHOST_DEV = "localhost-dev"; + private final static String NAME_INSTANCE_LOCALHOST_DEV = "local-dev"; + private final static String SERVER_LOCALHOST_DEV = "localhost"; + private final static int PORT_LOCALHOST_DEV = 8080; + private final static String BASEPATH_LOCALHOST_DEV = ""; + + public final static int NULL_PORT = -1; + public final static String NULL_PORT_STRING = "N/A"; + + + private final String name; + private final String server; + private int port; + private final List instances; + + private static List cdmServerInfoList; + + private String cdmlibServicesVersion = ""; + private String cdmlibServicesLastModified = ""; + + + public CdmServerInfo(String name, String server, int port) { + this.name = name; + this.server = server; + this.port = port; + instances = new ArrayList(); + + } + + + public CdmInstanceInfo addInstance(String name, String basePath) { + String _basePath = basePath; + if(isLocalhostMgd()) { + _basePath = ""; + } + CdmInstanceInfo cii = new CdmInstanceInfo(name, _basePath); + instances.add(cii); + return cii; + + } + + public boolean isLocalhost() { + return name.startsWith(SERVER_LOCALHOST); + } + + public boolean isLocalhostMgd() { + return NAME_LOCALHOST_MGD.equals(name); + } + + public String getCdmlibServicesVersion() { + return cdmlibServicesVersion; + } + + public String getCdmlibLastModified() { + return cdmlibServicesLastModified; + } + + public void refreshInstances() throws CDMServerException { + instances.clear(); + if(isLocalhostMgd()) { + addInstancesFromDataSourcesConfig(); + } else { + addInstancesViaHttp(); + } + Collections.sort(instances, new Comparator() { + @Override + public int compare(CdmInstanceInfo cii1, CdmInstanceInfo cii2) + { + return cii1.getName().toString().compareTo(cii2.getName().toString()); + } + }); + } + + public void updateInfo() throws CDMServerException { + String url = "http://" + server + ":" + String.valueOf(port) + "/" + CDMSERVER_PREFIX + "/info.jsp"; + String responseBody = getResponse(url); + if(responseBody != null) { + try { + JSONObject info = new JSONObject(responseBody); + cdmlibServicesVersion = info.getString("cdmlibServicesVersion"); + cdmlibServicesLastModified = info.getString("cdmlibServicesLastModified"); + } catch (JSONException e) { + throw new CDMServerException(e); + } + } + } + + public void addInstancesViaHttp() throws CDMServerException { + updateInfo(); + String url = "http://" + server + ":" + String.valueOf(port) + "/" + CDMSERVER_PREFIX + "/instances.jsp"; + String responseBody = getResponse(url); + if(responseBody != null) { + try { + JSONArray array = new JSONArray(responseBody); + for(int i=0;i responseHandler = new ResponseHandler() { + + @Override + public String handleResponse( + final HttpResponse response) throws ClientProtocolException, IOException { + int status = response.getStatusLine().getStatusCode(); + if (status >= 200 && status < 300) { + HttpEntity entity = response.getEntity(); + return entity != null ? EntityUtils.toString(entity) : null; + } else { + throw new ClientProtocolException("Unexpected response status: " + status); + } + } + + }; + String responseBody = null; + try { + responseBody = client.execute(httpGet, responseHandler); + } catch (ClientProtocolException e) { + throw new CDMServerException(e); + } catch (IOException e) { + throw new CDMServerException(e); + } + return responseBody; + } + + public void addInstancesFromDataSourcesConfig() { + for(ICdmDataSource dataSource : CdmPersistentDataSource.getAllDataSources()){ + logger.info("Adding local instance " + dataSource.getName()); + addInstance(dataSource.getName(), dataSource.getName()); + } + } + + public String toString(String instanceName, int port) { + return server + ":" + String.valueOf(port) + "/" + instanceName; + } + + public CdmInstanceInfo getInstanceFromName(String instanceName) { + if(instanceName == null) { + return null; + } + + for(CdmInstanceInfo instance : instances) { + if(instance.getName() != null && instance.getName().equals(instanceName)) { + return instance; + } + } + return null; + } + + public CdmRemoteSource getCdmRemoteSource(CdmInstanceInfo instance, int port) { + if(instance != null) { + return CdmRemoteSource.NewInstance(name, + server, + port, + instance.getBasePath(), + null); + } + return null; + } + + public boolean pingServer() { + if(isLocalhostMgd()) { + return true; + } + try { + Socket s = new Socket(server, port); + logger.info("[CDM-Server] Available @ " + server + ":" + port ); + updateInfo(); + return true; + } catch (IOException ioe) { + + } catch (CDMServerException e) { + + } + return false; + } + + public boolean pingInstance(CdmInstanceInfo instance, int port) throws CDMServerException { + + ICdmRemoteSource crs = getCdmRemoteSource(instance, port); + try { + if(crs != null && crs.checkConnection()) { + logger.info("[CDM-Server] Running @ " + server + ":" + port + " for instance " + instance); + return true; + } + } catch (CdmSourceException e) { + throw new CDMServerException(e); + } + + return false; + } + + public int compareDbSchemaVersion(CdmInstanceInfo instance, int port) throws CDMServerException { + + ICdmRemoteSource crs = getCdmRemoteSource(instance, port); + String dbSchemaVersion; + try { + dbSchemaVersion = crs.getDbSchemaVersion(); + } catch (CdmSourceException e) { + throw new CDMServerException(e); + } + + + if(dbSchemaVersion != null) { + return CdmMetaData.compareVersion(dbSchemaVersion, CdmMetaData.getDbSchemaVersion(), 3, null); + } else { + throw new CDMServerException("Cannot determine editor db. schema version"); + } + } + + public int compareCdmlibServicesVersion() throws CdmSourceException { + + String serverVersion = cdmlibServicesVersion; + String serverCdmlibLastModified = cdmlibServicesLastModified; + + return compareCdmlibServicesVersion(serverVersion, serverCdmlibLastModified); + } + + + /** + * @param serverVersion + * @param editorVersion + * @throws CdmSourceException + */ + public static int compareCdmlibServicesVersion(String serverVersion, String serverCdmlibLastModified) throws CdmSourceException { + + String editorVersion = CdmApplicationState.getCdmlibVersion(); + String editorCdmlibLastModified = CdmApplicationState.getCdmlibLastModified(); + + int result = 0; + if(StringUtils.isBlank(serverVersion) || StringUtils.isBlank(editorVersion)) { + throw new CdmSourceException("cdmlib-services server or editor version is empty"); + } + + String[] serverVersionSplit = serverVersion.split("\\."); + String[] editorVersionSplit = editorVersion.split("\\."); + + if(serverVersionSplit.length < 3 || editorVersionSplit.length < 3 || serverVersionSplit.length > 4 || editorVersionSplit.length > 4) { + throw new CdmSourceException("cdmlib-services server or editor version is invalid"); + } + + Integer serverVersionPart; + Integer editorVersionPart; + + for(int i=0 ; i<3 ; i++) { + serverVersionPart = Integer.valueOf(serverVersionSplit[i]); + editorVersionPart = Integer.valueOf(editorVersionSplit[i]); + + int partCompare = serverVersionPart.compareTo(editorVersionPart); + if (partCompare != 0){ + return partCompare; + } + } + // at this point major, minor and patch versions are matching + + if(StringUtils.isBlank(serverCdmlibLastModified) || StringUtils.isBlank(editorCdmlibLastModified)) { + throw new CdmSourceException("cdmlib-services server or editor version is empty"); + } + + String cdmServerIgnoreVersion = System.getProperty("cdm.server.version.lm.ignore"); + if(StringUtils.isBlank(cdmServerIgnoreVersion) || !cdmServerIgnoreVersion.equals("true")) { + Long serverLastModified = Long.valueOf(serverCdmlibLastModified); + Long editorLastModified = Long.valueOf(editorCdmlibLastModified); + return serverLastModified.compareTo(editorLastModified); + } + + return 0; + } + + + + public static List getCdmServers() { + if(cdmServerInfoList == null) { + cdmServerInfoList = new ArrayList(); + cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80)); + //cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 80)); + cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_1, SERVER_DEMO_1, 80)); + // cdmServerInfoList.add(new CdmServerInfo(NAME_DEMO_2, SERVER_DEMO_2, 80)); + //cdmServerInfoList.add(new CdmServerInfo(NAME_TEST, SERVER_TEST, 80)); + // cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST, SERVER_LOCALHOST, 8080)); + cdmServerInfoList.add(new CdmServerInfo(NAME_LOCALHOST_MGD, SERVER_LOCALHOST,NULL_PORT)); + } + return cdmServerInfoList; + } + + public String getName() { + return name; + } + + public String getServer() { + return server; + } + + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public List getInstances() throws CDMServerException { + if(instances.isEmpty()) { + refreshInstances(); + } + return instances; + } + + public static CdmRemoteSource getDevServerRemoteSource() { + String value = System.getProperty("cdm.server.dev.port"); + boolean available = false; + CdmInstanceInfo devInstance = null; + if(value != null && !value.isEmpty()) { + int devPort = Integer.valueOf(value); + CdmServerInfo devCii = new CdmServerInfo(NAME_LOCALHOST_DEV, SERVER_LOCALHOST_DEV, devPort); + try { + devInstance = devCii.addInstance(NAME_INSTANCE_LOCALHOST_DEV, BASEPATH_LOCALHOST_DEV); + available = devCii.pingInstance(devInstance, devPort); + if(available) { + return devCii.getCdmRemoteSource(devInstance, devPort); + } + } catch (Exception e) { + + } + } + return null; + } + + public class CdmInstanceInfo { + private final String name; + + /** + * The full path of the instance including the the prefix (if any). + * E.g. for an EDIT instance this would be something like "cdmserver/remoting" + * For a managed local server this would simply be "" + */ + private final String basePath; + + + public CdmInstanceInfo(String name, String basePath) { + this.name = name; + this.basePath = basePath; + } + + + public String getName() { + return name; + } + + public String getBasePath() { + return basePath; + } + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/ICdmRemoteSource.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java similarity index 94% rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/ICdmRemoteSource.java rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java index f278c7468..39e8886e4 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/ICdmRemoteSource.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java @@ -6,7 +6,7 @@ * 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.cdm.remote; +package eu.etaxonomy.taxeditor.remoting.source; import eu.etaxonomy.cdm.config.ICdmSource; diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java new file mode 100644 index 000000000..72f6294c3 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java @@ -0,0 +1,125 @@ +// $Id$ +/** +* Copyright (C) 2014 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.service; + +import java.util.List; +import java.util.UUID; + +import org.springframework.stereotype.Component; + +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; + +/** + * @author cmathew + * @date 14 Oct 2014 + * + */ +@Component +public class CachedCommonServiceImpl implements ICachedCommonService { + + + private static boolean cacheEnabled = true; + + public static boolean isCacheEnabled() { + return cacheEnabled; + } + + public static void setCacheEnabled(boolean cacheEnabled) { + CachedCommonServiceImpl.cacheEnabled = cacheEnabled; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#find(java.lang.Class, int) + */ + @Override + public CdmBase find(Class clazz, int id) { + CdmBase cdmEntity = CdmApplicationState.getCurrentAppConfig().getCommonService().find(clazz, id, getPropertyPaths(clazz)); + if(cdmEntity == null) { + throw new NullPointerException("CDM Entity of type " + clazz.getName() + " with id " + id + " is null."); + } + return cdmEntity; + + } + + + private List getPropertyPaths(Object obj) { + List propertyPaths = null; + ICdmEntitySession cdmEntitySession = + ((CdmApplicationRemoteController)CdmApplicationState.getCurrentAppConfig()).getCdmEntitySessionManager().getActiveSession(); + if(cdmEntitySession != null) { + propertyPaths = cdmEntitySession.getPropertyPaths(obj); + } + return propertyPaths; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.service.ICachedCommonService#initializeCollection(java.util.UUID, java.lang.String) + */ + @Override + public Object initializeCollection(UUID ownerUuid, String fieldName) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().initializeCollection(ownerUuid, fieldName, getPropertyPaths(fieldName)); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#isEmpty(org.hibernate.collection.spi.PersistentCollection) + */ + @Override + public boolean isEmpty(UUID ownerUuid, String fieldName) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().isEmpty(ownerUuid, fieldName); + + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#size(org.hibernate.collection.spi.PersistentCollection) + */ + @Override + public int size(UUID ownerUuid, String fieldName) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().size(ownerUuid, fieldName); + } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#contains(org.hibernate.collection.spi.PersistentCollection, java.lang.Object) + */ + @Override + public boolean contains(UUID ownerUuid, String fieldName, Object element) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().contains(ownerUuid, fieldName, element); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#containsKey(org.hibernate.collection.spi.PersistentCollection, java.lang.Object) + */ + @Override + public boolean containsKey(UUID ownerUuid, String fieldName, Object key) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().containsKey(ownerUuid, fieldName, key); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#containsValue(org.hibernate.collection.spi.PersistentCollection, java.lang.Object) + */ + @Override + public boolean containsValue(UUID ownerUuid, String fieldName, Object element) { + return CdmApplicationState.getCurrentAppConfig().getCommonService().containsValue(ownerUuid, fieldName, element); + } + + + + + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java new file mode 100644 index 000000000..692a3bae1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java @@ -0,0 +1,46 @@ +// $Id$ +/** + * Copyright (C) 2015 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.service; + +import java.io.IOException; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.httpclient.methods.PostMethod; +import org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor; +import org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; + +/** + * @author cmathew + * @date 27 Jan 2015 + * + */ +public class CdmAuthenticatedHttpInvokerRequestExecutor extends CommonsHttpInvokerRequestExecutor { + + @Override + protected PostMethod createPostMethod(HttpInvokerClientConfiguration config) throws IOException { + PostMethod postMethod = super.createPostMethod(config); + + SecurityContext securityContext = CdmApplicationState.getCurrentSecurityContext(); + if(securityContext != null) { + Authentication auth = securityContext.getAuthentication(); + if ((auth != null) && (auth.getName() != null) && + (auth.getCredentials() != null)) { + String base64 = auth.getName() + ":" + auth.getCredentials().toString(); + postMethod.setRequestHeader("Authorization", "Basic " + + new String(Base64.encodeBase64(base64.getBytes()))); + } + } + return postMethod; + } +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java new file mode 100644 index 000000000..292eda2fd --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java @@ -0,0 +1,13 @@ +package eu.etaxonomy.taxeditor.service; + +public class CdmServiceInterceptorException extends RuntimeException { + + public CdmServiceInterceptorException(String message) { + super(message); + } + + public CdmServiceInterceptorException(Exception ex) { + super(ex); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java new file mode 100644 index 000000000..d8a07325c --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java @@ -0,0 +1,85 @@ +package eu.etaxonomy.taxeditor.service; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashSet; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration; +import org.springframework.remoting.support.RemoteInvocation; +import org.springframework.remoting.support.RemoteInvocationResult; +import org.springframework.stereotype.Component; + +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; + +@Component +public class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor { + + private static final Logger logger = Logger.getLogger(CdmServiceRequestExecutor.class); + + private ICdmEntitySessionManager cdmEntitySessionManager ; + + private RemoteInvocation currentRemoteInvocation; + + protected final static Set cachableMethods = new HashSet(); + + + + public CdmServiceRequestExecutor() { + cachableMethods.add("merge"); + cachableMethods.add("save"); + cachableMethods.add("findWithUpdate"); + cachableMethods.add("loadWithUpdate"); + } + + @Override + protected void writeRemoteInvocation(RemoteInvocation invocation, OutputStream os) throws IOException { + if(cdmEntitySessionManager == null) { + cdmEntitySessionManager = + ((CdmApplicationRemoteController)CdmApplicationState.getCurrentAppConfig()).getCdmEntitySessionManager(); + } + currentRemoteInvocation = invocation; + super.writeRemoteInvocation(invocation, os); + } + + @Override + protected RemoteInvocationResult doExecuteRequest(HttpInvokerClientConfiguration config, + java.io.ByteArrayOutputStream baos) + throws java.io.IOException, + java.lang.ClassNotFoundException { + RemoteInvocationResult rir = fromCache(currentRemoteInvocation); + + if(rir == null) { + logger.info("Remote invoking : " + currentRemoteInvocation.getMethodName() + "@" + config.getServiceUrl()); + rir = super.doExecuteRequest(config, baos); + if(rir.getValue() != null && !rir.hasException()) { + if(cachableMethods.contains(currentRemoteInvocation.getMethodName())) { + rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue(), true)); + } else if(rir.getValue() instanceof UpdateResult){ + UpdateResult result = (UpdateResult)rir.getValue(); + if(result.isOk()){ + cdmEntitySessionManager.load(result, true); + } + } else { + rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue(), false)); + } + } + cache(currentRemoteInvocation, rir); + } + currentRemoteInvocation = null; + + return rir; + } + + public void cache(RemoteInvocation ri, RemoteInvocationResult rir) { + + } + + public RemoteInvocationResult fromCache(RemoteInvocation ri) { + return null; + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java new file mode 100644 index 000000000..98c94d899 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java @@ -0,0 +1,88 @@ +// $Id$ +/** + * Copyright (C) 2014 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.service; + +import java.util.UUID; + +import eu.etaxonomy.cdm.model.common.CdmBase; + +/** + * @author cmathew + * @date 14 Oct 2014 + * + */ +public interface ICachedCommonService { + + public CdmBase find(Class clazz, int id); + + + /** + * Initializes a collection or map. + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of collection or map + * @return initialised collection or map + */ + public Object initializeCollection(UUID ownerUuid, String fieldName); + + /** + * Checks if a collection or map is empty. + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of collection or map + * @return true if the collection of map is empty, else false + */ + public boolean isEmpty(UUID ownerUuid, String fieldName); + + /** + * Returns the size of requested collection or map. + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of collection or map + * @return the size of the persistent collection + */ + public int size(UUID ownerUuid, String fieldName); + + /** + * Checks whether an object is contained within a persistent collection. + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of collection or map + * @param element the element to check for + * @return true if the element exists in the collection, false o/w + */ + public boolean contains(UUID ownerUuid, String fieldName, Object element); + + /** + * Checks whether an index object exists within a persistent collection + * (usually a map) + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of map + * @param key the index object to look for. + * @return true if the index object exists in the collection, false o/w + */ + public boolean containsKey(UUID ownerUuid, String fieldName, Object key); + + /** + * checks whether an value object exists within a persistent collection + * (usually a map) + * + * @param ownerUuid uuid of owner cdm entity + * @param fieldName field name of map + * @param key the value object to look for. + * @return true if the value object exists in the collection, false o/w + */ + public boolean containsValue(UUID ownerUuid, String fieldName, Object element); + + + + +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java new file mode 100644 index 000000000..5991563ad --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java @@ -0,0 +1,60 @@ +package eu.etaxonomy.taxeditor.service; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.springframework.remoting.support.RemoteInvocation; +import org.springframework.remoting.support.RemoteInvocationResult; + +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.cdm.model.common.TermType; + + +public class TermServiceRequestExecutor extends CdmServiceRequestExecutor { + private static final Logger logger = Logger.getLogger(TermServiceRequestExecutor.class); + + private static Map termTypeMap = new + HashMap(); + + private static CdmServiceCacher cdmServiceCacher; + + public static void setDefaultCacher(CdmServiceCacher css) { + cdmServiceCacher = css; + } + + @Override + public void cache(RemoteInvocation ri, RemoteInvocationResult rir) { + if(cdmServiceCacher != null) { + if(ri.getMethodName().equals("listByTermType")) { + if(ri.getArguments()[1] == null) { + Set terms = new HashSet(); + if(rir.getValue() != null) { + terms.addAll((List)rir.getValue()); + + for(DefinedTermBase term : terms) { + cdmServiceCacher.load(term); + } + termTypeMap.put((TermType)ri.getArguments()[0], rir); + } + + } + } + } else { + logger.info("Default CdmServiceCacher is null. Cannot cache terms"); + } + } + + + @Override + public RemoteInvocationResult fromCache(RemoteInvocation ri) { + return termTypeMap.get(ri.getArguments()[0]); + } + + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java new file mode 100644 index 000000000..4af9273f1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java @@ -0,0 +1,8 @@ +package eu.etaxonomy.taxeditor.session; + +public class CdmClientSessionException extends RuntimeException { + + public CdmClientSessionException(String message) { + super(message); + } +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java new file mode 100644 index 000000000..150d7d20e --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java @@ -0,0 +1,320 @@ +// $Id$ +/** + * Copyright (C) 2014 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.session; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.sf.ehcache.statistics.LiveCacheStatistics; + +import org.apache.log4j.Logger; + +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; +import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult; + + +/** + * + * NOTE : It would be nice to have this class performing merge / delete operations + * using services, but this is only possible if we can 'intelligently' + * get from a model class to the correspoding service class + * @author cmathew + * @date 20 Oct 2014 + * + */ + +public class CdmEntitySession implements ICdmEntitySession { + + private static final Logger logger = Logger.getLogger(CdmEntitySession.class); + + private final CdmEntitySessionManager cdmEntitySessionManager; + + private final ICdmEntitySessionEnabled sessionOwner; + + private CdmTransientEntityCacher cdmTransientEntityCacher; + + private List changeObservers; + + + public CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) { + this.sessionOwner = sessionOwner; + this.cdmEntitySessionManager = cdmEntitySessionManager; + init(sessionOwner, cdmEntitySessionManager); + } + + private void init(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) { + this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager); + this.changeObservers = new ArrayList(); + cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this); + } + + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object, boolean) + */ + @Override + public O load(O obj, boolean update) { + return cdmTransientEntityCacher.load(obj, update); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.model.common.CdmBase, boolean) + */ + @Override + public T load(T cdmBase, boolean update) { + return (T)cdmTransientEntityCacher.load(cdmBase, update); + } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean) + */ + @Override + public UpdateResult load(UpdateResult updateResult, boolean update) { + return cdmTransientEntityCacher.load(updateResult, update); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.persistence.dto.MergeResult, boolean) + */ + @Override + public MergeResult load(MergeResult mergeResult, boolean update) { + return cdmTransientEntityCacher.load(mergeResult, update); + } + + @Override + public void update() { + Collection rootEntities = getRootEntities(); + if(rootEntities != null) { + for(T rootEntity : rootEntities) { + load(rootEntity, true); + } + } + } + +// @Override +// public void update(T cdmBase, Set affectedObjects) { +// addEvent(cdmBase, affectedObjects, EventType.UPDATE); +// } +// +// @Override +// public void update(T cdmBase, CdmBase affectedObject) { +// Set set = new HashSet(); +// set.add(affectedObject); +// addEvent(cdmBase, set, EventType.UPDATE); +// } +// +// +// @Override +// public void delete(T cdmBase, Set affectedObjects) { +// addEvent(cdmBase, affectedObjects, EventType.DELETE); +// } +// +// @Override +// public void delete(Set cdmBases, Set affectedObjects) { +// addEvent(cdmBases, affectedObjects, EventType.DELETE); +// } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public EntityCacherDebugResult debug(T cdmBase) { + return debug(Arrays.asList(cdmBase)); + } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List) + */ + @Override + public EntityCacherDebugResult debug(Collection cdmBases) { + EntityCacherDebugResult entityCacherDebugResult = + new EntityCacherDebugResult(cdmTransientEntityCacher, cdmBases); + return entityCacherDebugResult; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug() + */ + @Override + public EntityCacherDebugResult debug() { + return debug(getRootEntities()); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection) + */ + @Override + public Collection load(Collection cdmBaseList, boolean update) { + return cdmTransientEntityCacher.load(cdmBaseList, update); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest() + */ + @Override + public void setEntitiesAsLatest() { + //FIXME:Remoting need to think more about whether we really need this + // List entities = cdmTransientEntityCacher.getAllEntities(); + // for(CdmBase entity : entities) { + // cdmEntitySessionManager.setEntityAsLatest(entity); + // } + } + + + @Override + public void bind() { + logger.info("Binding session with owner " + sessionOwner.toString()); + if(!cdmEntitySessionManager.contains(sessionOwner)) { + init(sessionOwner, cdmEntitySessionManager); + } + cdmEntitySessionManager.bind(sessionOwner); + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose() + */ + @Override + public void dispose() { + + cdmTransientEntityCacher.dispose(); + changeObservers.clear(); + cdmEntitySessionManager.remove(sessionOwner); + + } + + +// /* (non-Javadoc) +// * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit() +// */ +// @Override +// public void addEvent(ICdmBase cdmBase, Set affectedObjects, EventType eventType) { +// affectedObjects = (Set) load(affectedObjects, true); +// CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, affectedObjects, eventType); +// CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce); +// } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, java.lang.Class) + */ + @Override + public T remoteLoad(IService service, UUID uuid) { + T cdmBase = service.load(uuid); + return load(cdmBase, false); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.IService, java.util.UUID, java.util.List) + */ + @Override + public T remoteLoad(IService service, UUID uuid, List propertyPaths) { + T cdmBase = service.load(uuid, propertyPaths); + return load(cdmBase, false); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#save(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public UUID remoteSave(IService service, T cdmBase) { + UUID uuid = service.save(cdmBase).getUuid(); + load(cdmBase,false); + return uuid; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public T remoteUpdate(IService service, T cdmBase) { + T mergedCdmBase = service.merge(cdmBase, true).getMergedEntity(); + return mergedCdmBase; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#isActive() + */ + @Override + public boolean isActive() { + return cdmEntitySessionManager.getActiveSession() == this; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getOwner() + */ + @Override + public ICdmEntitySessionEnabled getOwner() { + return sessionOwner; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getNoOfObjectsInCache() + */ + @Override + public LiveCacheStatistics getCacheStatistics() { + return cdmTransientEntityCacher.getCacheStatistics(); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getRootEntities() + */ + @Override + public Collection getRootEntities() { + return sessionOwner.getRootEntities(); + } + + public CdmTransientEntityCacher getCacher() { + return cdmTransientEntityCacher; + } + + @Override + public List getPropertyPaths(Object obj) { + Map> propertyPathsMap = sessionOwner.getPropertyPathsMap(); + if(propertyPathsMap == null || propertyPathsMap.isEmpty()) { + return null; + } + return propertyPathsMap.get(obj); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addNewCdmEntity(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public void addNewCdmEntity(CdmBase newEntity) { + cdmTransientEntityCacher.addNewEntity(newEntity); + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java new file mode 100644 index 000000000..5582df777 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java @@ -0,0 +1,264 @@ +// $Id$ +/** + * Copyright (C) 2014 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.session; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.springframework.stereotype.Component; + +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; + +/** + * @author cmathew + * @date 16 Oct 2014 + * + */ +@Component +public class CdmEntitySessionManager implements ICdmEntitySessionManager { + private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class); + + private final Map ownerSessionMap = + new HashMap(); + + private final List sessionObservers = new ArrayList(); + + //private ICdmEntitySession activeSession; + + private final InheritableThreadLocal tlActiveSession = new InheritableThreadLocal(); + + private NullSession nullSession; + + @Override + public ICdmEntitySession getNullSession() { + return nullSession; + } + + @Override + public ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive) { + ICdmEntitySession session = ownerSessionMap.get(sessionOwner); + if(session == null) { + session = new CdmEntitySession(sessionOwner, this); + addToOwnerSessionMap(sessionOwner, session); + } + + if(setAsActive) { + setActiveSession(session); + } + + return session; + } + + @Override + public ICdmEntitySession bindNullSession() { + + if(nullSession == null) { + nullSession = new NullSession(null, this); + } + + setActiveSession(nullSession); + + return nullSession; + } + + @Override + public ICdmEntitySession getActiveSession() { + return tlActiveSession.get(); + } + + + private void setActiveSession(ICdmEntitySession activeSession) { + this. tlActiveSession.set(activeSession); + notifyObservers(); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions() + */ + @Override + public Collection getSessions() { + return ownerSessionMap.values(); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bind(eu.etaxonomy.taxeditor.session.ISessionEventListener) + */ + @Override + public void bind(ICdmEntitySessionEnabled sessionOwner) { + if(sessionOwner == null) { + setActiveSession(null); + return; + } + ICdmEntitySession session = ownerSessionMap.get(sessionOwner); + if(session == null) { + throw new CdmClientSessionException("Trying to bind session which does not exist"); + } + + setActiveSession(session); + + } + + @Override + public boolean contains(ICdmEntitySessionEnabled sessionOwner) { + return ownerSessionMap.containsKey(sessionOwner); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T) + */ + @Override + public T load(T obj, boolean update) { + if(tlActiveSession.get() == null) { + return obj; + } else { + return tlActiveSession.get().load(obj, update); + } + } + + + @Override + public void update() { + if(tlActiveSession.get() != null) { + tlActiveSession.get().update(); + } + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T) + */ + @Override + public T load(T cdmBase, boolean update) { + if(tlActiveSession.get() == null) { + return cdmBase; + } + return tlActiveSession.get().load(cdmBase, update); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean) + */ + @Override + public UpdateResult load(UpdateResult updateResult, boolean update) { + if(tlActiveSession.get() == null) { + return updateResult; + } + return tlActiveSession.get().load(updateResult, update); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.persistence.dto.MergeResult, boolean) + */ + @Override + public MergeResult load(MergeResult mergeResult, boolean update) { + if(tlActiveSession.get() == null) { + return mergeResult; + } + return tlActiveSession.get().load(mergeResult, update); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection) + */ + @Override + public Collection load(Collection cdmBaseList, boolean update) { + if(tlActiveSession.get() == null) { + return cdmBaseList; + } + return tlActiveSession.get().load(cdmBaseList, update); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ISessionEventListener) + */ + void remove(ICdmEntitySessionEnabled owner) { + ICdmEntitySession session = ownerSessionMap.get(owner); + if(session == null) { + logger.info("No Session connected to owner, nothing to do"); + return; + } + if(session == tlActiveSession.get()) { + setActiveSession(null); + } + ownerSessionMap.remove(owner); + notifyObservers(); + + } + + @Override + public void dispose(ICdmEntitySessionEnabled owner) { + ICdmEntitySession session = ownerSessionMap.get(owner); + if(session != null) { + session.dispose(); + } + if(nullSession != null && nullSession.getOwner() == owner) { + nullSession = null; + } + + } + + + @Override + public void disposeAll() { + Set owners = + new HashSet(ownerSessionMap.keySet()); + for(ICdmEntitySessionEnabled owner : owners) { + ICdmEntitySession session = ownerSessionMap.get(owner); + if(session != null) { + session.dispose(); + } + } + + } + + void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) { + ownerSessionMap.put(owner, session); + notifyObservers(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionListener() + */ + @Override + public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) { + sessionObservers.add(sessionObserver); + } + + public void notifyObservers() { + for(ICdmEntitySessionManagerObserver sessionObserver : sessionObservers) { + sessionObserver.changed(); + } + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting() + */ + @Override + public boolean isRemoting() { + // FIXME:Remoting stupid method to check whether we are in remoting + return true; + } + +} + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/DefaultNewEntityListener.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/DefaultNewEntityListener.java new file mode 100644 index 000000000..dc519d8a0 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/DefaultNewEntityListener.java @@ -0,0 +1,42 @@ +// $Id$ +/** +* Copyright (C) 2015 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.session; + +import org.apache.log4j.Logger; + +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.model.NewEntityListener; +import eu.etaxonomy.cdm.model.common.CdmBase; + +/** + * @author cmathew + * @date 30 Sep 2015 + * + */ +public class DefaultNewEntityListener implements NewEntityListener { + + private static final Logger logger = Logger.getLogger(DefaultNewEntityListener.class); + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.model.NewEntityListener#onCreate(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public void onCreate(CdmBase cdmBase) { + logger.info("New Entity created : " + cdmBase); + if(CdmApplicationState.getCurrentAppConfig() instanceof CdmApplicationRemoteController){ + ICdmEntitySession activeSession = ((CdmApplicationRemoteController)CdmApplicationState.getCurrentAppConfig()).getCdmEntitySessionManager().getActiveSession(); + if(activeSession != null) { + activeSession.addNewCdmEntity(cdmBase); + } + } + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java new file mode 100644 index 000000000..bbd744f77 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java @@ -0,0 +1,96 @@ +package eu.etaxonomy.taxeditor.session; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +import net.sf.ehcache.statistics.LiveCacheStatistics; +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult; + +public interface ICdmEntitySession { + + public ICdmEntitySessionEnabled getOwner(); + + public LiveCacheStatistics getCacheStatistics(); + + public O load(O obj, boolean update); + + public T load(T cdmBase, boolean update); + + public UpdateResult load(UpdateResult updateResult, boolean update); + + public MergeResult load(MergeResult mergeResult, boolean update); + + public EntityCacherDebugResult debug(T cdmBase); + + public EntityCacherDebugResult debug(Collection cdmBase); + + public EntityCacherDebugResult debug(); + + public Collection load(Collection cdmBaseList, boolean update); + + public void setEntitiesAsLatest(); + + public Collection getRootEntities(); + + public void dispose(); + + public void bind(); + +// public void addEvent(ICdmBase cdmBase, Set affectedObjects, EventType eventType); + + public T remoteLoad(IService service, UUID uuid); + + public T remoteLoad(IService service, UUID uuid, List propertyPaths); + + public UUID remoteSave(IService service, T cdmBase); + + public T remoteUpdate(IService service, T cdmBase); + + +// /** +// * @param cdmBase +// * @param affectedObjects +// */ +// public void update(T cdmBase, Set affectedObjects); +// +// /** +// * @param cdmBase +// * @param affectedObjects +// */ +// public void delete(T cdmBase, Set affectedObjects); +// +// /** +// * @param cdmBase +// * @param affectedObjects +// */ +// public void delete(Set cdmBases, Set affectedObjects); + + + public boolean isActive(); + +// /** +// * @param cdmBase +// * @param affectedObject +// */ +// public void update(T cdmBase, CdmBase affectedObject); + + /** + * + */ + public void update(); + + + /** + * @param obj + * @return + */ + public List getPropertyPaths(Object obj); + + public void addNewCdmEntity(CdmBase newEntity); + +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionEnabled.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionEnabled.java new file mode 100644 index 000000000..be2e46c7c --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionEnabled.java @@ -0,0 +1,17 @@ +package eu.etaxonomy.taxeditor.session; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import eu.etaxonomy.cdm.model.common.CdmBase; + +public interface ICdmEntitySessionEnabled { + + public ICdmEntitySession getCdmEntitySession(); + + public Collection getRootEntities(); + + public Map> getPropertyPathsMap(); + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java new file mode 100644 index 000000000..f6418aecb --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java @@ -0,0 +1,79 @@ +package eu.etaxonomy.taxeditor.session; + +import java.util.Collection; + +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; + +public interface ICdmEntitySessionManager { + + public abstract ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive); + + /** + * @param sessionOwner + * @return + */ + public ICdmEntitySession bindNullSession(); + + + public abstract void bind(ICdmEntitySessionEnabled sessionOwner); + + + public abstract T load(T obj, boolean update); + + + public abstract T load(T cdmBase, boolean update); + + + public abstract UpdateResult load(UpdateResult updateResult, boolean update); + + public abstract MergeResult load(MergeResult mergeResult, boolean update); + + + public abstract Collection load(Collection cdmBaseList, boolean update); + + + /** + * @return + */ + public ICdmEntitySession getActiveSession(); + + public Collection getSessions(); + + public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver); + + + + + public boolean isRemoting(); + + /** + * @param owner + */ + public void dispose(ICdmEntitySessionEnabled owner); + + /** + * + */ + public void disposeAll(); + + + /** + * + */ + public void update(); + + /** + * @param sessionOwner + * @return + */ + public boolean contains(ICdmEntitySessionEnabled sessionOwner); + + /** + * @return + */ + public ICdmEntitySession getNullSession(); + + +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManagerObserver.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManagerObserver.java new file mode 100644 index 000000000..d2e32521f --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManagerObserver.java @@ -0,0 +1,21 @@ +// $Id$ +/** +* Copyright (C) 2015 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.session; + +/** + * @author cmathew + * @date 16 Feb 2015 + * + */ +public interface ICdmEntitySessionManagerObserver { + + public void changed(); + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/NullSession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/NullSession.java new file mode 100644 index 000000000..22aa7bead --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/NullSession.java @@ -0,0 +1,233 @@ +// $Id$ +/** +* Copyright (C) 2015 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.session; + +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import net.sf.ehcache.statistics.LiveCacheStatistics; +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult; + +/** + * @author cmathew + * @date 30 Jul 2015 + * + */ +public class NullSession implements ICdmEntitySession { + + private ICdmEntitySessionEnabled sessionOwner; + private final CdmEntitySessionManager cdmEntitySessionManager; + + public NullSession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) { + this.sessionOwner = sessionOwner; + this.cdmEntitySessionManager = cdmEntitySessionManager; + } + + public void setOwner(ICdmEntitySessionEnabled sessionOwner) { + this.sessionOwner = sessionOwner; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getOwner() + */ + @Override + public ICdmEntitySessionEnabled getOwner() { + return sessionOwner; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getCacheStatistics() + */ + @Override + public LiveCacheStatistics getCacheStatistics() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object, boolean) + */ + @Override + public O load(O obj, boolean update) { + return obj; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.model.common.CdmBase, boolean) + */ + @Override + public T load(T cdmBase, boolean update) { + return cdmBase; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean) + */ + @Override + public UpdateResult load(UpdateResult updateResult, boolean update) { + return updateResult; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public EntityCacherDebugResult debug(T cdmBase) { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.Collection) + */ + @Override + public EntityCacherDebugResult debug(Collection cdmBase) { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug() + */ + @Override + public EntityCacherDebugResult debug() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection, boolean) + */ + @Override + public Collection load(Collection cdmBaseList, boolean update) { + return cdmBaseList; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest() + */ + @Override + public void setEntitiesAsLatest() { + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getRootEntities() + */ + @Override + public Collection getRootEntities() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose() + */ + @Override + public void dispose() { + cdmEntitySessionManager.remove(sessionOwner); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#bind() + */ + @Override + public void bind() { + cdmEntitySessionManager.bindNullSession(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#remoteLoad(eu.etaxonomy.cdm.api.service.IService, java.util.UUID) + */ + @Override + public T remoteLoad(IService service, UUID uuid) { + T cdmBase = service.load(uuid); + return load(cdmBase, false); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#remoteLoad(eu.etaxonomy.cdm.api.service.IService, java.util.UUID, java.util.List) + */ + @Override + public T remoteLoad(IService service, UUID uuid, List propertyPaths) { + T cdmBase = service.load(uuid, propertyPaths); + return load(cdmBase, false); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#remoteSave(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public UUID remoteSave(IService service, T cdmBase) { + UUID uuid = service.save(cdmBase).getUuid(); + load(cdmBase,false); + return uuid; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#remoteUpdate(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public T remoteUpdate(IService service, T cdmBase) { + T mergedCdmBase = service.merge(cdmBase, true).getMergedEntity(); + return mergedCdmBase; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#isActive() + */ + @Override + public boolean isActive() { + return cdmEntitySessionManager.getActiveSession() == this; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update() + */ + @Override + public void update() { + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getPropertyPaths(java.lang.Object) + */ + @Override + public List getPropertyPaths(Object obj) { + if(sessionOwner == null) { + return null; + } + Map> propertyPathsMap = sessionOwner.getPropertyPathsMap(); + if(propertyPathsMap == null || propertyPathsMap.isEmpty()) { + return null; + } + return propertyPathsMap.get(obj); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addNewCdmEntity(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public void addNewCdmEntity(CdmBase newEntity) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.persistence.dto.MergeResult, boolean) + */ + @Override + public MergeResult load(MergeResult mergeResult, boolean update) { + return mergeResult; + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java new file mode 100644 index 000000000..efe8b7e93 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java @@ -0,0 +1,220 @@ +// $Id$ +/** +* Copyright (C) 2015 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.session.mock; + +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +import net.sf.ehcache.statistics.LiveCacheStatistics; +import eu.etaxonomy.cdm.api.service.IService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; + +/** + * @author cmathew + * @date 29 Jan 2015 + * + */ +public class MockCdmEntitySession implements ICdmEntitySession { + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object) + */ + @Override + public O load(O obj, boolean update) { + return obj; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public T load(T cdmBase, boolean update) { + return cdmBase; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection) + */ + @Override + public Collection load(Collection cdmBaseList, boolean update) { + return cdmBaseList; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#setEntitiesAsLatest() + */ + @Override + public void setEntitiesAsLatest() { + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose() + */ + @Override + public void dispose() { + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#bind() + */ + @Override + public void bind() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public EntityCacherDebugResult debug(T cdmBase) { + + return new EntityCacherDebugResult(); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, eu.etaxonomy.cdm.api.service.IService) + */ + @Override + public T remoteLoad(IService service, UUID uuid) { + return service.load(uuid); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.IService, java.util.UUID, java.util.List) + */ + @Override + public T remoteLoad(IService service, UUID uuid, List propertyPaths) { + return service.load(uuid, propertyPaths); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#save(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public UUID remoteSave(IService service, T cdmBase) { + return service.save(cdmBase).getUuid(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public T remoteUpdate(IService service, T cdmBase) { + return cdmBase; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getOwner() + */ + @Override + public ICdmEntitySessionEnabled getOwner() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getCacheStatistics() + */ + @Override + public LiveCacheStatistics getCacheStatistics() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#isActive() + */ + @Override + public boolean isActive() { + return false; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getRootEntities() + */ + @Override + public List getRootEntities() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List) + */ + @Override + public EntityCacherDebugResult debug(Collection cdmBase) { + + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug() + */ + @Override + public EntityCacherDebugResult debug() { + + return null; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update() + */ + @Override + public void update() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean) + */ + @Override + public UpdateResult load(UpdateResult updateResult, boolean update) { + return updateResult; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#getPropertyPath(java.lang.Class) + */ + @Override + public List getPropertyPaths(Object obj) { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addNewCdmEntity(eu.etaxonomy.cdm.model.common.CdmBase) + */ + @Override + public void addNewCdmEntity(CdmBase newEntity) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(eu.etaxonomy.cdm.persistence.dto.MergeResult, boolean) + */ + @Override + public MergeResult load(MergeResult mergeResult, boolean update) { + return mergeResult; + } + + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java new file mode 100644 index 000000000..263efab59 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java @@ -0,0 +1,146 @@ +package eu.etaxonomy.taxeditor.session.mock; + +import java.util.Collection; + +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver; + + +public class MockCdmEntitySessionManager implements ICdmEntitySessionManager { + + + @Override + public void bind(ICdmEntitySessionEnabled sessionOwner) { + } + + @Override + public T load(T obj, boolean update) { + return obj; + } + + @Override + public T load(T obj, boolean update) { + return obj; + } + + + @Override + public Collection load(Collection cdmBaseList, boolean update) { + return cdmBaseList; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#newSession(eu.etaxonomy.taxeditor.session.ISessionEventListener, boolean) + */ + @Override + public ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive) { + return new MockCdmEntitySession(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getActiveSession() + */ + @Override + public ICdmEntitySession getActiveSession() { + return new MockCdmEntitySession(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions() + */ + @Override + public Collection getSessions() { + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#addSessionObserver(eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver) + */ + @Override + public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver) { + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#isRemoting() + */ + @Override + public boolean isRemoting() { + return false; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#dispose(eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled) + */ + @Override + public void dispose(ICdmEntitySessionEnabled owner) { + + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#disposeAll() + */ + @Override + public void disposeAll() { + + + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#update() + */ + @Override + public void update() { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.api.service.UpdateResult, boolean) + */ + @Override + public UpdateResult load(UpdateResult updateResult, boolean update) { + return updateResult; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#contains(eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled) + */ + @Override + public boolean contains(ICdmEntitySessionEnabled sessionOwner) { + return false; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#bindNullSession(eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled) + */ + @Override + public ICdmEntitySession bindNullSession() { + return new MockCdmEntitySession(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getNullSession() + */ + @Override + public ICdmEntitySession getNullSession() { + return new MockCdmEntitySession(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(eu.etaxonomy.cdm.persistence.dto.MergeResult, boolean) + */ + @Override + public MergeResult load(MergeResult mergeResult, boolean update) { + return mergeResult; + } + +} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java index 1bc42c44f..f2debccfe 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java @@ -26,18 +26,14 @@ package org.hibernate.collection.internal; import java.io.Serializable; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.ListIterator; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; import javax.naming.NamingException; @@ -63,10 +59,11 @@ import org.hibernate.pretty.MessageHelper; import org.hibernate.type.Type; import org.jboss.logging.Logger; -import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; -import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; -import eu.etaxonomy.cdm.api.service.ICommonService; -import eu.etaxonomy.cdm.model.common.PersistentMultiLanguageText; +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException; +import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; /** * Base class implementing {@link org.hibernate.collection.spi.PersistentCollection} @@ -596,26 +593,25 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers * @throws LazyInitializationException if we cannot initialize */ protected final void initialize(final boolean writing) { - // In remoting we are sure that session is null - // both when using property paths and switching off conversations - if(session == null && remoting) { - remoteInitialize(); - } - - if ( initialized ) { - return; - } - - - withTemporarySessionIfNeeded( - new LazyInitializationWork() { - @Override - public Object doWork() { - session.initializeCollection( AbstractPersistentCollection.this, writing ); - return null; - } - } - ); + if ( initialized ) { + return; + } + + // In remoting we are sure that session is null + // both when using property paths and switching off conversations + if(session == null && remoting) { + remoteInitialize(); + } else { + withTemporarySessionIfNeeded( + new LazyInitializationWork() { + @Override + public Object doWork() { + session.initializeCollection( AbstractPersistentCollection.this, writing ); + return null; + } + } + ); + } } private void throwLazyInitializationExceptionIfNotConnected() { @@ -1284,17 +1280,12 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers // readElementExistence(final Object element) // readElementByIndex(final Object index) - private static ICdmApplicationConfiguration configuration; + private static CdmApplicationRemoteConfiguration configuration; private static boolean remoting = false; - public static void setConfiguration(ICdmApplicationConfiguration conf) { + public static void setConfiguration(CdmApplicationRemoteConfiguration conf) { + remoting = true; configuration = conf; - - if(conf instanceof CdmApplicationRemoteController) { - remoting = true; - } else { - remoting = false; - } } @@ -1305,99 +1296,46 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers try { String role = getRole(); String fieldName = role.substring(role.lastIndexOf(".") + 1); - log.info("--> Remote Lazy Initializing " + getRole() + " , key : " + getKey() + " , field : " + fieldName); + log.info("--> Remote Lazy Initializing Collection " + getRole() + " , owner : " + getOwner().getClass() + "/" + getKey() + " , field : " + fieldName); Object owner = getOwner(); - + CdmBase cdmBase; + if(owner instanceof CdmBase) { + cdmBase = (CdmBase)owner; + } else { + throw new HibernateException("Owner of persistent collection is not a cdm entity"); + } if(configuration == null) { throw new HibernateException("CdmApplicationRemoteConfiguration not initialized (null)"); } - ICommonService commonService = configuration.getCommonService(); - if(commonService == null) { + ICachedCommonService cachedCommonService = configuration.getCachedCommonService(); + if(cachedCommonService == null) { throw new HibernateException("commonService not initialized (null)"); } -// PersistentCollection col = commonService.initializeCollection(this); -// afterInitialize(); -// -// Class clazz = getClass(); -// if (clazz != null) { -// CollectionField cf = getCollectionField(col); -// Field field = clazz.getDeclaredField(cf.getFieldName()); -// field.setAccessible(true); -// field.set(this, cf.getCollection()); -// } - } catch (Exception ex) { - log.warn(ex.getMessage()); - } - log.warn("This code is invalid"); - } - } - - - private CollectionField getCollectionField(PersistentCollection pc) { - if(pc != null) { - if(pc instanceof PersistentSet) { - return new CollectionField(new HashSet((Set)pc), "set"); - } - if(pc instanceof PersistentSortedSet) { - return new CollectionField(new TreeSet((Set)pc), "set"); - } - if(pc instanceof PersistentList) { - return new CollectionField(new ArrayList((List)pc), "list"); - } - if(pc instanceof PersistentMap || pc instanceof PersistentMultiLanguageText) { - return new CollectionField(new HashMap((Map)pc), "map"); - } - if(pc instanceof PersistentSortedMap) { - return new CollectionField(new TreeMap((Map)pc), "map"); - } - } - return null; - } + //Object obj = ProxyUtils.deproxy(cachedCommonService.initializeCollection(this)); + Object obj = ProxyUtils.deproxy(cachedCommonService.initializeCollection(cdmBase.getUuid(), fieldName)); + if(ProxyUtils.isProxy(obj)) { + throw new HibernateException("Persistent Collection initialized but is still a proxy"); + } + afterInitialize(); + + Class clazz = getClass(); + if (clazz != null) { + //CollectionField cf = cachedCommonService.getCollectionField(col); + //cachedCommonService.updatePersistentCollection(cf); + Object collectionType = ProxyUtils.getCollectionType(obj); + Field field = clazz.getDeclaredField(collectionType.toString()); + field.setAccessible(true); + field.set(this, obj); + ProxyUtils.setRoleValueInOwner(owner, role, obj); - private String getCollectionFieldName(PersistentCollection pc) { - if(pc != null) { - if(pc instanceof PersistentSet || pc instanceof PersistentSortedSet) { - return "set"; - } - if(pc instanceof PersistentList) { - return "list"; - } - if(pc instanceof PersistentMap || pc instanceof PersistentMultiLanguageText) { - return "map"; + } + } catch (Exception ex) { + throw new CdmEagerLoadingException(ex); } } - return null; - } - - private class CollectionField { - private final Object col; - private final String fieldName; - public CollectionField(Object col, String fieldName) { - this.col = col; - this.fieldName = fieldName; - } - - public Object getCollection() { - return this.col; - } - - public String getFieldName() { - return this.fieldName; - } - } - - public static boolean isInitialized(List list) { - return ((AbstractPersistentCollection)list).initialized; } - public static boolean isInitialized(Map map) { - return ((AbstractPersistentCollection)map).initialized; - } - - public static boolean isInitialized(Set set) { - return ((AbstractPersistentCollection)set).initialized; - } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java index 4d2db1551..591594804 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java @@ -24,7 +24,6 @@ package org.hibernate.proxy; import java.io.Serializable; -import java.util.Set; import javax.naming.NamingException; @@ -33,21 +32,17 @@ import org.hibernate.LazyInitializationException; import org.hibernate.Session; import org.hibernate.SessionException; import org.hibernate.TransientObjectException; -import org.hibernate.collection.internal.AbstractPersistentCollection; import org.hibernate.engine.spi.EntityKey; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.internal.SessionFactoryRegistry; import org.hibernate.persister.entity.EntityPersister; import org.jboss.logging.Logger; -import org.springframework.beans.factory.annotation.Autowire; -import org.springframework.beans.factory.annotation.Configurable; -import org.springframework.stereotype.Component; -import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; -import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; -import eu.etaxonomy.cdm.api.service.ICommonService; +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; /** * Convenience base class for lazy initialization handlers. Centralizes the basic plumbing of doing lazy @@ -56,8 +51,6 @@ import eu.etaxonomy.cdm.model.common.CdmBase; * * @author Gavin King */ -@Component -@Configurable(dependencyCheck = true,autowire = Autowire.BY_TYPE) public abstract class AbstractLazyInitializer implements LazyInitializer { private static final Logger log = Logger.getLogger( AbstractLazyInitializer.class ); @@ -207,14 +200,14 @@ public abstract class AbstractLazyInitializer implements LazyInitializer { SessionFactoryImplementor sf = (SessionFactoryImplementor) SessionFactoryRegistry.INSTANCE.getSessionFactory( sessionFactoryUuid ); SessionImplementor session = (SessionImplementor) sf.openSession(); - + // TODO: On the next major release, add an // 'isJTA' or 'getTransactionFactory' method to Session. boolean isJTA = session.getTransactionCoordinator() .getTransactionContext().getTransactionEnvironment() .getTransactionFactory() .compatibleWithJtaSynchronization(); - + if ( !isJTA ) { // Explicitly handle the transactions only if we're not in // a JTA environment. A lazy loading temporary session can @@ -422,48 +415,46 @@ public abstract class AbstractLazyInitializer implements LazyInitializer { public void setUnwrap(boolean unwrap) { this.unwrap = unwrap; } - + /** Below is section of code which makes remote service calls */ - - private static ICdmApplicationConfiguration configuration; + + private static CdmApplicationRemoteConfiguration configuration; private static boolean remoting = false; - - public static void setConfiguration(ICdmApplicationConfiguration conf) { - configuration = conf; - - if(conf instanceof CdmApplicationRemoteController) { - remoting = true; - } else { - remoting = false; - } + + public static void setConfiguration(CdmApplicationRemoteConfiguration conf) { + remoting = true; + configuration = conf; } - - - private void remoteInitialize() { - - if(!initialized) { + + + private void remoteInitialize() { + + if(!initialized) { int classid = ((Integer)getIdentifier()).intValue(); - log.debug("--> Remote Lazy Initializing" + getEntityName() + " with id " + classid); + log.info("--> Remote Lazy Initializing Object " + getEntityName() + " with id " + classid); Class clazz; try { - clazz = (Class) Class.forName(getEntityName()); + clazz = Class.forName(getEntityName()); } catch (ClassNotFoundException e) { throw new HibernateException("Class for " + getEntityName() + " not found", e); } if(configuration == null) { throw new HibernateException("CdmApplicationRemoteConfiguration not initialized (null)"); } - ICommonService commonService = configuration.getCommonService(); - if(commonService == null) { + ICachedCommonService cachedCommonService = configuration.getCachedCommonService(); + if(cachedCommonService == null) { throw new HibernateException("commonService not initialized (null)"); } - - CdmBase cdmBase = CdmBase.deproxy(commonService.find(clazz,classid),clazz); + + CdmBase cdmBase = cachedCommonService.find(clazz,classid); + if(ProxyUtils.isProxy(cdmBase)) { + throw new HibernateException("CdmBase Object initialized but is still a proxy"); + } setImplementation(cdmBase); - + } } - + public static boolean isInitialized(AbstractLazyInitializer obj) { return obj.initialized; } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml index e3c0f9fd8..833ee86cd 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml @@ -1,479 +1,635 @@ - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service - - - eu.etaxonomy.cdm.api.service.IAgentService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service - - - eu.etaxonomy.cdm.api.service.IAnnotationService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service - - - eu.etaxonomy.cdm.api.service.IAuditEventService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service - - - eu.etaxonomy.cdm.api.service.IClassificationService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service - - - eu.etaxonomy.cdm.api.service.ICollectionService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service - - - eu.etaxonomy.cdm.api.service.ICommonService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service - - - eu.etaxonomy.cdm.api.service.IDescriptionService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service - - - eu.etaxonomy.cdm.ext.geo.IEditGeoService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service - - - eu.etaxonomy.cdm.api.service.IFeatureNodeService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service - - - eu.etaxonomy.cdm.api.service.IFeatureTreeService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service - - - eu.etaxonomy.cdm.api.service.IGroupService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service - - - eu.etaxonomy.cdm.api.service.IIdentificationKeyService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service - - - eu.etaxonomy.cdm.api.service.ILocationService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service - - - eu.etaxonomy.cdm.api.service.IMarkerService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service - - - eu.etaxonomy.cdm.api.service.IMediaService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service - - - eu.etaxonomy.cdm.api.service.INameService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service - - - eu.etaxonomy.cdm.api.service.IOccurrenceService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service - - - eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service - - - eu.etaxonomy.cdm.api.service.IPolytomousKeyService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service - - - eu.etaxonomy.cdm.api.service.IReferenceService - - - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service - - - eu.etaxonomy.cdm.api.service.ITaxonNodeService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service - - - eu.etaxonomy.cdm.api.service.ITaxonService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service - - - eu.etaxonomy.cdm.api.service.ITermService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/user.service - - - eu.etaxonomy.cdm.api.service.IUserService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service - - - eu.etaxonomy.cdm.api.service.IVocabularyService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service - - - eu.etaxonomy.cdm.api.service.IWorkingSetService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service - - - eu.etaxonomy.cdm.api.service.IGrantedAuthorityService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/database.service - - - eu.etaxonomy.cdm.api.service.IDatabaseService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service - - - eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service - - - eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service - - - eu.etaxonomy.cdm.api.service.lsid.LSIDDataService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/authenticationManager.service - - - org.springframework.security.authentication.AuthenticationManager - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service - - - eu.etaxonomy.cdm.api.service.molecular.IPrimerService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service - - - eu.etaxonomy.cdm.api.service.molecular.IAmplificationService - - - - - - - - - http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service - - - eu.etaxonomy.cdm.api.service.molecular.ISequenceService - - - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" + xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service + + + + eu.etaxonomy.cdm.api.service.IAgentService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service + + + + eu.etaxonomy.cdm.api.service.IAnnotationService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service + + + + eu.etaxonomy.cdm.api.service.IAuditEventService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service + + + + eu.etaxonomy.cdm.api.service.IClassificationService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service + + + + eu.etaxonomy.cdm.api.service.ICollectionService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service + + + + eu.etaxonomy.cdm.api.service.ICommonService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service + + + + eu.etaxonomy.cdm.api.service.IDescriptionService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service + + + + eu.etaxonomy.cdm.ext.geo.IEditGeoService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service + + + + eu.etaxonomy.cdm.api.service.IFeatureNodeService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service + + + + eu.etaxonomy.cdm.api.service.IFeatureTreeService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service + + + + eu.etaxonomy.cdm.api.service.IGroupService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service + + + + eu.etaxonomy.cdm.api.service.IIdentificationKeyService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service + + + + eu.etaxonomy.cdm.api.service.ILocationService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service + + + + eu.etaxonomy.cdm.api.service.IMarkerService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service + + + + eu.etaxonomy.cdm.api.service.IMediaService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service + + + + eu.etaxonomy.cdm.api.service.INameService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service + + + + eu.etaxonomy.cdm.api.service.IOccurrenceService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service + + + + eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service + + + + eu.etaxonomy.cdm.api.service.IPolytomousKeyService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service + + + + eu.etaxonomy.cdm.api.service.IReferenceService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service + + + + eu.etaxonomy.cdm.api.service.ITaxonNodeService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service + + + + eu.etaxonomy.cdm.api.service.ITaxonService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service + + + + eu.etaxonomy.cdm.api.service.ITermService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting-public/user.service + + + + eu.etaxonomy.cdm.api.service.IUserService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service + + + + eu.etaxonomy.cdm.api.service.IVocabularyService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service + + + + eu.etaxonomy.cdm.api.service.IWorkingSetService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service + + + + eu.etaxonomy.cdm.api.service.IGrantedAuthorityService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/database.service + + + + eu.etaxonomy.cdm.api.service.IDatabaseService + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service + + + + eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service + + + + eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service + + + + eu.etaxonomy.cdm.api.service.lsid.LSIDDataService + + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service + + + + eu.etaxonomy.cdm.api.service.molecular.IPrimerService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service + + + + eu.etaxonomy.cdm.api.service.molecular.IAmplificationService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service + + + + eu.etaxonomy.cdm.api.service.molecular.ISequenceService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityvalidation.service + + + + eu.etaxonomy.cdm.api.service.IEntityValidationService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityconstraintviolation.service + + + + eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/io.service + + + + eu.etaxonomy.cdm.io.service.IIOService + + + + + + + + + + + + http://${remoteServer}:${remotePort}/${remoteContext}/remoting/test.service + + + + eu.etaxonomy.cdm.api.service.ITestService + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml index 524d83c4d..f09d0c992 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml @@ -1,31 +1,37 @@ - - - - + + + + - - - - - - + + + + + + + - - - - - + + + + + - + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml new file mode 100644 index 000000000..e48ff8a30 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml @@ -0,0 +1,213 @@ + + + + + + + after_transaction + + + + org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml index e67e9b453..604b197fb 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml @@ -1,40 +1,81 @@ - - - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" + xmlns:tx="http://www.springframework.org/schema/tx" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_persistence_security.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_persistence_security.xml deleted file mode 100644 index d70bca5ea..000000000 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_persistence_security.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_services_security.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_services_security.xml deleted file mode 100644 index 6a09db422..000000000 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remoting_services_security.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.xml new file mode 100644 index 000000000..14b670b47 --- /dev/null +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/test/resources/eu/etaxonomy/cdm/datasources/cdm.datasources.xml b/eu.etaxonomy.taxeditor.cdmlib/src/test/resources/eu/etaxonomy/cdm/datasources/cdm.datasources.xml deleted file mode 100644 index f306cad2f..000000000 --- a/eu.etaxonomy.taxeditor.cdmlib/src/test/resources/eu/etaxonomy/cdm/datasources/cdm.datasources.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.editor/.classpath b/eu.etaxonomy.taxeditor.editor/.classpath index 1389dff1f..13a030a92 100644 --- a/eu.etaxonomy.taxeditor.editor/.classpath +++ b/eu.etaxonomy.taxeditor.editor/.classpath @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF index 0a57992aa..370188dc7 100644 --- a/eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Editor Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.editor;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin Bundle-Vendor: %Bundle-Vendor.0 Bundle-Localization: OSGI-INF/l10n/plugin @@ -12,8 +12,10 @@ Export-Package: eu.etaxonomy.taxeditor.editor, eu.etaxonomy.taxeditor.editor.key.polytomous, eu.etaxonomy.taxeditor.editor.name, eu.etaxonomy.taxeditor.editor.name.handler, + eu.etaxonomy.taxeditor.editor.name.operation, eu.etaxonomy.taxeditor.editor.view.concept, eu.etaxonomy.taxeditor.editor.view.dataimport, + eu.etaxonomy.taxeditor.editor.view.derivate, eu.etaxonomy.taxeditor.editor.view.descriptive, eu.etaxonomy.taxeditor.editor.view.media, eu.etaxonomy.taxeditor.editor.view.uses @@ -27,7 +29,7 @@ Require-Bundle: org.eclipse.ui, org.eclipse.zest.layouts, eu.etaxonomy.taxeditor.cdmlib, org.eclipse.ui.ide -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.core.databinding.beans, org.eclipse.core.databinding.observable.list, diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages.properties index 9b2fa8319..40a9a442b 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages.properties @@ -1,8 +1,8 @@ CreateDerivateContextMenu_ADD=Add... CreateDerivateContextMenu_DNA_SAMPLE=DNA Sample CreateDerivateContextMenu_MEDIA=Media... -CreateDerivateContextMenu_MEDIA_EXISTING=Media Specimen with existing media -CreateDerivateContextMenu_MEDIA_SPECIMEN=Media Specimen +CreateDerivateContextMenu_MEDIA_EXISTING=Use existing media item +CreateDerivateContextMenu_MEDIA_SPECIMEN=Media item CreateDerivateContextMenu_NO_CHILD_DERIVATE=No child derivatives CreateDerivateContextMenu_SEQUENCE=Consensus Sequence CreateDerivateContextMenu_SINGLE_READ=Single Read @@ -35,3 +35,7 @@ OpenDerivateEditorForTaxonHandler_COULD_NOT_OPEN_EDITOR=Could not open Derivativ OpenDerivateEditorForTaxonHandler_FAILED_TO_OPEN=Failed to open Editor OpenDerivateEditorForTaxonHandler_HIERARCHY_CORRUPTED=The derivative hierarchy is corrupted\! OpenDerivateEditorForTaxonHandler_NO_DERIVATIVES_FOUND=No Derivatives found + +DeleteTaxonBaseHandler_CONFIRM_DELETION=Confirm Deletion +DeleteTaxonBaseHandler_ELEMENT_MUST_BE_SYNONYM_MISAPP_CONCEPT=Element has to be Synonym, Misapplication or Concept +DeleteTaxonBaseHandler_REALLY_DELETE_TAXON=Are you sure you want to delete the selected taxon? diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages_de.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages_de.properties index 2fc5cfc61..cf767cd8c 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages_de.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/messages_de.properties @@ -1,8 +1,8 @@ CreateDerivateContextMenu_ADD=Hinzufügen... -CreateDerivateContextMenu_DNA_SAMPLE=DNA Sample +CreateDerivateContextMenu_DNA_SAMPLE=DNA Probe CreateDerivateContextMenu_MEDIA=Media... -CreateDerivateContextMenu_MEDIA_EXISTING=Media Specimen mit vorhandender Mediadatei -CreateDerivateContextMenu_MEDIA_SPECIMEN=Media Specimen +CreateDerivateContextMenu_MEDIA_EXISTING=Vorhandendes Medienobjekt verwenden +CreateDerivateContextMenu_MEDIA_SPECIMEN=Medienobjekt CreateDerivateContextMenu_NO_CHILD_DERIVATE=Keine Kind-Derivate CreateDerivateContextMenu_SEQUENCE=Konsensussequenz CreateDerivateContextMenu_SINGLE_READ=Single Read @@ -35,3 +35,7 @@ OpenDerivateEditorForTaxonHandler_COULD_NOT_OPEN_EDITOR=Konnte Derivat-Editor ni OpenDerivateEditorForTaxonHandler_FAILED_TO_OPEN=Öffnen des Editors fehlgeschlagen OpenDerivateEditorForTaxonHandler_HIERARCHY_CORRUPTED=Die Derivathierarchie ist korrumpiert\! OpenDerivateEditorForTaxonHandler_NO_DERIVATIVES_FOUND=Keine Derivate gefunden + +DeleteTaxonBaseHandler_CONFIRM_DELETION=Löschen bestätigen +DeleteTaxonBaseHandler_ELEMENT_MUST_BE_SYNONYM_MISAPP_CONCEPT=Element muss Synonym, Misapplication oder Konzept sein +DeleteTaxonBaseHandler_REALLY_DELETE_TAXON=Wollen Sie wirklich das ausgewählte Taxon löschen? diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties index 8281fca55..d6cc82eab 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin.properties @@ -101,7 +101,6 @@ command.name.23 = New Reference command.name.24 = New Name command.name.25 = New Team command.name.26 = New Person -command.name.27 = New Specimen category.name.5 = -- Polytomous Keys command.name.28 = New Child Node command.name.29 = New Sibling Node @@ -161,4 +160,5 @@ commandParameter.name = taxonUUID Bundle-Name = Editor Bundle command.name.48 = delete command.name.49 = delete -command.name.50 = delete \ No newline at end of file +command.name.50 = delete +command.name.51 = delete diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties index a4d096a11..c571435e1 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_de.properties @@ -101,7 +101,6 @@ command.name.23 = Neue Referenz command.name.24 = Neuer Name command.name.25 = Neues Team command.name.26 = Neue Person -command.name.27 = Neuer Beleg category.name.5 = -- Polytomer Bestimmungsschl\u00fcssel command.name.28 = Neue Kinderknoten command.name.29 = Neuer Geschwisterknoten diff --git a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_en.properties b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_en.properties index 17a5b0490..80f1ca7e6 100644 --- a/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_en.properties +++ b/eu.etaxonomy.taxeditor.editor/OSGI-INF/l10n/plugin_en.properties @@ -100,7 +100,6 @@ command.name.23 = New Reference command.name.24 = New Name command.name.25 = New Team command.name.26 = New Person -command.name.27 = New Specimen category.name.5 = -- Polytomous Keys command.name.28 = New Child Node command.name.29 = New Sibling Node diff --git a/eu.etaxonomy.taxeditor.editor/icons/synced.gif b/eu.etaxonomy.taxeditor.editor/icons/synced.gif new file mode 100644 index 000000000..870934b69 Binary files /dev/null and b/eu.etaxonomy.taxeditor.editor/icons/synced.gif differ diff --git a/eu.etaxonomy.taxeditor.editor/plugin.xml b/eu.etaxonomy.taxeditor.editor/plugin.xml index 66def4730..7cf094832 100644 --- a/eu.etaxonomy.taxeditor.editor/plugin.xml +++ b/eu.etaxonomy.taxeditor.editor/plugin.xml @@ -58,13 +58,6 @@ id="eu.etaxonomy.taxeditor.editor.group.authority" name="%editor.name.4"> - - + + @@ -242,31 +242,50 @@ commandId="eu.etaxonomy.taxeditor.editor.command.new.name" label="%command.label.46" style="push"> + + + + + + + + + + + + + + + + - - @@ -279,10 +298,6 @@ - - + + + + + + + + + + + + + + + checkEnabled="true"> + + + + + + + + + + + + + definitionId="isCdmStoreConnected"> + + + + + + + + + + + + + + @@ -641,29 +724,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + locationURI="toolbar:org.eclipse.ui.main.toolbar?after=eu.etaxonomy.taxeditor.navigation.search.toolbar"> + + + + + + + + + + + class="eu.etaxonomy.taxeditor.editor.view.descriptive.handler.ToggleShowOnlyIndividualAssociationsHandler" + commandId="eu.etaxonomy.taxeditor.editor.handler.showOnlyIndividualAssociations"> + + - - - - + + + class="eu.etaxonomy.taxeditor.editor.key.polytomous.handler.RemotingCreateSiblingPolytomousKeyNodeHandler" + commandId="eu.etaxonomy.taxeditor.key.polytomous.command.new.sibling"> + + + + - - @@ -1384,6 +1421,12 @@ id="eu.etaxonomy.taxeditor.editor.view.concept.command.open" name="%command.name.33"> + + @@ -1393,11 +1436,6 @@ defaultHandler="eu.etaxonomy.taxeditor.editor.group.authority.handler.EditCdmAuthoritiesHandler" id="eu.etaxonomy.taxeditor.group.cdmauthorities.edit" name="%command.name.34"> - - - - + + + + + + + + + + + + + + - diff --git a/eu.etaxonomy.taxeditor.editor/pom.xml b/eu.etaxonomy.taxeditor.editor/pom.xml index 06d192752..b8356764d 100644 --- a/eu.etaxonomy.taxeditor.editor/pom.xml +++ b/eu.etaxonomy.taxeditor.editor/pom.xml @@ -1,9 +1,10 @@ - + eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 @@ -11,7 +12,7 @@ eclipse-plugin Editor Bundle - + http://dev.e-taxonomy.eu/trac/wiki/TaxonomicEditorEditorBundle diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java index e87142c40..7955c4fe5 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/EditorUtil.java @@ -24,14 +24,17 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.common.ITreeNode; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; import eu.etaxonomy.cdm.model.occurrence.FieldUnit; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditor; import eu.etaxonomy.taxeditor.editor.group.authority.CdmAuthorityEditorInput; import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin; @@ -73,7 +76,14 @@ public class EditorUtil extends AbstractUtility { */ private static IEditorPart open(final IEditorInput input, final String editorId) throws PartInitException { - return getActivePage().openEditor(input, editorId); + IEditorPart editor = getActivePage().openEditor(input, editorId); + if(input != null && + editor.getEditorInput() != null && + input != editor.getEditorInput() && + input instanceof CdmEntitySessionInput) { + ((CdmEntitySessionInput)input).dispose(); + } + return editor; } /** @@ -386,6 +396,12 @@ public class EditorUtil extends AbstractUtility { open(input); } +// public static void openPolytomousKeyEditor(UUID polytomousKeyUuid, String name) +// throws Exception { +// PolytomousKeyEditorInput input = new PolytomousKeyEditorInput(polytomousKeyUuid, name); +// open(input); +// } + public static void openCdmAuthorities(UUID groupUuid) throws Exception { CdmAuthorityEditorInput input = CdmAuthorityEditorInput.NewInstance(groupUuid); @@ -416,20 +432,6 @@ public class EditorUtil extends AbstractUtility { } } - /** - * Iterates recursively over all originals having the given specimen as a derivate. - * If a {@link FieldUnit} is found it is returned - * @param specimen the start element for which the originals are iterated recursively - * @return the FieldUnit if found, null otherwise - */ - public static FieldUnit getFieldUnit(SpecimenOrObservationBase specimen){ - SpecimenOrObservationBase topMostDerivate = getTopMostDerivate(specimen); - if(topMostDerivate instanceof FieldUnit) { - return (FieldUnit) topMostDerivate; - } - return null; - } - /** * If the current selection is a single {@link TreeNode} it will be returned. * @param selection the selection to check @@ -455,4 +457,28 @@ public class EditorUtil extends AbstractUtility { openTaxonBase(((TaxonBase) object).getUuid()); } } + + public static boolean closeObsoleteEditor(TaxonNode taxonNode, IWorkbenchPage activePage){ + boolean result = true; + for (IEditorReference ref : activePage.getEditorReferences()) { + try { + String treeIndex = ((ITreeNode)taxonNode).treeIndex(); + + + IEditorInput input = ref.getEditorInput(); + if (input instanceof TaxonEditorInput) { + TaxonNode node = ((TaxonEditorInput) input).getTaxonNode(); + //if node is a child of taxonNode then close the editor + if( ((ITreeNode) node).treeIndex().startsWith(treeIndex)){ + //if (taxonNode.equals(node)) { + result &= activePage.closeEditor(ref.getEditor(false), true); + + } + } + } catch (PartInitException e) { + continue; + } + } + return result; + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/Messages.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/Messages.java index 34684d15d..5a3fd53cc 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/Messages.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/Messages.java @@ -32,6 +32,9 @@ public class Messages extends NLS { public static String DeleteDerivateOperation_CONFIRM; public static String DeleteDerivateOperation_DELETE_FAILED; public static String DeleteDerivateOperation_REALLY_DELETE; + public static String DeleteTaxonBaseHandler_CONFIRM_DELETION; + public static String DeleteTaxonBaseHandler_ELEMENT_MUST_BE_SYNONYM_MISAPP_CONCEPT; + public static String DeleteTaxonBaseHandler_REALLY_DELETE_TAXON; public static String DerivateDropListener_MOVE_TO; public static String DerivateView_DERIVATIVE_EDITOR; public static String DerivateView_SAVING_HIERARCHY; diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java index 74e264dc5..e58a897b2 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java @@ -54,72 +54,79 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; * @version 1.0 */ public class MultiPageTaxonEditor extends FormEditor implements - IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled, - IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia { - - /** Constant ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked} */ - public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon"; - - private boolean dirty; - - private ConversationHolder conversation; - private IDataChangeBehavior dataChangeBehavior; - private IUndoContext undoContext; - - private TaxonEditorInput input; - - /** - *

- * Constructor for MultiPageTaxonEditor. - *

- */ - public MultiPageTaxonEditor() { - super(); - undoContext = new UndoContext(); - } - - /** {@inheritDoc} */ - @Override - public void dispose() { - conversation.unregisterForDataStoreChanges(this); - conversation.close(); - super.dispose(); - } - - /** {@inheritDoc} */ - @Override - protected void addPages() { - input = (TaxonEditorInput) getEditorInput(); - conversation = input.getConversationHolder(); - conversation.registerForDataStoreChanges(this); - - try { - addPage(Page.NAME.getIndex(), new TaxonNameEditor(this), - getEditorInput()); - // setPageText(Page.NAME.getIndex(), Page.NAME.getTitle()); - - // TODO lazy create - // addPage(Page.DESCRIPTIVE.getIndex(), new - // TaxonDescriptionTreeEditor(this), getEditorInput()); - // setPageText(Page.DESCRIPTIVE.getIndex(), - // Page.DESCRIPTIVE.getTitle()); - - // EditorUtil.showPropertySheet(); - - } catch (PartInitException e) { - MessagingUtils.error(getClass(), e); - } - } - - /** {@inheritDoc} */ - @Override - public void doSave(IProgressMonitor monitor) { - monitor.beginTask("Saving Editor", 4); - try { - if (!conversation.isBound()) { - conversation.bind(); - } - monitor.worked(1); +IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled, +IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia { + + /** Constant ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked} */ + public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon"; + + private boolean dirty; + + private ConversationHolder conversation; + private IDataChangeBehavior dataChangeBehavior; + private IUndoContext undoContext; + + private TaxonEditorInput input; + + /** + *

+ * Constructor for MultiPageTaxonEditor. + *

+ */ + public MultiPageTaxonEditor() { + super(); + undoContext = new UndoContext(); + + } + + /** {@inheritDoc} */ + @Override + public void dispose() { + input.dispose(); + conversation.unregisterForDataStoreChanges(this); + conversation.close(); + super.dispose(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.forms.editor.FormEditor#addPages() + */ + /** {@inheritDoc} */ + @Override + protected void addPages() { + input = (TaxonEditorInput) getEditorInput(); + conversation = input.getConversationHolder(); + conversation.registerForDataStoreChanges(this); + + try { + addPage(Page.NAME.getIndex(), new TaxonNameEditor(this), + getEditorInput()); + // setPageText(Page.NAME.getIndex(), Page.NAME.getTitle()); + + // TODO lazy create + // addPage(Page.DESCRIPTIVE.getIndex(), new + // TaxonDescriptionTreeEditor(this), getEditorInput()); + // setPageText(Page.DESCRIPTIVE.getIndex(), + // Page.DESCRIPTIVE.getTitle()); + + // EditorUtil.showPropertySheet(); + + } catch (PartInitException e) { + MessagingUtils.error(getClass(), e); + } + } + + /** {@inheritDoc} */ + @Override + public void doSave(IProgressMonitor monitor) { + monitor.beginTask("Saving Editor", 4); + try { + if (!conversation.isBound()) { + conversation.bind(); + } + monitor.worked(1); for (IEditorPart editorPage : getPages()) { if (editorPage instanceof TaxonNameEditor) { @@ -135,9 +142,11 @@ public class MultiPageTaxonEditor extends FormEditor implements monitor.worked(1); } - // commit the conversation and start a new transaction immediately - conversation.commit(true); - monitor.worked(1); + // commit the conversation and start a new transaction immediately + + input.merge(); + conversation.commit(true); + monitor.worked(1); this.setDirty(false); monitor.worked(1); @@ -148,119 +157,143 @@ public class MultiPageTaxonEditor extends FormEditor implements } finally { monitor.done(); } - } - - private void disableEditor(boolean isOnError) { - for (IMultiPageTaxonEditorPage editorPage : getPages()) { - if(isOnError){ - editorPage.setOnError(); - }else { - editorPage.setDisabled(); - } - } - conversation.unregisterForDataStoreChanges(this); - conversation.close(); - setDirty(false); - } - - private void setDirty(boolean dirty) { - this.dirty = dirty; - firePropertyChange(PROP_DIRTY); - } - - @Override + } + + private void disableEditor(boolean isOnError) { + for (IMultiPageTaxonEditorPage editorPage : getPages()) { + if(isOnError){ + editorPage.setOnError(); + }else { + editorPage.setDisabled(); + } + } + + conversation.unregisterForDataStoreChanges(this); + conversation.close(); + setDirty(false); + } + + private void setDirty(boolean dirty) { + this.dirty = dirty; + firePropertyChange(PROP_DIRTY); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty() + */ + /** + *

+ * isDirty + *

+ * + * @return a boolean. + */ + @Override public boolean isDirty() { - return dirty; - } - - /** {@inheritDoc} */ - @Override - public void editorDirtyStateChanged() { - dirty = true; - super.editorDirtyStateChanged(); - } - - /** - * {@inheritDoc} - * - * Checks whether nested editors are calling - * firePropertyChange(PROP_DIRTY) to signal an edit has taken - * place before passing property change along to - * super.handlePropertyChange(int propertyId). - */ - @Override + return dirty; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged() + */ + /** {@inheritDoc} */ + @Override + public void editorDirtyStateChanged() { + dirty = true; + super.editorDirtyStateChanged(); + } + + /** + * {@inheritDoc} + * + * Checks whether nested editors are calling + * firePropertyChange(PROP_DIRTY) to signal an edit has taken + * place before passing property change along to + * super.handlePropertyChange(int propertyId). + */ + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int) + */ + @Override protected void handlePropertyChange(int propertyId) { - if (propertyId == PROP_DIRTY) { - setDirty(true); - } - super.handlePropertyChange(propertyId); - } - - /** {@inheritDoc} */ - @Override - public void doSaveAs() { - } - - /** {@inheritDoc} */ - @Override - public boolean isSaveAsAllowed() { - return false; - } - - /** {@inheritDoc} */ - @Override - public void init(IEditorSite site, IEditorInput input) - throws PartInitException { - - if (!(input instanceof TaxonEditorInput)) { + if (propertyId == PROP_DIRTY) { + setDirty(true); + } + super.handlePropertyChange(propertyId); + } + + /** {@inheritDoc} */ + @Override + public void doSaveAs() { + } + + /** {@inheritDoc} */ + @Override + public boolean isSaveAsAllowed() { + return false; + } + + /** {@inheritDoc} */ + @Override + public void init(IEditorSite site, IEditorInput input) + throws PartInitException { + + if (!(input instanceof TaxonEditorInput)) { throw new PartInitException( - "Invalid Input: Must be TaxonEditorInput"); + "Invalid Input: Must be TaxonEditorInput"); + } + + this.input = (TaxonEditorInput) input; + + + // try { + // // Listen for name changes, + // // change tab for this taxon editor accordingly + // getTaxon().addPropertyChangeListener("name", + // new PropertyChangeListener() { + // public void propertyChange(PropertyChangeEvent e) { + // setPartName(); + // } + // }); + // } catch (NullPointerException e) { + // EditorUtil.warn(getClass(), + // "Caught an NPE while initing an editor. This is most " + + // "likely due to the unsuccesful attempt to restore the former " + + // "state of the application. We ignore this because the workbench " + + // "will simply be reset."); + // } + setPartName(); + + super.init(site, input); + } + + /** + * Calls MultiPageEditorPart.setPartName(String partName) with + * text appropriate to the state of the taxon: any taxon that has been saved + * will by necessity have a name to display; a new taxon should display + * "New taxon" in the editor tab. + */ + protected void setPartName() { + + String partName = null; + TaxonNameBase name = getTaxon().getName(); + + if (name != null) { + partName = name.getTitleCache(); + } + + if (partName == null || partName.equals("")) { + partName = ("New taxon"); } - this.input = (TaxonEditorInput) input; - - // try { - // // Listen for name changes, - // // change tab for this taxon editor accordingly - // getTaxon().addPropertyChangeListener("name", - // new PropertyChangeListener() { - // public void propertyChange(PropertyChangeEvent e) { - // setPartName(); - // } - // }); - // } catch (NullPointerException e) { - // EditorUtil.warn(getClass(), - // "Caught an NPE while initing an editor. This is most " + - // "likely due to the unsuccesful attempt to restore the former " + - // "state of the application. We ignore this because the workbench " + - // "will simply be reset."); - // } - setPartName(); - - super.init(site, input); - } - - /** - * Calls MultiPageEditorPart.setPartName(String partName) with - * text appropriate to the state of the taxon: any taxon that has been saved - * will by necessity have a name to display; a new taxon should display - * "New taxon" in the editor tab. - */ - protected void setPartName() { - - String partName = null; - TaxonNameBase name = getTaxon().getName(); - - if (name != null) { - partName = name.getTitleCache(); - } - - if (partName == null || partName.equals("")) { - partName = ("New taxon"); - } - - setPartName(partName); - } + setPartName(partName); + } /** * {@inheritDoc} @@ -285,48 +318,100 @@ public class MultiPageTaxonEditor extends FormEditor implements setPartName(); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty() + */ @Override public void forceDirty() { changed(null); } - /** - * The accepted taxon that is the input for this editor - * - * @return the accepted taxon - */ - public Taxon getTaxon() { - return input.getTaxon(); - } + /** + * The accepted taxon that is the input for this editor + * + * @return the accepted taxon + */ + public Taxon getTaxon() { + return input.getTaxon(); + } - @Override + /* + * (non-Javadoc) + * + * @see + * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder + * () + */ + /** + *

+ * getConversationHolder + *

+ * + * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} + * object. + */ + @Override public ConversationHolder getConversationHolder() { - return conversation; - } - - public void setConversationHolder(ConversationHolder conversation) { - this.conversation = conversation; - } - - public IUndoContext getUndoContext() { - return undoContext; - } - - public void setUndoContext(IUndoContext undoContext) { - this.undoContext = undoContext; - } - - /** {@inheritDoc} */ - @Override - public void setFocus() { - // logger.warn("Setting focus to editor"); - // bind the conversation - getConversationHolder().bind(); - // pass focus to the active editor page - getActiveEditor().setFocus(); - } - - /** {@inheritDoc} */ + return conversation; + } + + /** + *

+ * setConversationHolder + *

+ * + * @param conversation + * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} + * object. + */ + public void setConversationHolder(ConversationHolder conversation) { + this.conversation = conversation; + } + + /** + *

+ * Getter for the field undoContext. + *

+ * + * @return a {@link org.eclipse.core.commands.operations.IUndoContext} + * object. + */ + public IUndoContext getUndoContext() { + return undoContext; + } + + /** + *

+ * Setter for the field undoContext. + *

+ * + * @param undoContext + * a {@link org.eclipse.core.commands.operations.IUndoContext} + * object. + */ + public void setUndoContext(IUndoContext undoContext) { + this.undoContext = undoContext; + } + + /** {@inheritDoc} */ + @Override + public void setFocus() { + // logger.warn("Setting focus to editor"); + // bind the conversation + getConversationHolder().bind(); + input.bind(); + // pass focus to the active editor page + getActiveEditor().setFocus(); + } + + /* + * (non-Javadoc) + * + * @see + * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu + * .etaxonomy.cdm.persistence.hibernate.CdmCrudEvent) + */ + /** {@inheritDoc} */ @Override public void update(CdmDataChangeMap events) { if (dataChangeBehavior == null) { @@ -336,6 +421,13 @@ public class MultiPageTaxonEditor extends FormEditor implements DataChangeBridge.handleDataChange(events, dataChangeBehavior); } + /* + * (non-Javadoc) + * + * @see + * eu.etaxonomy.taxeditor.store.operations.IPostOperationEnabled#postOperation + * () + */ /** {@inheritDoc} */ @Override public boolean postOperation(CdmBase objectAffectedByOperation) { @@ -353,68 +445,75 @@ public class MultiPageTaxonEditor extends FormEditor implements return false; } - /** - * Returns an IEditorPart implementation by type - * - * @param page - * the page type - * @return a {@link eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage} - * object. - */ - public IMultiPageTaxonEditorPage getPage(Page page) { - for (IEditorPart editor : this.getPages()) { - if (editor.getClass().equals(page.getClazz())) { - return (IMultiPageTaxonEditorPage) editor; - } - } - return null; - } - - /** - * Return a list of AbstractTaxonEditors registered with this - * MultiPageTaxonEditor. - * - * @return a {@link java.util.List} object. - */ - public List getPages() { - ArrayList editors = new ArrayList(); - for (int i = 0; i < this.getPageCount(); i++) { - - editors.add((IMultiPageTaxonEditorPage) this.getEditor(i)); - } - return editors; - } - - /** - * Refreshes a certain page of the MultipageTaxonEditor - * - * @param page - * a {@link eu.etaxonomy.taxeditor.editor.Page} object. - * @return a boolean. - */ - public boolean redraw(Page page) { - return redraw(page, true); - } - - /** - * Refreshes a certain page of the MultipageTaxonEditor and sets focus to - * that page - * - * @param page - * a {@link eu.etaxonomy.taxeditor.editor.Page} object. - * @param focus - * a boolean. - * @return a boolean. - */ - public boolean redraw(Page page, boolean focus) { - IMultiPageTaxonEditorPage editorPage = getPage(page); - return editorPage != null && editorPage.redraw(focus); - } - - @Override + /** + * Returns an IEditorPart implementation by type + * + * @param page + * the page type + * @return a {@link eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage} + * object. + */ + public IMultiPageTaxonEditorPage getPage(Page page) { + for (IEditorPart editor : this.getPages()) { + if (editor.getClass().equals(page.getClazz())) { + return (IMultiPageTaxonEditorPage) editor; + } + } + return null; + } + + /** + * Return a list of AbstractTaxonEditors registered with this + * MultiPageTaxonEditor. + * + * @return a {@link java.util.List} object. + */ + public List getPages() { + ArrayList editors = new ArrayList(); + for (int i = 0; i < this.getPageCount(); i++) { + + editors.add((IMultiPageTaxonEditorPage) this.getEditor(i)); + } + return editors; + } + + /** + * Refreshes a certain page of the MultipageTaxonEditor + * + * @param page + * a {@link eu.etaxonomy.taxeditor.editor.Page} object. + * @return a boolean. + */ + public boolean redraw(Page page) { + return redraw(page, true); + } + + /** + * Refreshes a certain page of the MultipageTaxonEditor and sets focus to + * that page + * + * @param page + * a {@link eu.etaxonomy.taxeditor.editor.Page} object. + * @param focus + * a boolean. + * @return a boolean. + */ + public boolean redraw(Page page, boolean focus) { + IMultiPageTaxonEditorPage editorPage = getPage(page); + return editorPage != null && editorPage.redraw(focus); + } + + /** + *

+ * onComplete + *

+ * + * @return a boolean. + */ + @Override public boolean onComplete() { - return false; - } + return false; + } /** * Reloads the data for this @@ -444,22 +543,26 @@ public class MultiPageTaxonEditor extends FormEditor implements } } - @Override - public String toString() { - return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput()); - } - - @Override - public boolean permissionsSatisfied() { - IEditorPart activeEditor = getActiveEditor(); - if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){ - return ((ISecuredEditor)activeEditor).permissionsSatisfied(); - } - return true; - } - - @Override - public boolean canAttachMedia() { - return true; - } + @Override + public String toString() { + return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput()); + } + + @Override + public boolean permissionsSatisfied() { + IEditorPart activeEditor = getActiveEditor(); + if(activeEditor != null && ISecuredEditor.class.isAssignableFrom(activeEditor.getClass())){ + return ((ISecuredEditor)activeEditor).permissionsSatisfied(); + } + return true; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.model.IPartContentHasMedia#canAttachMedia() + */ + @Override + public boolean canAttachMedia() { + return true; + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java index d0a7b205c..fc6951c5c 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java @@ -1,15 +1,19 @@ /** -* 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. -*/ + * 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.editor; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -46,345 +50,369 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @created 19.03.2009 * @version 1.0 */ -public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPersistableElement { +public class TaxonEditorInput extends CdmEntitySessionInput implements IEditorInput, IConversationEnabled, IPersistableElement { - private final ConversationHolder conversation; + private final ConversationHolder conversation; - private final TaxonNode taxonNode; + private TaxonNode taxonNode; - private TaxonEditorInputDataChangeBehaviour dataChangeBehavior; + private TaxonEditorInputDataChangeBehaviour dataChangeBehavior; - private TaxonBase initiallySelectedTaxonBase; + private TaxonBase initiallySelectedTaxonBase; - private TaxonEditorInput(TaxonNode taxonNode, ConversationHolder conversation){ - this.conversation = conversation; - this.taxonNode = taxonNode; - } + private enum CdmType { + TAXON_NODE, + TAXON_BASE, + PARENT_TAXON_NODE + } + private TaxonEditorInput(UUID uuid, CdmType type) { + super(true); + this.conversation = CdmStore.createConversation(); + switch(type) { + case PARENT_TAXON_NODE: + initForParentTaxonNode(uuid); + break; + case TAXON_BASE: + initForTaxonBase(uuid); + break; + case TAXON_NODE: + initForTaxonNode(uuid); + break; + } + } + private void init(TaxonNode taxonNode) { + this.taxonNode = taxonNode; + } - /** - *

NewInstance

- * - * @param taxonNodeUuid a {@link java.util.UUID} object. - * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. - * @throws java.lang.Exception if any. - */ - public static TaxonEditorInput NewInstance(UUID taxonNodeUuid) throws Exception{ - try{ - ConversationHolder conversation = CdmStore.createConversation(); - return NewInstance(taxonNodeUuid, conversation); - }catch(Exception e){ - throw e; - } - } /** + *

NewInstance

* - * @param taxonNodeUuid - * @param conversation - * @return + * @param taxonNodeUuid a {@link java.util.UUID} object. + * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. + * @throws java.lang.Exception if any. */ - private static TaxonEditorInput NewInstance(UUID taxonNodeUuid, ConversationHolder conversation){ + private void initForTaxonNode(UUID taxonNodeUuid) { - TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, null); + TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, getTaxonNodePropertyPaths()); - if(taxonNode == null){ - MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not of type TaxonNode but [null]."); - return null; - } + if(taxonNode == null){ + MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase."); + } + init(taxonNode); + + } - return new TaxonEditorInput(taxonNode, conversation); + private void initForTaxonBase(UUID taxonBaseUuid) { + TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(taxonBaseUuid, getTaxonBasePropertyPaths()); + if (taxonBase != null){ + if(taxonBase.isInstanceOf(Taxon.class)){ + Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class); + + if (taxon.getTaxonNodes().size() == 0 && taxon.isMisapplication()){ + // TODO get accepted taxon + MessagingUtils.info("trying to open Mispplied Name "); + + Set acceptedTaxa = new HashSet(); + Set relations = taxon.getRelationsFromThisTaxon(); + for(TaxonRelationship relation : relations){ + if(relation.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){ + acceptedTaxa.add(relation.getToTaxon()); + } + } + setInputForMultipleTaxa(conversation, acceptedTaxa); + + }else{ + setInputForMultipleNodes(conversation, taxon.getTaxonNodes()); + } + }else if(taxonBase instanceof Synonym){ + Synonym synonym = (Synonym) taxonBase; + + Set taxa = synonym.getAcceptedTaxa(); + setInputForMultipleTaxa(conversation, taxa); + } + } } + /** - *

NewInstanceFromTaxonBase

+ *

NewEmptyInstance

* - * @param taxonBaseUuid a {@link java.util.UUID} object. + * @param parentNodeUuid a {@link java.util.UUID} object. * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. */ - public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){ - ConversationHolder conversation = CdmStore.createConversation(); - - TaxonEditorInput input = null; - - TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).find(taxonBaseUuid); - if (taxonBase != null){ - if(taxonBase.isInstanceOf(Taxon.class)){ - Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class); - - if (taxon.getTaxonNodes().size() == 0 && taxon.isMisapplication()){ - // TODO get accepted taxon - MessagingUtils.info("trying to open misapplied Name "); - - Set acceptedTaxa = new HashSet(); - Set relations = taxon.getRelationsFromThisTaxon(); - for(TaxonRelationship relation : relations){ - if(relation.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){ - acceptedTaxa.add(relation.getToTaxon()); - } - } - input = getInputForMultipleTaxa(conversation, acceptedTaxa); - - }else{ - input = getInputForMultipleNodes(conversation, taxon.getTaxonNodes()); - } - }else if(taxonBase instanceof Synonym){ - Synonym synonym = (Synonym) taxonBase; - - Set taxa = synonym.getAcceptedTaxa(); - input = getInputForMultipleTaxa(conversation, taxa); - } - if (input != null){ - input.setInitiallySelectedTaxonBase(taxonBase); - } - } - - - return input; + private void initForParentTaxonNode(UUID parentNodeUuid){ + + + TaxonNameBase name = PreferencesUtil.getPreferredNomenclaturalCode().getNewTaxonNameInstance(null); + ITaxonTreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid); + + Taxon newTaxon = Taxon.NewInstance(name, parentNode.getReference()); + TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference()); + + // add the new taxon to the editors persistence context + UUID newTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).save(newTaxonNode).getUuid(); + + initForTaxonNode(newTaxonNodeUuid); } - private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set taxonNodes){ - if(taxonNodes.size() == 1){ - TaxonNode taxonNode = taxonNodes.iterator().next(); - return NewInstance(taxonNode.getUuid(), conversation); - }else if(taxonNodes.size() > 1){ - TaxonNode taxonNode = ChooseFromMultipleTaxonNodesDialog.choose(taxonNodes); - if(taxonNode != null){ - return NewInstance(taxonNode.getUuid(), conversation); - } - }else if(taxonNodes.size() == 0){ - // this is an undesired state - MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "The accepted taxon is not part of any classification. This should not have happened."); - } - return null; + + + + private void setInputForMultipleNodes(ConversationHolder conversation, Set taxonNodes){ + if(taxonNodes.size() == 1){ + TaxonNode taxonNode = taxonNodes.iterator().next(); + init(taxonNode); + }else if(taxonNodes.size() > 1){ + TaxonNode taxonNode = ChooseFromMultipleTaxonNodesDialog.choose(taxonNodes); + if(taxonNode != null){ + init(taxonNode); + } + }else if(taxonNodes.size() == 0){ + // this is an undesired state + MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "The accepted taxon is not part of any classification. This should not have happened."); + } } - private static TaxonEditorInput getInputForMultipleTaxa(ConversationHolder conversation, Set taxa){ - if(taxa.size() == 1){ - Taxon taxon = taxa.iterator().next(); - Set nodes = taxon.getTaxonNodes(); - return getInputForMultipleNodes(conversation, nodes); - }else if(taxa.size() > 1){ - Set taxonNodes = new HashSet(); - for ( Taxon taxon : taxa ){ - taxonNodes.addAll(taxon.getTaxonNodes()); - } - return getInputForMultipleNodes(conversation, taxonNodes); - }else if(taxa.size() == 0){ - // this is an undesired state - MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "Trying to open accepted taxon for a synonym or misapplication but" + - " no accepted taxa are present. This should not have happened."); - } - return null; + private void setInputForMultipleTaxa(ConversationHolder conversation, Set taxa){ + if(taxa.size() == 1){ + Taxon taxon = taxa.iterator().next(); + Set nodes = taxon.getTaxonNodes(); + setInputForMultipleNodes(conversation, nodes); + }else if(taxa.size() > 1){ + Set taxonNodes = new HashSet(); + for ( Taxon taxon : taxa ){ + taxonNodes.addAll(taxon.getTaxonNodes()); + } + setInputForMultipleNodes(conversation, taxonNodes); + }else if(taxa.size() == 0){ + // this is an undesired state + MessagingUtils.warningDialog("Incorrect state", TaxonEditorInput.class, "Trying to open accepted taxon for a synonym or misapplication but" + + " no accepted taxa are present. This should not have happened."); + } } /** - *

NewEmptyInstance

+ *

NewInstance

* - * @param parentNodeUuid a {@link java.util.UUID} object. + * @param taxonNodeUuid a {@link java.util.UUID} object. * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. + * @throws java.lang.Exception if any. */ - public static TaxonEditorInput NewEmptyInstance(UUID parentNodeUuid){ - ConversationHolder conversation = CdmStore.createConversation(); + public static TaxonEditorInput NewInstance(UUID taxonNodeUuid) throws Exception { + return new TaxonEditorInput(taxonNodeUuid, CdmType.TAXON_NODE); - TaxonNameBase name = PreferencesUtil.getPreferredNomenclaturalCode().getNewTaxonNameInstance(null); - ITaxonTreeNode parentNode = CdmStore.getService(IClassificationService.class).getTreeNodeByUuid(parentNodeUuid); + } - Taxon newTaxon = Taxon.NewInstance(name, parentNode.getReference()); - TaxonNode newTaxonNode = parentNode.addChildTaxon(newTaxon, parentNode.getReference(), parentNode.getMicroReference()); + /** + *

NewInstanceFromTaxonBase

+ * + * @param taxonBaseUuid a {@link java.util.UUID} object. + * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. + */ + public static TaxonEditorInput NewInstanceFromTaxonBase(UUID taxonBaseUuid){ + return new TaxonEditorInput(taxonBaseUuid, CdmType.TAXON_BASE); + } - // add the new taxon to the editors persistence context - UUID newTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).save(newTaxonNode).getUuid(); - return new TaxonEditorInput(newTaxonNode, conversation); + /** + *

NewEmptyInstance

+ * + * @param parentNodeUuid a {@link java.util.UUID} object. + * @return a {@link eu.etaxonomy.taxeditor.editor.TaxonEditorInput} object. + */ + public static TaxonEditorInput NewEmptyInstance(UUID parentNodeUuid){ + return new TaxonEditorInput(parentNodeUuid, CdmType.PARENT_TAXON_NODE); } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#exists() - */ - /** - *

exists

- * - * @return a boolean. - */ - @Override + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#exists() + */ + /** + *

exists

+ * + * @return a boolean. + */ + @Override public boolean exists() { - return taxonNode != null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getImageDescriptor() - */ - /** - *

getImageDescriptor

- * - * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object. - */ - @Override + return taxonNode != null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getImageDescriptor() + */ + /** + *

getImageDescriptor

+ * + * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object. + */ + @Override public ImageDescriptor getImageDescriptor() { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getName() - */ - /** - *

getName

- * - * @return a {@link java.lang.String} object. - */ - @Override + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getName() + */ + /** + *

getName

+ * + * @return a {@link java.lang.String} object. + */ + @Override public String getName() { - if(getTaxon() == null){ - return null; - } - TaxonNameBase name = getTaxon().getName(); - if (name == null || name.getTitleCache() == null) { - return "New taxon"; - } else { - return name.getTitleCache(); - } - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getPersistable() - */ - /** - *

getPersistable

- * - * @return a {@link org.eclipse.ui.IPersistableElement} object. - */ - @Override + if(getTaxon() == null){ + return null; + } + TaxonNameBase name = getTaxon().getName(); + if (name == null || name.getTitleCache() == null) { + return "New taxon"; + } else { + return name.getTitleCache(); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getPersistable() + */ + /** + *

getPersistable

+ * + * @return a {@link org.eclipse.ui.IPersistableElement} object. + */ + @Override public IPersistableElement getPersistable() { -// if(CdmStore.isActive()){ -// TaxonNode test = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()); -// boolean isPersistable = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()) != null; -// if (isPersistable) { -// return this; -// } -// } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getToolTipText() - */ - /** - *

getToolTipText

- * - * @return a {@link java.lang.String} object. - */ - @Override + // if(CdmStore.isActive()){ + // TaxonNode test = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()); + // boolean isPersistable = CdmStore.getTaxonTreeService().getTaxonNodeByUuid(taxonNode.getUuid()) != null; + // if (isPersistable) { + // return this; + // } + // } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getToolTipText() + */ + /** + *

getToolTipText

+ * + * @return a {@link java.lang.String} object. + */ + @Override public String getToolTipText() { - return getName(); - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - /** {@inheritDoc} */ - @Override + return getName(); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + /** {@inheritDoc} */ + @Override public Object getAdapter(Class adapter) { - if (adapter == Taxon.class) { - return taxonNode.getTaxon(); - } + if (adapter == Taxon.class) { + return getTaxon(); + } - if (adapter == TaxonNode.class) { - return taxonNode; - } + if (adapter == TaxonNode.class) { + return taxonNode; + } - return null; - } + return null; + } - /** - * {@inheritDoc} - * - * Overrides equals to ensure that a taxon can only be edited by - * one editor at a time. - */ - @Override + /** + * {@inheritDoc} + * + * Overrides equals to ensure that a taxon can only be edited by + * one editor at a time. + */ + @Override public boolean equals(Object obj) { - if (TaxonEditorInput.class.equals(obj.getClass()) - && getTaxon() != null - && getTaxon().equals(((TaxonEditorInput) obj).getTaxon())){ - if(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase() != null){ - setInitiallySelectedTaxonBase(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase()); - } - return true; - } - return false; - } - - /** - *

getTaxon

- * - * @return the taxon - */ - public Taxon getTaxon(){ - return taxonNode.getTaxon(); - } - - /** - *

Getter for the field taxonNode.

- * - * @return the taxonNode - */ - public TaxonNode getTaxonNode() { - return taxonNode; - } - - /* - * (non-Javadoc) - * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() - */ - /** - *

getConversationHolder

- * - * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. - */ - @Override + if (TaxonEditorInput.class.equals(obj.getClass()) + && getTaxon() != null + && getTaxon().equals(((TaxonEditorInput) obj).getTaxon())){ + if(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase() != null){ + setInitiallySelectedTaxonBase(((TaxonEditorInput) obj).getInitiallySelectedTaxonBase()); + } + return true; + } + return false; + } + + /** + *

getTaxon

+ * + * @return the taxon + */ + public Taxon getTaxon(){ + Taxon taxon = CdmBase.deproxy(taxonNode.getTaxon(), Taxon.class); + return taxon; + } + + /** + *

Getter for the field taxonNode.

+ * + * @return the taxonNode + */ + public TaxonNode getTaxonNode() { + return taxonNode; + } + + /* + * (non-Javadoc) + * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() + */ + /** + *

getConversationHolder

+ * + * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object. + */ + @Override public ConversationHolder getConversationHolder() { - return conversation; - } - - /* - * (non-Javadoc) - * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent) - */ - /** {@inheritDoc} */ - @Override + return conversation; + } + + /* + * (non-Javadoc) + * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostCrudObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent) + */ + /** {@inheritDoc} */ + @Override public void update(CdmDataChangeMap events) { - if(dataChangeBehavior == null){ - dataChangeBehavior = new TaxonEditorInputDataChangeBehaviour(this); - } - - DataChangeBridge.handleDataChange(events, dataChangeBehavior); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IPersistableElement#getFactoryId() - */ - /** - *

getFactoryId

- * - * @return a {@link java.lang.String} object. - */ - @Override + if(dataChangeBehavior == null){ + dataChangeBehavior = new TaxonEditorInputDataChangeBehaviour(this); + } + + DataChangeBridge.handleDataChange(events, dataChangeBehavior); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPersistableElement#getFactoryId() + */ + /** + *

getFactoryId

+ * + * @return a {@link java.lang.String} object. + */ + @Override public String getFactoryId() { - return TaxonEditorInputFactory.getFactoryId(); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento) - */ - /** {@inheritDoc} */ - @Override + return TaxonEditorInputFactory.getFactoryId(); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento) + */ + /** {@inheritDoc} */ + @Override public void saveState(IMemento memento) { - TaxonEditorInputFactory.saveState(memento, this); - } + TaxonEditorInputFactory.saveState(memento, this); + } /** @@ -393,20 +421,91 @@ public class TaxonEditorInput implements IEditorInput, IConversationEnabled, IPe * @param taxonBase a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object. */ public void setInitiallySelectedTaxonBase(TaxonBase taxonBase) { - this.initiallySelectedTaxonBase = taxonBase; - } - - /** - *

Getter for the field initiallySelectedTaxonBase.

- * - * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object. - */ - public TaxonBase getInitiallySelectedTaxonBase() { - return initiallySelectedTaxonBase; - } - - @Override - public String toString() { - return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon()); - } + this.initiallySelectedTaxonBase = taxonBase; + } + + /** + *

Getter for the field initiallySelectedTaxonBase.

+ * + * @return a {@link eu.etaxonomy.cdm.model.taxon.TaxonBase} object. + */ + public TaxonBase getInitiallySelectedTaxonBase() { + return initiallySelectedTaxonBase; + } + +// @Override +// public String toString() { +// return String.format("%s[%s]", this.getClass().getSimpleName(), getTaxon()); +// } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return Arrays.asList(taxonNode); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(ITaxonNodeService.class).merge(taxonNode, true); + } + } + + @Override + public Map> getPropertyPathsMap() { + return null; + } + + private List getTaxonNodePropertyPaths() { + List taxonNodePropertyPaths = new ArrayList(); + for(String propertyPath : getTaxonBasePropertyPaths()) { + taxonNodePropertyPaths.add("taxon." + propertyPath); + } + return taxonNodePropertyPaths; + } + + private List getTaxonBasePropertyPaths() { + List taxonBasePropertyPaths = Arrays.asList(new String[] { + "sec", + "createdBy", + "updatedBy", + "annotations", + "markers", + "credits", + "extensions", + "rights", + "sources", + "descriptions", + "relationsToThisTaxon", + "relationsFromThisTaxon", + "taxonNodes", + "descriptions.descriptionElements.feature", + "descriptions.descriptionElements.area", + "descriptions.descriptionElements.status", + "descriptions.markers", + "name.descriptions", + "name.typeDesignations", + "name.status", + "name.nomenclaturalReference.inReference", + "name.taxonBases.taxonNodes", + "name.relationsFromThisName", + "name.relationsToThisName", + "name.homotypicalGroup.typifiedNames.taxonBases.synonymRelations.synonym.name.status", + "name.homotypicalGroup.typifiedNames.relationsToThisName.fromName", + "synonymRelations.synonym.name.status.type", + "synonymRelations.synonym.name.relationsToThisName.fromName", + "synonymRelations.synonym.name.nomenclaturalReference.inReference.authorship", + "synonymRelations.synonym.name.nomenclaturalReference.authorship", + "synonymRelations.synonym.name.homotypicalGroup.typifiedNames.taxonBases.synonymRelations" + }); + + return taxonBasePropertyPaths; + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditor.java index a5bf4e6be..5c697e7f3 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditor.java @@ -66,6 +66,7 @@ public class CdmAuthorityEditor extends EditorPart implements IConversationEnabl @Override public void setFocus() { PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus(); + ((CdmAuthorityEditorInput) getEditorInput()).bind(); } /* (non-Javadoc) @@ -76,6 +77,7 @@ public class CdmAuthorityEditor extends EditorPart implements IConversationEnabl try { monitor.beginTask("Saving CDM Authority Editor", 1); getConversationHolder().commit(true); + ((CdmAuthorityEditorInput) getEditorInput()).merge(); dirty = false; firePropertyChange(PROP_DIRTY); monitor.worked(1); @@ -172,6 +174,7 @@ public class CdmAuthorityEditor extends EditorPart implements IConversationEnabl public void dispose() { conversation.unregisterForDataStoreChanges(this); conversation.close(); + ((CdmAuthorityEditorInput) getEditorInput()).getCdmEntitySession().dispose(); super.dispose(); } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditorInput.java index 0e2553a51..fa78b41d8 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditorInput.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/group/authority/CdmAuthorityEditorInput.java @@ -1,57 +1,62 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.editor.group.authority; +import java.util.Arrays; +import java.util.Collection; import java.util.UUID; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.IGroupService; import eu.etaxonomy.cdm.model.common.Group; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput; import eu.etaxonomy.taxeditor.store.CdmStore; /** * Editor input for the {@link CdmAuthorityEditor}. - * + * * @author cmathew * @created Mar 28, 2013 * */ -public class CdmAuthorityEditorInput implements IEditorInput, IConversationEnabled { +public class CdmAuthorityEditorInput extends CdmEntitySessionInput implements IEditorInput, IConversationEnabled { private ConversationHolder conversation; private Group group; - + protected CdmAuthorityEditorInput(ConversationHolder conversation, Group group) { + super(true); this.conversation = conversation; - this.group = group; - + this.group = CdmApplicationState.getCurrentAppConfig().getGroupService().load(group.getUuid()); + } - + /** * Creates a new instance of the input for a given group. - * + * * @param groupUuid * @return * @throws Exception */ public static CdmAuthorityEditorInput NewInstance(UUID groupUuid) throws Exception{ ConversationHolder conversation = CdmStore.createConversation(); - Group group = CdmStore.getService(IGroupService.class).load(groupUuid, null); + Group group = CdmStore.getService(IGroupService.class).load(groupUuid, null); return new CdmAuthorityEditorInput(conversation, group); } - + /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @@ -59,8 +64,8 @@ public class CdmAuthorityEditorInput implements IEditorInput, IConversationEnabl public Object getAdapter(Class adapter) { if (adapter == Group.class) { return this.group; - } - + } + return null; } /* (non-Javadoc) @@ -69,7 +74,7 @@ public class CdmAuthorityEditorInput implements IEditorInput, IConversationEnabl @Override public void update(CdmDataChangeMap changeEvents) { // TODO Auto-generated method stub - + } /* (non-Javadoc) * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() @@ -114,8 +119,8 @@ public class CdmAuthorityEditorInput implements IEditorInput, IConversationEnabl @Override public String getToolTipText() { return getName(); - } - + } + /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @@ -129,13 +134,31 @@ public class CdmAuthorityEditorInput implements IEditorInput, IConversationEnabl } return super.equals(object); } - + /** * Getter method for group member. - * + * * @return */ public Group getGroup() { return this.group; } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public Collection getRootEntities() { + return Arrays.asList(group); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + group = CdmStore.getService(IGroupService.class).merge(group, true).getMergedEntity(); + } + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java index 318191f82..4ef59f6c1 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/OpenDerivateViewHandler.java @@ -1,60 +1,22 @@ package eu.etaxonomy.taxeditor.editor.handler; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import java.util.UUID; - 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.IStructuredSelection; import org.eclipse.ui.PartInitException; -import org.eclipse.ui.handlers.HandlerUtil; -import eu.etaxonomy.cdm.model.description.IndividualsAssociation; -import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; import eu.etaxonomy.taxeditor.model.MessagingUtils; public class OpenDerivateViewHandler extends AbstractHandler { - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - ISelection currentSelection = HandlerUtil.getCurrentSelection(event); - if(currentSelection instanceof IStructuredSelection){ - Iterator selectionIterator = ((IStructuredSelection) currentSelection).iterator(); - Set selectedElementUUIDs = new HashSet(); - while(selectionIterator.hasNext()){ - Object object = selectionIterator.next(); - if(object instanceof SpecimenOrObservationBase){ - selectedElementUUIDs.add(((SpecimenOrObservationBase) object).getUuid()); - } - else if(object instanceof IndividualsAssociation){ - SpecimenOrObservationBase specimen = ((IndividualsAssociation) object).getAssociatedSpecimenOrObservation(); - if(specimen!=null){ - selectedElementUUIDs.add(specimen.getUuid()); - } - } - } - if(!selectedElementUUIDs.isEmpty()){ - DerivateViewEditorInput input = new DerivateViewEditorInput(selectedElementUUIDs); - try { - EditorUtil.open(input); - } catch (PartInitException e) { - MessagingUtils.error(OpenDerivateViewHandler.class, "Could not open Derivative Editor", e); - } catch (NullPointerException npe){ - MessagingUtils.messageDialog("Failed to open Editor", OpenDerivateViewHandler.class, "Could not open Derivative Editor. The derivate hierarchy is corrupted!", npe); - } - } - else{ - MessagingUtils.informationDialog("Empty selection", "No Specimen selected."); - } + try { + EditorUtil.open(new DerivateViewEditorInput()); + } catch (PartInitException e) { + MessagingUtils.error(OpenDerivateViewHandler.class, "Derivative Editor could not be opened", e); } return null; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewSpecimenHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewSpecimenHandler.java deleted file mode 100644 index 8ada87fff..000000000 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/handler/create/NewSpecimenHandler.java +++ /dev/null @@ -1,74 +0,0 @@ -// $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.editor.handler.create; - -import java.util.Collections; - -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.ui.PartInitException; - -import eu.etaxonomy.cdm.api.conversation.ConversationHolder; -import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy; -import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeFieldUnitCacheStrategy; -import eu.etaxonomy.cdm.api.service.IOccurrenceService; -import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; -import eu.etaxonomy.cdm.model.occurrence.DerivationEventType; -import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; -import eu.etaxonomy.cdm.model.occurrence.FieldUnit; -import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; -import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; -import eu.etaxonomy.taxeditor.store.CdmStore; - -/** - *

NewSpecimenHandler class.

- * - * @author n.hoffmann - * @created Jun 16, 2010 - * @version 1.0 - */ -public class NewSpecimenHandler extends AbstractHandler { - private static final Logger logger = Logger - .getLogger(NewSpecimenHandler.class); - - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ - /** {@inheritDoc} */ - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - ConversationHolder conversation = CdmStore.createConversation(); - conversation.bind(); - FieldUnit fieldUnit = FieldUnit.NewInstance(); - DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen); - DerivationEvent.NewSimpleInstance(fieldUnit, derivedUnit, DerivationEventType.GATHERING_IN_SITU()); - fieldUnit.setCacheStrategy(new DerivedUnitFacadeFieldUnitCacheStrategy()); - derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); - CdmStore.getService(IOccurrenceService.class).save(fieldUnit); - CdmStore.getService(IOccurrenceService.class).save(derivedUnit); - conversation.commit(); - DerivateViewEditorInput input = new DerivateViewEditorInput(Collections.singleton(fieldUnit.getUuid())); - try { - EditorUtil.open(input); - } catch (PartInitException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } -// NewDerivedUnitBaseWizard wizard = new NewDerivedUnitBaseWizard(); -// wizard.init(null, null); -// WizardDialog dialog = new WizardDialog(HandlerUtil.getActiveShell(event), wizard); -// dialog.open(); - return null; - } -} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractIdentificationEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractIdentificationEditorInput.java index 4bf11c90d..15c755559 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractIdentificationEditorInput.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/AbstractIdentificationEditorInput.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.editor.key; @@ -11,23 +11,25 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.model.description.IIdentificationKey; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput; /** * @author n.hoffmann - * + * */ public abstract class AbstractIdentificationEditorInput - implements IEditorInput, IConversationEnabled { + extends CdmEntitySessionInput implements IEditorInput, IConversationEnabled { private final ConversationHolder conversation; protected AbstractIdentificationEditorInput(ConversationHolder conversation) { + super(true); this.conversation = conversation; } /* * (non-Javadoc) - * + * * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @Override @@ -38,7 +40,7 @@ public abstract class AbstractIdentificationEditorInput { - private PolytomousKey key; - - protected PolytomousKeyEditorInput(ConversationHolder conversation, - PolytomousKey key) { - super(conversation); - this.key = key; - } - - - - public static PolytomousKeyEditorInput NewInstance(UUID polytomousKeyUuid) throws Exception{ - try{ - ConversationHolder conversation = CdmStore.createConversation(); - - return NewInstance(polytomousKeyUuid, conversation); - }catch(Exception e){ - throw e; - } - } - - public static PolytomousKeyEditorInput NewInstance(UUID polytomousKeyUuid, ConversationHolder conversation) throws Exception{ - PolytomousKey polytomousKey = CdmStore.getService(IPolytomousKeyService.class).load(polytomousKeyUuid, null); - - return new PolytomousKeyEditorInput(conversation, polytomousKey); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getName() - */ - @Override - public String getName() { - return key.getTitleCache(); - } - - @Override - public PolytomousKey getKey() { - return key; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object object) { - if (object instanceof PolytomousKeyEditorInput - && getKey() != null - && getKey().equals(((PolytomousKeyEditorInput) object).getKey()) - ){ - return true; - } - return super.equals(object); - } + private final String name; + private final UUID keyUuid; + private PolytomousKey key; + + + protected PolytomousKeyEditorInput(ConversationHolder conversation, + UUID polytomousKeyUuid) { + super(conversation); + this.keyUuid = polytomousKeyUuid; + this.key = CdmStore.getService(IPolytomousKeyService.class).load(polytomousKeyUuid, null); + this.name = key.getTitleCache(); + } + +// public PolytomousKeyEditorInput(UUID polytomousKeyUuid, String name) { +// super(CdmStore.createConversation()); +// this.keyUuid = polytomousKeyUuid; +// this.name = name; +// } + + + public static PolytomousKeyEditorInput NewInstance(UUID polytomousKeyUuid) throws Exception{ + try{ + ConversationHolder conversation = CdmStore.createConversation(); + return new PolytomousKeyEditorInput(conversation, polytomousKeyUuid); + }catch(Exception e){ + throw e; + } + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getName() + */ + @Override + public String getName() { + return name; + } + + @Override + public PolytomousKey getKey() { + return key; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object object) { + if (object instanceof PolytomousKeyEditorInput + && getKey() != null + && getKey().equals(((PolytomousKeyEditorInput) object).getKey()) + ){ + return true; + } + return super.equals(object); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return Arrays.asList(key); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + key = CdmStore.getService(IPolytomousKeyService.class).merge(key,true).getMergedEntity(); + } + } + + @Override + public Map> getPropertyPathsMap() { + Map> propertyPathsMap = new HashMap>(); + + List polytomousKeyNodePropertyPaths = Arrays.asList(new String[] { + "statement" + }); + propertyPathsMap.put("children", polytomousKeyNodePropertyPaths); + return propertyPathsMap; + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorLabels.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorLabels.java new file mode 100644 index 000000000..82ee611fa --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorLabels.java @@ -0,0 +1,24 @@ +// $Id$ +/** +* Copyright (C) 2015 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.editor.key.polytomous; + +/** + * @author cmathew + * @date 21 Jul 2015 + * + */ +public interface PolytomousKeyEditorLabels { + + public static final String CREATE_CHILD_POLYTOMOUS_KEY_NODE_LABEL = "Create Child Polytomous Key Node"; + public static final String CREATE_SIBLING_POLYTOMOUS_KEY_NODE_LABEL = "Create Sibling Polytomous Key Node"; + + public static final String NO_KEY_NODE_FOR_CHILD_SELECTED_MESSAGE = "No Key Node Selected.Please right-click on a specific key node to create a new child key node."; + public static final String NO_KEY_NODE_FOR_SIBLING_SELECTED_MESSAGE = "No Key Node Selected.Please right-click on a specific key node to create a new sibling key node."; +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java index a17c56a0a..90ed20b2b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListContentProvider.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT - * European Distributed Institute of Taxonomy + * 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. */ @@ -16,7 +16,6 @@ import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; -import eu.etaxonomy.cdm.model.description.PolytomousKey; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; /** @@ -29,7 +28,7 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ @Override @@ -38,7 +37,7 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see * org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface * .viewers.Viewer, java.lang.Object, java.lang.Object) @@ -49,17 +48,17 @@ public class PolytomousKeyListContentProvider implements /* * (non-Javadoc) - * + * * @see * org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java * .lang.Object) */ @Override public Object[] getElements(Object inputElement) { - if (inputElement instanceof PolytomousKey) { + if (inputElement instanceof PolytomousKeyEditorInput) { List result = new ArrayList(); - PolytomousKeyNode root = ((PolytomousKey) inputElement).getRoot(); + PolytomousKeyNode root = ((PolytomousKeyEditorInput) inputElement).getKey().getRoot(); getChildrenBreadthFirst(result, root); return result.toArray(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java index dc81964bc..56bd34ca6 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java @@ -173,7 +173,6 @@ public class PolytomousKeyListEditor extends EditorPart implements */ @Override public void doSave(IProgressMonitor monitor) { - } /* @@ -250,7 +249,7 @@ public class PolytomousKeyListEditor extends EditorPart implements setPartName(key.getTitleCache()); - viewer.setInput(key); + viewer.setInput(getEditorInput()); } public int getTableItemCount() { @@ -262,7 +261,7 @@ public class PolytomousKeyListEditor extends EditorPart implements } public PolytomousKey getViewerInputKey() { - return (PolytomousKey) viewer.getInput(); + return ((PolytomousKeyEditorInput) viewer.getInput()).getKey(); } private void createMenu() { // register context menu @@ -313,18 +312,18 @@ public class PolytomousKeyListEditor extends EditorPart implements */ @Override public void changed(Object element) { - if(element != null) { - viewer.update(element, null); - } - - if (element instanceof PolytomousKeyNode) { - List children = ((PolytomousKeyNode) element) - .getParent().getChildren(); - for (PolytomousKeyNode child : children) { - viewer.update(child, null); - } - } + if(element != null) { + viewer.update(element, null); + } + if (element instanceof PolytomousKeyNode) { + List children = ((PolytomousKeyNode) element) + .getParent().getChildren(); + for (PolytomousKeyNode child : children) { + viewer.update(child, null); + } + } + viewer.refresh(); } /* (non-Javadoc) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateChildPolytomousKeyNodeHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateChildPolytomousKeyNodeHandler.java new file mode 100644 index 000000000..1d679a851 --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateChildPolytomousKeyNodeHandler.java @@ -0,0 +1,90 @@ +// $Id$ +/** + * Copyright (C) 2015 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.editor.key.polytomous.handler; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; +import eu.etaxonomy.taxeditor.editor.key.KeyEditor; +import eu.etaxonomy.taxeditor.editor.key.polytomous.IPolytomousKeyEditorPage; +import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorLabels; +import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor; +import eu.etaxonomy.taxeditor.editor.key.polytomous.operation.RemotingCreatePolytomousKeyNodeOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; + +/** + * @author cmathew + * @date 21 Jul 2015 + * + */ +public class RemotingCreateChildPolytomousKeyNodeHandler extends RemotingCdmHandler { + + private PolytomousKeyNode parentNode; + + public RemotingCreateChildPolytomousKeyNodeHandler() { + super(PolytomousKeyEditorLabels.CREATE_CHILD_POLYTOMOUS_KEY_NODE_LABEL); + } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + IEditorPart editor = HandlerUtil.getActiveEditor(event); + + if (editor instanceof KeyEditor) { + IPolytomousKeyEditorPage editorPage = (IPolytomousKeyEditorPage) ((KeyEditor) editor) + .getActiveEditor(); + + if (editorPage instanceof PolytomousKeyListEditor) { + PolytomousKeyListEditor klEditor = (PolytomousKeyListEditor) editorPage; + if(klEditor.getTableItemCount() == 0) { + PolytomousKey pk = klEditor.getViewerInputKey(); + parentNode = pk.getRoot(); + + } else { + IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); + if (selection.getFirstElement() instanceof PolytomousKeyNode) { + parentNode = (PolytomousKeyNode) selection.getFirstElement(); + } else { + return new Status(IStatus.ERROR, + "unknown", + PolytomousKeyEditorLabels.NO_KEY_NODE_FOR_CHILD_SELECTED_MESSAGE); + } + } + } + } + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingCreatePolytomousKeyNodeOperation(event.getTrigger(), false, parentNode); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateSiblingPolytomousKeyNodeHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateSiblingPolytomousKeyNodeHandler.java new file mode 100644 index 000000000..7f726a8cb --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/handler/RemotingCreateSiblingPolytomousKeyNodeHandler.java @@ -0,0 +1,72 @@ +// $Id$ +/** +* Copyright (C) 2015 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.editor.key.polytomous.handler; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; +import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorLabels; +import eu.etaxonomy.taxeditor.editor.key.polytomous.operation.RemotingCreatePolytomousKeyNodeOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; + +/** + * @author cmathew + * @date 21 Jul 2015 + * + */ +public class RemotingCreateSiblingPolytomousKeyNodeHandler extends RemotingCdmHandler { + + private PolytomousKeyNode parentNode; + + public RemotingCreateSiblingPolytomousKeyNodeHandler() { + super(PolytomousKeyEditorLabels.CREATE_SIBLING_POLYTOMOUS_KEY_NODE_LABEL); + } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + + IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); + + if (selection.getFirstElement() instanceof PolytomousKeyNode) { + parentNode = (PolytomousKeyNode) selection.getFirstElement(); + } else { + return new Status(IStatus.ERROR, + "unknown", + PolytomousKeyEditorLabels.NO_KEY_NODE_FOR_SIBLING_SELECTED_MESSAGE); + } + + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingCreatePolytomousKeyNodeOperation(event.getTrigger(), false, parentNode.getParent()); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java index f45ce48b0..aa1a363f9 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/CreateNodeOperation.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.editor.key.polytomous.operation; @@ -21,7 +21,7 @@ public class CreateNodeOperation extends AbstractPostTaxonOperation { PolytomousKeyNode parentNode; private PolytomousKeyNode childNode; - + public CreateNodeOperation(String label, IUndoContext undoContext, PolytomousKeyNode parentNode, IPostOperationEnabled postOperationEnabled) { super(label, undoContext, postOperationEnabled); @@ -36,7 +36,7 @@ public class CreateNodeOperation extends AbstractPostTaxonOperation { throws ExecutionException { childNode = PolytomousKeyNode.NewInstance(); - + parentNode.addChild(childNode); return postExecute(childNode); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java index f31a83125..684d8eebd 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.editor.key.polytomous.operation; @@ -9,12 +9,10 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; import eu.etaxonomy.cdm.api.service.DeleteResult; import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService; -import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; import eu.etaxonomy.taxeditor.bulkeditor.internal.TaxeditorBulkeditorPlugin; import eu.etaxonomy.taxeditor.model.MessagingUtils; @@ -24,7 +22,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; /** * @author n.hoffmann - * + * */ public class DeleteNodeOperation extends AbstractPostTaxonOperation { @@ -40,7 +38,7 @@ public class DeleteNodeOperation extends AbstractPostTaxonOperation { /* * (non-Javadoc) - * + * * @see * org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) @@ -48,12 +46,12 @@ public class DeleteNodeOperation extends AbstractPostTaxonOperation { @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - + //parent.removeChild(node); ICdmApplicationConfiguration controller; - - controller = (ICdmApplicationConfiguration) CdmStore.getCurrentApplicationConfiguration(); - + + controller = CdmStore.getCurrentApplicationConfiguration(); + IPolytomousKeyNodeService service = controller.getPolytomousKeyNodeService(); DeleteResult result; if (node.getChildren().size()>0){ @@ -82,7 +80,7 @@ public class DeleteNodeOperation extends AbstractPostTaxonOperation { /* * (non-Javadoc) - * + * * @see * org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) @@ -95,7 +93,7 @@ public class DeleteNodeOperation extends AbstractPostTaxonOperation { /* * (non-Javadoc) - * + * * @see * org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/RemotingCreatePolytomousKeyNodeOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/RemotingCreatePolytomousKeyNodeOperation.java new file mode 100644 index 000000000..c63350eea --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/RemotingCreatePolytomousKeyNodeOperation.java @@ -0,0 +1,48 @@ +// $Id$ +/** +* Copyright (C) 2015 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.editor.key.polytomous.operation; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; +import eu.etaxonomy.taxeditor.operation.RemotingCdmDefaultOperation; + +/** + * @author cmathew + * @date 21 Jul 2015 + * + */ +public class RemotingCreatePolytomousKeyNodeOperation extends RemotingCdmDefaultOperation { + + private final PolytomousKeyNode parentNode; + + private final static String LABEL = "Create new polytomous key node"; + + public RemotingCreatePolytomousKeyNodeOperation(Object source, + boolean async, + PolytomousKeyNode parentNode){ + super(LABEL, Action.Create, source, async); + this.parentNode = parentNode; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmSimpleOperation#doSimpleExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected CdmBase doSimpleExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + PolytomousKeyNode childNode = PolytomousKeyNode.NewInstance(); + parentNode.addChild(childNode); + return childNode; + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java index b3cd23d0d..ce6ff028a 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java @@ -44,7 +44,6 @@ import org.eclipse.ui.part.EditorPart; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; -import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; @@ -53,7 +52,6 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; import eu.etaxonomy.taxeditor.editor.CdmDataTransfer; -import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.IDropTargetable; import eu.etaxonomy.taxeditor.editor.IMultiPageTaxonEditorPage; import eu.etaxonomy.taxeditor.editor.ISecuredEditor; @@ -74,8 +72,8 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.TaxeditorPartService; import eu.etaxonomy.taxeditor.preference.Resources; import eu.etaxonomy.taxeditor.security.RequiredPermissions; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; import eu.etaxonomy.taxeditor.store.CdmStore; -import eu.etaxonomy.taxeditor.store.StoreUtil; /** *

@@ -121,6 +119,8 @@ public class TaxonNameEditor extends EditorPart implements private TaxonBase objectAffectedByLastOperation; + private ICdmEntitySession cdmEntitySession; + /** *

* Constructor for TaxonNameEditor. @@ -235,12 +235,12 @@ public class TaxonNameEditor extends EditorPart implements *

*/ public void createOrUpdateNameComposites() { - //this.taxon = (Taxon)CdmStore.getService(ITaxonService.class).load(this.getTaxon().getUuid()); - //this.taxon = HibernateProxyHelper.deproxy(this.taxon, Taxon.class); +// this.taxon = (Taxon)CdmStore.getService(ITaxonService.class).load(this.getTaxon().getUuid()); ContainerFactory.createOrUpdateAcceptedTaxonsHomotypicGroup(this); ContainerFactory.createOrUpdateHeterotypicSynonymyGroups(this); ContainerFactory.createOrUpdateMisapplicationsGroup(this); + // Redraw composite managedForm.reflow(true); } @@ -509,7 +509,7 @@ public class TaxonNameEditor extends EditorPart implements } if (input.getAdapter(Taxon.class) != null) { - taxon = (Taxon) input.getAdapter(Taxon.class); + taxon = CdmBase.deproxy(input.getAdapter(Taxon.class), Taxon.class); } else { throw new PartInitException("Invalid Input: Taxon cannot be null"); } @@ -948,4 +948,7 @@ public class TaxonNameEditor extends EditorPart implements Color background = AbstractUtility.getColor(enabled ? Resources.COLOR_COMPOSITE_BACKGROUND : Resources.COLOR_TEXT_DISABLED_BACKGROUND); setEnabled(enabled, background); } + + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeSynonymToAcceptedTaxonHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeSynonymToAcceptedTaxonHandler.java index e76b8475e..c6a9a0cd8 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeSynonymToAcceptedTaxonHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeSynonymToAcceptedTaxonHandler.java @@ -1,15 +1,16 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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.editor.name.handler; +import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.UUID; @@ -38,6 +39,7 @@ import eu.etaxonomy.taxeditor.editor.name.operation.ChangeSynonymToAcceptedTaxon import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; /** @@ -51,16 +53,17 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme private static final Logger logger = Logger .getLogger(ChangeSynonymToAcceptedTaxonHandler.class); private MultiPageTaxonEditor editor; - + /* (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ /** {@inheritDoc} */ - public Object execute(ExecutionEvent event) throws ExecutionException { + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { editor = (MultiPageTaxonEditor) HandlerUtil.getActiveEditor(event); Shell shell = HandlerUtil.getActiveShell(event); IEditorInput input = editor.getEditorInput(); - + if (!(input instanceof TaxonEditorInput)) { logger.error("Editor input is not TaxonEditorInput"); return null; @@ -74,7 +77,7 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme } Synonym synonym = (Synonym) selection.getFirstElement(); - + // Force user to save taxon - not really necessary though, is it? if (!EditorUtil.forceUserSave(editor, shell)) { return null; @@ -82,25 +85,28 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme // Get taxon Taxon taxon = ((TaxonEditorInput) input).getTaxon(); - + TaxonNode parentNode = (TaxonNode) HibernateProxyHelper.deproxy(((TaxonEditorInput) input).getTaxonNode().getParent()); - - List excludeTaxa = null; - - TaxonNode newParentNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Select parent", excludeTaxa, null, null); - + + List excludeTaxa = new ArrayList(); + excludeTaxa.add(taxon.getUuid()); + + TaxonNode newParentNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Select parent", excludeTaxa, null, ((TaxonEditorInput) input).getTaxonNode().getClassification()); + + if(newParentNode != null){ - + // TODO get synonyms from homotypical group and add them as homotypic synonyms to new accepted taxon // apply confirmation dialog HomotypicalGroup group = synonym.getHomotypicGroup(); Set namesInGroup = group.getTypifiedNames(); // FIXME with this implementation we can not create a taxonNode that is a direct child of the classification node - AbstractPostOperation operation = new ChangeSynonymToAcceptedTaxonOperation("Change synonym to accepted taxon", EditorUtil.getUndoContext(), - taxon, newParentNode, synonym, namesInGroup, this, editor); //$NON-NLS-1$ + AbstractPostOperation operation = new ChangeSynonymToAcceptedTaxonOperation("Change synonym to accepted taxon", EditorUtil.getUndoContext(), + taxon, newParentNode, synonym, namesInGroup, this, editor, (ICdmEntitySessionEnabled)editor.getEditorInput()); //$NON-NLS-1$ + EditorUtil.executeOperation(operation); } - + return null; } @@ -108,19 +114,20 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) */ /** {@inheritDoc} */ - public boolean postOperation(CdmBase objectAffectedByOperation) { - + @Override + public boolean postOperation(CdmBase objectAffectedByOperation) { + // Redraw existing editor ((IPostOperationEnabled) editor).postOperation(null); - + editor.doSave(EditorUtil.getMonitor()); - + if (objectAffectedByOperation instanceof TaxonNode) { - + // Open new unsaved editor with existing taxon's parent as temporary parent TaxonNode newNode = (TaxonNode) objectAffectedByOperation; // TaxonNode newNode = parentNode.addChild(newTaxon); - + try { // TODO /* @@ -129,7 +136,7 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme * doesn't work yet. */ EditorUtil.openTaxonNode(newNode.getUuid()); - + } catch (PartInitException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -145,7 +152,8 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme * * @return a boolean. */ - public boolean onComplete() { + @Override + public boolean onComplete() { // TODO Auto-generated method stub return false; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java index 9f76a0967..9047c2a13 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -16,7 +16,7 @@ import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.common.NotDefinedException; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.name.NonViralName; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.Page; @@ -40,22 +40,23 @@ public class CreateHomotypicSynonymHandler extends AbstractHandler implements * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ /** {@inheritDoc} */ - public Object execute(ExecutionEvent event) throws ExecutionException { + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage( Page.NAME); Taxon taxon = editor.getTaxon(); HomotypicalGroup group = taxon.getHomotypicGroup(); - TaxonNameBase newSynonymName = ParseHandler.createEmptyName(); - + NonViralName newSynonymName = ParseHandler.createEmptyName(); + AbstractPostOperation operation; try { - operation = new CreateSynonymInExistingHomotypicalGroupOperation(event.getCommand().getName(), + operation = new CreateSynonymInExistingHomotypicalGroupOperation(event.getCommand().getName(), editor.getUndoContext(), taxon, group, newSynonymName, editor); EditorUtil.executeOperation(operation); } catch (NotDefinedException e) { MessagingUtils.error(getClass(), e); } - + return null; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java index 4d19f059c..45dc4776c 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -21,7 +21,7 @@ import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.name.NonViralName; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.Page; @@ -46,26 +46,27 @@ public class CreateSynonymInHomotypicalGroupHandler extends AbstractHandler * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ /** {@inheritDoc} */ - public Object execute(ExecutionEvent event) throws ExecutionException { + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage( Page.NAME); ISelection menuSelection = HandlerUtil.getCurrentSelection(event); - + Object selecteObject = ((StructuredSelection) menuSelection).getFirstElement(); - + if(! (selecteObject instanceof Synonym)){ return null; } - - + + Synonym synonym = (Synonym) selecteObject; - + HomotypicalGroup group = synonym.getHomotypicGroup(); - - TaxonNameBase newSynonymName = ParseHandler.createEmptyName(); - + + NonViralName newSynonymName = ParseHandler.createEmptyName(); + AbstractPostOperation operation; - + try { operation = new CreateSynonymInExistingHomotypicalGroupOperation(event.getCommand().getName(), editor.getUndoContext(), editor.getTaxon(), group, newSynonymName, editor); @@ -73,7 +74,7 @@ public class CreateSynonymInHomotypicalGroupHandler extends AbstractHandler } catch (NotDefinedException e) { logger.warn("Command name not set"); } - + return null; } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java index ed85b64c0..b5851aa77 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java @@ -23,6 +23,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.editor.Messages; import eu.etaxonomy.taxeditor.editor.Page; import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor; import eu.etaxonomy.taxeditor.editor.name.operation.DeleteMisapplicationOperation; @@ -32,10 +33,9 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; /** - *

DeleteTaxonBaseHandler class.

- * * @author n.hoffmann * @created 21.04.2009 * @version 1.0 @@ -43,9 +43,6 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler, IPostOperationEnabled { TaxonNameEditor editor; - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ /** {@inheritDoc} */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { @@ -58,12 +55,6 @@ public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler, return null; } - /** - * @param editor - * @param selectedElement - * @param operation - * @param commandName - */ protected void doExecute(ExecutionEvent event, TaxonNameEditor editor, Object selectedElement) { AbstractPostOperation operation = null; String commandName = null; @@ -85,18 +76,26 @@ public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler, } else if (selectedElement instanceof Taxon){ //TODO: how to get the actual classification - if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Are you sure you want to delete the selected taxon?")){ + if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), Messages.DeleteTaxonBaseHandler_CONFIRM_DELETION, Messages.DeleteTaxonBaseHandler_REALLY_DELETE_TAXON)){ return ; } IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); - operation = new DeleteTaxonOperation(commandName, editor.getUndoContext(),(Taxon) selectedElement, new TaxonDeletionConfigurator(), null, activePage, this, editor); + operation = new DeleteTaxonOperation(commandName, + editor.getUndoContext(), + (Taxon) selectedElement, + new TaxonDeletionConfigurator(), + null, + activePage, + this, + editor, + (ICdmEntitySessionEnabled)editor.getEditorInput()); //editor.dispose(); } else { - throw new IllegalArgumentException("Element has to be Synonym, Misapplication or Concept"); + throw new IllegalArgumentException(Messages.DeleteTaxonBaseHandler_ELEMENT_MUST_BE_SYNONYM_MISAPP_CONCEPT); } AbstractUtility.executeOperation(operation); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/MoveSynonymToAnotherAcceptedTaxonHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/MoveSynonymToAnotherAcceptedTaxonHandler.java index 82198663a..bb5fb10ac 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/MoveSynonymToAnotherAcceptedTaxonHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/MoveSynonymToAnotherAcceptedTaxonHandler.java @@ -1,82 +1,90 @@ -package eu.etaxonomy.taxeditor.editor.name.handler; - -import java.util.UUID; - -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.core.commands.common.NotDefinedException; -import org.eclipse.core.commands.operations.IUndoContext; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.handlers.HandlerUtil; - -import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; -import eu.etaxonomy.cdm.model.taxon.Synonym; -import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.cdm.model.taxon.TaxonNode; -import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; -import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; -import eu.etaxonomy.taxeditor.editor.name.operation.MoveSynonymToAnotherAcceptedTaxonOperation; -import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; -import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; - -public class MoveSynonymToAnotherAcceptedTaxonHandler extends AbstractHandler implements IPostOperationEnabled { - private static final Logger logger = Logger - .getLogger(MoveSynonymToAnotherAcceptedTaxonHandler.class); - private MultiPageTaxonEditor editor; - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - editor = (MultiPageTaxonEditor) HandlerUtil.getActiveEditor(event); - Shell shell = HandlerUtil.getActiveShell(event); - IEditorInput input = editor.getEditorInput(); - if (!EditorUtil.forceUserSave(editor, shell)) { - return null; - } - - if (!(input instanceof TaxonEditorInput)) { - logger.error("Editor input is not TaxonEditorInput"); - return null; - } - - // Get synonym from selection - StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event); - if (!(selection.getFirstElement() instanceof Synonym)) { - logger.error("Selection does not contain a Synonym"); - return null; - } - - Synonym synonym = (Synonym) selection.getFirstElement(); - TaxonNode newParentNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Select new accepted taxon", null, null, null); - Taxon oldParent = ((TaxonEditorInput)input).getTaxon(); - - MoveSynonymToAnotherAcceptedTaxonOperation operation = new MoveSynonymToAnotherAcceptedTaxonOperation("Change accepted Taxon of Synonym", EditorUtil.getUndoContext(), - oldParent.getUuid(), synonym.getUuid(), newParentNode.getTaxon(), editor); - - EditorUtil.executeOperation(operation); - - - return null; - } - - @Override - public boolean postOperation(CdmBase objectAffectedByOperation) { - // TODO Auto-generated method stub - return false; - } - - @Override - public boolean onComplete() { - // TODO Auto-generated method stub - return false; - } - - - -} +package eu.etaxonomy.taxeditor.editor.name.handler; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +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.StructuredSelection; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.taxon.Synonym; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; +import eu.etaxonomy.taxeditor.editor.name.operation.MoveSynonymToAnotherAcceptedTaxonOperation; +import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; + +public class MoveSynonymToAnotherAcceptedTaxonHandler extends AbstractHandler implements IPostOperationEnabled { + private static final Logger logger = Logger + .getLogger(MoveSynonymToAnotherAcceptedTaxonHandler.class); + private MultiPageTaxonEditor editor; + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + editor = (MultiPageTaxonEditor) HandlerUtil.getActiveEditor(event); + Shell shell = HandlerUtil.getActiveShell(event); + IEditorInput input = editor.getEditorInput(); + // Get synonym from selection before possible save dialog + // because the selection will be null if save dialog is shown + StructuredSelection selection = (StructuredSelection) HandlerUtil.getCurrentSelection(event); + + if (!EditorUtil.forceUserSave(editor, shell)) { + return null; + } + + if (!(input instanceof TaxonEditorInput)) { + logger.error("Editor input is not TaxonEditorInput"); + return null; + } + + if (selection==null || !(selection.getFirstElement() instanceof Synonym)) { + MessagingUtils.warningDialog("No selection", this, "No synonym selected"); + logger.error("Selection does not contain a Synonym"); + return null; + } + + Synonym synonym = (Synonym) selection.getFirstElement(); + Taxon oldParent = ((TaxonEditorInput)input).getTaxon(); + List excludeTaxa = new ArrayList(); + excludeTaxa.add(oldParent.getUuid()); + + + TaxonNode newParentNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Select new accepted taxon", excludeTaxa, null, ((TaxonEditorInput)input).getTaxonNode().getClassification()); + + if(newParentNode!=null){ + MoveSynonymToAnotherAcceptedTaxonOperation operation = new MoveSynonymToAnotherAcceptedTaxonOperation("Change accepted Taxon of Synonym", EditorUtil.getUndoContext(), + oldParent.getUuid(), synonym.getUuid(), newParentNode.getTaxon(), editor); + + AbstractUtility.executeOperation(operation); + + } + return null; + } + + @Override + public boolean postOperation(CdmBase objectAffectedByOperation) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean onComplete() { + // TODO Auto-generated method stub + return false; + } + + + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java index d8c0e370f..014f92da1 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -28,6 +28,7 @@ import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; import eu.etaxonomy.taxeditor.editor.name.operation.SwapSynonymAndAcceptedOperation; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; /** *

SwapSynonymAndAcceptedHandler class.

@@ -47,26 +48,31 @@ public class SwapSynonymAndAcceptedHandler extends AbstractHandler implements * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ /** {@inheritDoc} */ - public Object execute(ExecutionEvent event) throws ExecutionException { + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { editor = EditorUtil.getActiveMultiPageTaxonEditor(); Shell shell = HandlerUtil.getActiveShell(event); Synonym synonym = (Synonym) EditorUtil.getSelection(event).getFirstElement(); - + // Force user to save taxon - not really necessary though, is it? if (!EditorUtil.forceUserSave(editor, shell)) { return null; } - + try { - SwapSynonymAndAcceptedOperation operation = new SwapSynonymAndAcceptedOperation(event.getCommand().getName(), editor.getUndoContext(), - editor.getTaxon(), synonym, this); - + SwapSynonymAndAcceptedOperation operation = new SwapSynonymAndAcceptedOperation(event.getCommand().getName(), + editor.getUndoContext(), + editor.getTaxon(), + synonym, + this, + (ICdmEntitySessionEnabled)editor.getEditorInput()); + EditorUtil.executeOperation(operation); - + } catch (NotDefinedException e) { logger.warn("Command name not set"); - } + } return null; } @@ -78,15 +84,15 @@ public class SwapSynonymAndAcceptedHandler extends AbstractHandler implements public boolean postOperation(CdmBase objectAffectedByOperation) { // Redraw existing editor //((IPostOperationEnabled) editor).postOperation(null); - + editor.doSave(EditorUtil.getMonitor()); editor.close(true); - + if (objectAffectedByOperation instanceof Taxon) { - + taxon = (Taxon) objectAffectedByOperation; - - + + } return true; } @@ -98,14 +104,15 @@ public class SwapSynonymAndAcceptedHandler extends AbstractHandler implements public boolean onComplete() { Display display = Display.getCurrent(); display.asyncExec(new Runnable() { - public void run() { + @Override + public void run() { try { EditorUtil.openTaxonBase(taxon.getUuid()); - + } catch (Exception e) { MessagingUtils.warningDialog("Could not open editor for taxon", this, e.getMessage()); } - + } }); return true; diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeConceptToSynonymOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeConceptToSynonymOperation.java index e36579916..d964006d3 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeConceptToSynonymOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeConceptToSynonymOperation.java @@ -21,9 +21,9 @@ import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; import eu.etaxonomy.taxeditor.model.MessagingUtils; @@ -93,13 +93,17 @@ public class ChangeConceptToSynonymOperation extends TaxonNameBase synonymName = concept.getName(); Synonym synonym = null; try { - synonym = CdmStore.getService(ITaxonService.class).changeRelatedTaxonToSynonym(concept, element, taxonRelationship.getType(), null); + synonym = + (Synonym) CdmStore.getService(ITaxonService.class).changeRelatedTaxonToSynonym(concept.getUuid(), + element.getUuid(), + taxonRelationship.getType(), + null).getCdmEntity(); } catch (DataChangeNoRollbackException e) { // TODO Auto-generated catch block e.printStackTrace(); } - - + + return postExecute(synonym); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicalGroupBasionymOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicalGroupBasionymOperation.java index 679b3396e..4804d525e 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicalGroupBasionymOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicalGroupBasionymOperation.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -16,10 +16,8 @@ import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.Taxon; @@ -36,7 +34,7 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; */ public class ChangeHomotypicalGroupBasionymOperation extends AbstractPostTaxonOperation { - private TaxonBase taxonBase; + private final TaxonBase taxonBase; /** *

Constructor for ChangeHomotypicalGroupBasionymOperation.

@@ -50,7 +48,7 @@ public class ChangeHomotypicalGroupBasionymOperation extends public ChangeHomotypicalGroupBasionymOperation(String text, IUndoContext undoContext, Taxon taxon, TaxonBase taxonBase, IPostOperationEnabled postOperationEnabled) { super(text, undoContext, taxon, postOperationEnabled); - + this.taxonBase = taxonBase; } @@ -61,16 +59,16 @@ public class ChangeHomotypicalGroupBasionymOperation extends @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - + TaxonNameBase name = taxonBase.getName(); - + monitor.worked(20); name = HibernateProxyHelper.deproxy(name, TaxonNameBase.class); HomotypicalGroup group = HibernateProxyHelper.deproxy(name.getHomotypicalGroup(), HomotypicalGroup.class); TaxonNameBase oldBasionym = name.getBasionym(); - + name.setAsGroupsBasionym(); - + monitor.worked(40); oldBasionym = HibernateProxyHelper.deproxy(oldBasionym, TaxonNameBase.class); if (oldBasionym != null){ @@ -80,6 +78,7 @@ public class ChangeHomotypicalGroupBasionymOperation extends postExecute(oldBasionymTaxonBase); } } + return postExecute(taxonBase); } @@ -103,9 +102,9 @@ public class ChangeHomotypicalGroupBasionymOperation extends // TODO replace w method from cdmlib // FIXME this is also old code: reimplement // CdmUtil.setGroupBasionym(synonym.getName()); - + return postExecute(taxonBase); } - - + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java index 1b5349173..c62759b72 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java @@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -40,7 +41,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPostOperation { private Taxon newTaxon; - private Synonym synonym; + private final Synonym synonym; private final ITaxonTreeNode parentNode; private TaxonNode newNode; @@ -59,9 +60,16 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. */ - public ChangeSynonymToAcceptedTaxonOperation(String label, IUndoContext undoContext, - Taxon taxon, ITaxonTreeNode parentNode, Synonym synonym, Set namesInHomotypicalGroup, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); + public ChangeSynonymToAcceptedTaxonOperation(String label, + IUndoContext undoContext, + Taxon taxon, + ITaxonTreeNode parentNode, + Synonym synonym, + Set namesInHomotypicalGroup, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.element = taxon; this.parentNode = parentNode; @@ -78,23 +86,30 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos throws ExecutionException { try { - newTaxon = CdmStore.getService(ITaxonService.class).changeSynonymToAcceptedTaxon(synonym, element, true, true, null, null); + newNode = (TaxonNode) CdmStore.getService(ITaxonService.class).changeSynonymToAcceptedTaxon(synonym.getUuid(), + element.getUuid(), + parentNode.getUuid(), + true, + true, + null, + null).getCdmEntity(); } catch (HomotypicalGroupChangeException e) { MessagingUtils.warningDialog("Operation may lead to inconsistent data", getClass(), e.getMessage()); return postExecute(null); } monitor.worked(20); + //newTaxon = (Taxon) CdmStore.getService(ITaxonService.class).merge(newTaxon); + //element.removeSynonym(synonym); - element.removeSynonym(synonym); - newNode = parentNode.addChildTaxon(newTaxon, null, null); /*if(namesInHomotypicGroup != null){ Taxon taxon = newNode.getTaxon(); for (TaxonNameBase synonymName : namesInHomotypicGroup){ taxon.addHomotypicSynonymName(synonymName, null, null); - + } }*/ + //newNode = CdmStore.getService(ITaxonNodeService.class).merge(newNode); monitor.worked(40); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToMisapplicationOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToMisapplicationOperation.java index 65b9e1797..2360ceff0 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToMisapplicationOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToMisapplicationOperation.java @@ -17,9 +17,7 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import eu.etaxonomy.cdm.api.service.ITaxonNodeService; import eu.etaxonomy.cdm.api.service.ITaxonService; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; @@ -81,7 +79,12 @@ public class ChangeSynonymToMisapplicationOperation extends AbstractPostTaxonOpe // add misapplied name to taxon // TODO add microcitation for misapplied name to property sheet (if microcitation is indeed needed?!) element.addMisappliedName(misapplication, null, null);*/ - misapplication = CdmStore.getService(ITaxonService.class).changeSynonymToRelatedTaxon(synonym, element, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null); + misapplication = + (Taxon) CdmStore.getService(ITaxonService.class).changeSynonymToRelatedTaxon(synonym.getUuid(), + element.getUuid(), + TaxonRelationshipType.MISAPPLIED_NAME_FOR(), + null, + null).getCdmEntity(); // redraw editor if exists return postExecute(misapplication); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExistingHomotypicalGroupOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExistingHomotypicalGroupOperation.java index d0d3d74c3..c53f5d041 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExistingHomotypicalGroupOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExistingHomotypicalGroupOperation.java @@ -16,7 +16,7 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.name.NonViralName; import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; @@ -33,7 +33,7 @@ public class CreateSynonymInExistingHomotypicalGroupOperation extends AbstractPostTaxonOperation { private final HomotypicalGroup group; - private final TaxonNameBase newSynonymName; + private final NonViralName newSynonymName; private SynonymRelationship synonymRelationship; @@ -48,7 +48,7 @@ public class CreateSynonymInExistingHomotypicalGroupOperation extends * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. */ public CreateSynonymInExistingHomotypicalGroupOperation(String label, - IUndoContext undoContext, Taxon taxon, HomotypicalGroup group, TaxonNameBase newSynonymName, IPostOperationEnabled postOperationEnabled) { + IUndoContext undoContext, Taxon taxon, HomotypicalGroup group, NonViralName newSynonymName, IPostOperationEnabled postOperationEnabled) { super(label, undoContext, taxon, postOperationEnabled); this.group = group; this.newSynonymName = newSynonymName; diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java index d32db52ea..0c03146a4 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java @@ -21,7 +21,6 @@ import eu.etaxonomy.cdm.api.service.config.NameDeletionConfigurator; import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.model.reference.Reference; import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; @@ -68,20 +67,20 @@ public class DeleteMisapplicationOperation extends AbstractPostTaxonOperation { // Find misapplication relation, save citation information - for (TaxonRelationship relationship : element.getTaxonRelations()) { - if (relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) - && relationship.getFromTaxon().equals(misapplication)) { - citation = relationship.getCitation(); - microcitation = relationship.getCitationMicroReference(); - } - } +// for (TaxonRelationship relationship : element.getTaxonRelations()) { +// if (relationship.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) +// && relationship.getFromTaxon().equals(misapplication)) { +// citation = relationship.getCitation(); +// microcitation = relationship.getCitationMicroReference(); +// } +// } monitor.worked(20); // Remove misapplied name relation from taxon element.removeTaxon(misapplication, TaxonRelationshipType.MISAPPLIED_NAME_FOR()); ICdmApplicationConfiguration controller; - controller = (ICdmApplicationConfiguration) CdmStore.getCurrentApplicationConfiguration(); + controller = CdmStore.getCurrentApplicationConfiguration(); ITaxonService service = controller.getTaxonService(); TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java index fdef1cd35..d005de543 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java @@ -16,7 +16,6 @@ import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.dialogs.MessageDialog; import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; import eu.etaxonomy.cdm.api.service.DeleteResult; @@ -24,6 +23,8 @@ import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin; +import eu.etaxonomy.taxeditor.model.DeleteResultMessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -71,19 +72,19 @@ public class DeleteSynonymOperation extends AbstractPostTaxonOperation { ICdmApplicationConfiguration controller; - controller = (ICdmApplicationConfiguration) CdmStore.getCurrentApplicationConfiguration(); + controller = CdmStore.getCurrentApplicationConfiguration(); ITaxonService service = controller.getTaxonService(); if (synonym.getId() == 0){ element.removeSynonym(synonym); } else { - - DeleteResult result = service.deleteSynonym(synonym, null); +//TODO: this should be moved to the handler, the operations should not contain ui code + DeleteResult result = service.deleteSynonym(synonym.getUuid(), element.getUuid(), null); if (result.isError()){ - MessageDialog.openError(null, "Delete failed", result.toString()); + DeleteResultMessagingUtils.messageDialogWithDetails(result, "Delete failed", TaxeditorEditorPlugin.PLUGIN_ID); } else if (!result.getUpdatedObjects().isEmpty()){ - MessageDialog.openInformation(null, "Delete successfull", "The Synonym could be deleted, but there is an updated object: " + result.toString()); + DeleteResultMessagingUtils.messageDialogWithDetails(result, "The Synonym could be deleted, but related object(s) could not be deleted", TaxeditorEditorPlugin.PLUGIN_ID); } } // taxon.removeSynonym(synonym); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java index c65dda535..5d4c6f945 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java @@ -11,15 +11,20 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; public class DeleteTaxonBaseOperation extends AbstractPersistentPostOperation { protected TaxonDeletionConfigurator configurator; - public DeleteTaxonBaseOperation(String label, IUndoContext undoContext, - TaxonDeletionConfigurator configurator, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, - conversationEnabled); + public DeleteTaxonBaseOperation(String label, + IUndoContext undoContext, + TaxonDeletionConfigurator configurator, + IWorkbenchPage activePage, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.configurator = configurator; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java index 8c51e6668..48632e45b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java @@ -8,7 +8,6 @@ import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.ui.IWorkbenchPage; import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration; @@ -19,17 +18,26 @@ import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonNode; -import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.editor.internal.TaxeditorEditorPlugin; +import eu.etaxonomy.taxeditor.model.DeleteResultMessagingUtils; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; public class DeleteTaxonOperation extends DeleteTaxonBaseOperation{ private final Classification classification; - public DeleteTaxonOperation(String label, IUndoContext undoContext, - Taxon taxon, TaxonDeletionConfigurator configurator, Classification classification, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, configurator, activePage, postOperationEnabled, conversationEnabled); + public DeleteTaxonOperation(String label, + IUndoContext undoContext, + Taxon taxon, + TaxonDeletionConfigurator configurator, + Classification classification, + IWorkbenchPage activePage, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, configurator, activePage, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.element = taxon; Set nodes = taxon.getTaxonNodes(); @@ -64,12 +72,12 @@ public class DeleteTaxonOperation extends DeleteTaxonBaseOperation{ ITaxonService service = controller.getTaxonService(); - DeleteResult result = service.deleteTaxon(element.getUuid(), configurator, classification.getUuid()); + if (result.isError()){ - MessageDialog.openError(null, "Delete failed", result.toString()); + DeleteResultMessagingUtils.messageDialogWithDetails(result, "Delete failed", TaxeditorEditorPlugin.PLUGIN_ID); } else if (!result.getUpdatedObjects().isEmpty()){ - MessagingUtils.informationDialog("Delete successfull", result.toString()); + DeleteResultMessagingUtils.messageDialogWithDetails(result, "The Taxon was deleted, but related object(s) could not be deleted", TaxeditorEditorPlugin.PLUGIN_ID); } monitor.worked(40); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/MoveSynonymToAnotherAcceptedTaxonOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/MoveSynonymToAnotherAcceptedTaxonOperation.java index 2f0d0900f..ac1aca5ec 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/MoveSynonymToAnotherAcceptedTaxonOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/MoveSynonymToAnotherAcceptedTaxonOperation.java @@ -12,12 +12,9 @@ import org.eclipse.core.runtime.IStatus; import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException; -import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.name.HomotypicalGroup; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; -import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor; @@ -34,8 +31,8 @@ public class MoveSynonymToAnotherAcceptedTaxonOperation extends private final Synonym synonym; private final Taxon oldTaxon; - - + + /** *

Constructor for MoveSynonymToAnotherAcceptedTaxon.

* @@ -43,12 +40,12 @@ public class MoveSynonymToAnotherAcceptedTaxonOperation extends * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object. * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object. - + * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. */ public MoveSynonymToAnotherAcceptedTaxonOperation(String label, IUndoContext undoContext, UUID oldTaxonUUID, UUID synonymUUID, Taxon taxon, IPostOperationEnabled postOperationEnabled) { - + super(label, undoContext, taxon, postOperationEnabled); List propertyPaths = new ArrayList(); propertyPaths.add("synonymRelations"); @@ -69,28 +66,34 @@ public class MoveSynonymToAnotherAcceptedTaxonOperation extends TaxonNameBase synonymName = synonym.getName(); monitor.worked(20); - + // Switch groups - + monitor.worked(40); SynonymRelationship synRel = synonym.getSynonymRelations().iterator().next(); - - - + + + ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit(); - - - + + + try { - synRel = CdmStore.getService(ITaxonService.class).moveSynonymToAnotherTaxon(synRel, this.element, true, synRel.getType(), null, null, true); + synRel = (SynonymRelationship) CdmStore.getService(ITaxonService.class).moveSynonymToAnotherTaxon(synRel, + this.element.getUuid(), + true, + synRel.getType(), + null, + null, + true).getCdmEntity(); } catch (HomotypicalGroupChangeException e) { // TODO Auto-generated catch block e.printStackTrace(); } ((TaxonNameEditor)EditorUtil.getActiveMultiPageTaxonEditor().getActiveEditor()).getConversationHolder().commit(); - - + + // Redraw editor if it exists return postExecute(synRel.getSynonym()); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java index 1c7da40a8..507b2cfe5 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java @@ -17,12 +17,14 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.api.service.UpdateResult; import eu.etaxonomy.cdm.model.taxon.Synonym; import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -48,8 +50,9 @@ public class SwapSynonymAndAcceptedOperation extends AbstractPostTaxonOperation * @param synonym a {@link eu.etaxonomy.cdm.model.taxon.Synonym} object. */ public SwapSynonymAndAcceptedOperation(String label, IUndoContext undoContext, - Taxon taxon, Synonym synonym, IPostOperationEnabled postOperationEnabled) { - super("Swap Synonym And Accepted Taxon Operation", undoContext, taxon, postOperationEnabled); + Taxon taxon, Synonym synonym, IPostOperationEnabled postOperationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super("Swap Synonym And Accepted Taxon Operation", undoContext, taxon, postOperationEnabled, cdmEntitySessionEnabled); this.synonym = synonym; } @@ -64,7 +67,7 @@ public class SwapSynonymAndAcceptedOperation extends AbstractPostTaxonOperation monitor.worked(20); - CdmStore.getService(ITaxonService.class).swapSynonymAndAcceptedTaxon(synonym, element); + UpdateResult result = CdmStore.getService(ITaxonService.class).swapSynonymAndAcceptedTaxon(synonym.getUuid(), element.getUuid()); monitor.worked(40); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java index e5665f393..cdecde04a 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/checklist/ChecklistEditor.java @@ -12,6 +12,7 @@ package eu.etaxonomy.taxeditor.editor.view.checklist; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -57,6 +58,7 @@ import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.ITaxonNodeService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.DefinedTermBase; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.Taxon; @@ -75,6 +77,8 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.preference.Resources; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -87,7 +91,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @version 1.0 */ public class ChecklistEditor extends EditorPart implements ISelectionListener, IPartContentHasFactualData, - IConversationEnabled, IContextListener, IPartContentHasDetails, IDirtyMarkable { + IConversationEnabled, IContextListener, IPartContentHasDetails, IDirtyMarkable, ICdmEntitySessionEnabled { private static final Logger logger = Logger.getLogger(ChecklistEditor.class); /** @@ -181,6 +185,8 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I private Label statusLabel; + private final ICdmEntitySession cdmEntitySession; + private SortedSet terms = null; private ToolItem toolItem; private ChecklistDropdownSelectionListener dropListener; @@ -206,6 +212,7 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I *

*/ public ChecklistEditor() { + cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); } /** {@inheritDoc} */ @@ -439,12 +446,14 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I /** {@inheritDoc} */ @Override public void dispose() { + cdmEntitySession.dispose(); super.dispose(); } /** {@inheritDoc} */ @Override public void setFocus() { + cdmEntitySession.bind(); viewer.getControl().setFocus(); } @@ -757,4 +766,31 @@ public class ChecklistEditor extends EditorPart implements ISelectionListener, I public boolean isDirty() { return dirty; } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() + */ + @Override + public ICdmEntitySession getCdmEntitySession() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public Collection getRootEntities() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + // TODO Auto-generated method stub + return null; + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java index 92f55fcf1..bab0e949c 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/ConceptViewPart.java @@ -137,4 +137,5 @@ public class ConceptViewPart extends AbstractCdmEditorViewPart implements IPartC getViewer().refresh(); super.changed(object); } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java index fea7f0511..01ca52b88 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/concept/graph/ConceptGraphView.java @@ -123,4 +123,5 @@ public class ConceptGraphView extends AbstractCdmEditorViewPart { return layoutAlgoritm; } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/SpecimenImportView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/SpecimenImportView.java index d4a254049..298b1f4b6 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/SpecimenImportView.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/SpecimenImportView.java @@ -16,9 +16,11 @@ import java.util.ArrayList; import java.util.Collection; import org.apache.http.client.ClientProtocolException; +import org.eclipse.core.runtime.jobs.Job; import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseQueryServiceWrapper; import eu.etaxonomy.cdm.io.common.CdmDefaultImport; +import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE; import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.taxeditor.editor.view.dataimport.transientServices.TransientCdmRepository; @@ -65,14 +67,19 @@ public class SpecimenImportView extends DataImportView this will also get rid of the transient services InputStream resultStream; resultStream = new BioCaseQueryServiceWrapper().query(query, endPoint); - Abcd206ImportConfigurator configurator = Abcd206ImportConfigurator.NewInstance(resultStream, null, false); + Abcd206ImportConfigurator configurator = Abcd206ImportConfigurator.NewInstance(null, null); TransientCdmRepository repo = new TransientCdmRepository(CdmStore.getCurrentApplicationConfiguration()); configurator.setCdmAppController(repo); configurator.setAddMediaAsMediaSpecimen(true); - - CdmDefaultImport importer = new CdmDefaultImport(); - importer.invoke(configurator); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + Job job = CdmStore.getImportManager().createIOServiceJob(configurator, resultStream, SOURCE_TYPE.INPUTSTREAM); + CdmStore.getImportManager().run(job); + } else { + configurator.setSource(resultStream); + CdmDefaultImport importer = new CdmDefaultImport(); + importer.invoke(configurator); + } results = repo.getUnits(); setResults(results); } catch (ClientProtocolException e) { diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java index d3e4b1231..c1f84f998 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java @@ -44,6 +44,7 @@ import eu.etaxonomy.cdm.model.media.Rights; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -792,4 +793,51 @@ public class TransientAgentService implements IAgentService { return defaultService.merge(arg0); } + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(AgentBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public AgentBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IAgentService#convertPerson2Team(java.util.UUID) + */ + @Override + public Team convertPerson2Team(UUID arg0) throws MergeException, IllegalArgumentException { + return defaultService.convertPerson2Team(arg0); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IAgentService#convertTeam2Person(java.util.UUID) + */ + @Override + public Person convertTeam2Person(UUID arg0) throws MergeException { + return defaultService.convertTeam2Person(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCdmRepository.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCdmRepository.java index aebdee8f9..13b11ce11 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCdmRepository.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCdmRepository.java @@ -33,10 +33,12 @@ import eu.etaxonomy.cdm.api.service.IGroupService; import eu.etaxonomy.cdm.api.service.IIdentificationKeyService; import eu.etaxonomy.cdm.api.service.ILocationService; import eu.etaxonomy.cdm.api.service.IMediaService; +import eu.etaxonomy.cdm.api.service.IMetadataService; import eu.etaxonomy.cdm.api.service.INameService; import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService; import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.IProgressMonitorService; import eu.etaxonomy.cdm.api.service.IReferenceService; import eu.etaxonomy.cdm.api.service.IService; import eu.etaxonomy.cdm.api.service.ITaxonNodeService; @@ -418,4 +420,20 @@ public class TransientCdmRepository implements ICdmApplicationConfiguration { public IAnnotationService getAnnotationService() { return defaultApplicationConfiguration.getAnnotationService(); } + + /** + * {@inheritDoc} + */ + @Override + public IProgressMonitorService getProgressMonitorService() { + return defaultApplicationConfiguration.getProgressMonitorService(); + } + + /** + * {@inheritDoc} + */ + @Override + public IMetadataService getMetadataService() { + return defaultApplicationConfiguration.getMetadataService(); + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientClassificationService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientClassificationService.java index 07fdcf242..9a8a1b83a 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientClassificationService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientClassificationService.java @@ -46,6 +46,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -646,8 +647,8 @@ public class TransientClassificationService implements IClassificationService { * @see eu.etaxonomy.cdm.api.service.IClassificationService#getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(eu.etaxonomy.cdm.model.taxon.Classification) */ @Override - public List> getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(Classification classification) { - return defaultService.getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(classification); + public List> getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(Classification classification, List excludeTaxa) { + return defaultService.getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(classification, excludeTaxa); } /** @@ -950,6 +951,45 @@ public class TransientClassificationService implements IClassificationService { return defaultService.merge(arg0); } + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(Classification arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public Classification loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + + @Override + public List> getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification( + UUID classificationUuid, List excludeTaxa) { + + return defaultService.getTaxonNodeUuidAndTitleCacheOfAcceptedTaxaByClassification(classificationUuid, excludeTaxa); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCollectionService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCollectionService.java index 64936020c..006809900 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCollectionService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCollectionService.java @@ -38,6 +38,7 @@ import eu.etaxonomy.cdm.model.occurrence.Collection; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -726,4 +727,37 @@ public class TransientCollectionService implements ICollectionService { return defaultService.merge(arg0); } + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(Collection arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public Collection loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java index 4640d7e3a..ee1e09b6b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java @@ -54,6 +54,7 @@ import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.TermDto; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; @@ -545,7 +546,7 @@ public class TransientDescriptionService implements IDescriptionService { */ @Deprecated @Override - public Pager getDescriptionElements(DescriptionBase description, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { + public Pager getDescriptionElements(DescriptionBase description, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { return defaultService.getDescriptionElements(description, features, type, pageSize, pageNumber, propertyPaths); } @@ -625,7 +626,7 @@ public class TransientDescriptionService implements IDescriptionService { * @see eu.etaxonomy.cdm.api.service.IDescriptionService#pageDescriptionElements(eu.etaxonomy.cdm.model.description.DescriptionBase, java.lang.Class, java.util.Set, java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List) */ @Override - public Pager pageDescriptionElements(DescriptionBase description, Class descriptionType, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { + public Pager pageDescriptionElements(DescriptionBase description, Class descriptionType, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { return defaultService.pageDescriptionElements(description, descriptionType, features, type, pageSize, pageNumber, propertyPaths); } @@ -700,7 +701,7 @@ public class TransientDescriptionService implements IDescriptionService { */ @Deprecated @Override - public List listDescriptionElements(DescriptionBase description, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { + public List listDescriptionElements(DescriptionBase description, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { return defaultService.listDescriptionElements(description, features, type, pageSize, pageNumber, propertyPaths); } @@ -793,7 +794,7 @@ public class TransientDescriptionService implements IDescriptionService { * @see eu.etaxonomy.cdm.api.service.IDescriptionService#listDescriptionElements(eu.etaxonomy.cdm.model.description.DescriptionBase, java.lang.Class, java.util.Set, java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List) */ @Override - public List listDescriptionElements(DescriptionBase description, Class descriptionType, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { + public List listDescriptionElements(DescriptionBase description, Class descriptionType, Set features, Class type, Integer pageSize, Integer pageNumber, List propertyPaths) { return defaultService.listDescriptionElements(description, descriptionType, features, type, pageSize, pageNumber, propertyPaths); } @@ -1196,4 +1197,47 @@ public class TransientDescriptionService implements IDescriptionService { return defaultService.moveDescriptionElementsToDescription(arg0, arg1, arg2, arg3); } + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(DescriptionBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public DescriptionBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescription(java.util.UUID, java.util.UUID) + */ + @Override + public UpdateResult moveTaxonDescription(UUID arg0, UUID arg1) { + + return defaultService.moveTaxonDescriptions(arg0, arg1); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java index 579e6fce7..30289e812 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java @@ -63,6 +63,7 @@ import eu.etaxonomy.cdm.model.name.TypeDesignationBase; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -1197,4 +1198,37 @@ public class TransientNameService implements INameService { public List merge(List arg0) { return defaultService.merge(arg0); } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(TaxonNameBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public TaxonNameBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java index 4b5d0106a..9d43c0087 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java @@ -41,7 +41,6 @@ import eu.etaxonomy.cdm.api.service.search.SearchResult; import eu.etaxonomy.cdm.api.service.util.TaxonRelationshipEdge; import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; import eu.etaxonomy.cdm.model.common.Annotation; -import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.common.DefinedTerm; import eu.etaxonomy.cdm.model.common.ICdmBase; import eu.etaxonomy.cdm.model.common.ISourceable; @@ -58,8 +57,8 @@ import eu.etaxonomy.cdm.model.media.Media; import eu.etaxonomy.cdm.model.media.Rights; import eu.etaxonomy.cdm.model.molecular.DnaSample; import eu.etaxonomy.cdm.model.molecular.Sequence; -import eu.etaxonomy.cdm.model.molecular.SingleRead; import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.occurrence.DerivationEvent; import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent; @@ -70,6 +69,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -916,11 +916,6 @@ public class TransientOccurenceService implements IOccurrenceService { return defaultService.getNonCascadedAssociatedElements(specimen); } - @Override - public DeleteResult deleteDerivateHierarchy(CdmBase from, SpecimenDeleteConfigurator config) { - return defaultService.deleteDerivateHierarchy(from, config); - } - @Override public DeleteResult delete(SpecimenOrObservationBase specimen, SpecimenDeleteConfigurator config) { return defaultService.delete(specimen, config); @@ -932,12 +927,6 @@ public class TransientOccurenceService implements IOccurrenceService { return defaultService.listIndividualsAssociations(specimen, limit, start, orderHints, propertyPaths); } - @Override - public Collection listTypeDesignations(SpecimenOrObservationBase specimen, - Integer limit, Integer start, List orderHints, List propertyPaths) { - return defaultService.listTypeDesignations(specimen, limit, start, orderHints, propertyPaths); - } - @Override public Collection> listDescriptionsWithDescriptionSpecimen( SpecimenOrObservationBase specimen, Integer limit, Integer start, List orderHints, @@ -987,9 +976,6 @@ public class TransientOccurenceService implements IOccurrenceService { } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IService#delete(java.util.UUID) - */ @Override public DeleteResult delete(UUID uuid) { return defaultService.delete(uuid); @@ -1000,57 +986,124 @@ public class TransientOccurenceService implements IOccurrenceService { return defaultService.delete(arg0); } - @Override - public DeleteResult deleteSingleRead(SingleRead singleRead, Sequence sequence){ - return defaultService.deleteSingleRead(singleRead, sequence); - } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List) - */ @Override public List merge(List arg0) { return defaultService.merge(arg0); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteDerivateHierarchy(java.util.UUID, eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator) + @Override + public UpdateResult moveDerivate(UUID arg0, UUID arg1, UUID arg2) { + return defaultService.moveDerivate(arg0, arg1, arg2); + } + + @Override + public boolean moveDerivate(SpecimenOrObservationBase from, SpecimenOrObservationBase to, DerivedUnit derivate) { + return defaultService.moveDerivate(from, to, derivate); + } + + @Override + public UpdateResult moveSequence(UUID arg0, UUID arg1, UUID arg2) { + return defaultService.moveSequence(arg0, arg1, arg2); + } + + @Override + public Pager getMediainHierarchy(SpecimenOrObservationBase arg0, Integer arg1, Integer arg2, + List arg3) { + return defaultService.getMediainHierarchy(arg0, arg1, arg2, arg3); + } + + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + @Override + public MergeResult merge(SpecimenOrObservationBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /** + * {@inheritDoc} */ @Override - public DeleteResult deleteDerivateHierarchy(UUID arg0, SpecimenDeleteConfigurator arg1) { - return defaultService.deleteDerivateHierarchy(arg0, arg1); + public Collection> listAssociatedTaxa(SpecimenOrObservationBase arg0, Integer arg1, Integer arg2, + List arg3, List arg4) { + return defaultService.listAssociatedTaxa(arg0, arg1, arg2, arg3, arg4); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#deleteSingleRead(java.util.UUID, java.util.UUID) + @Override + public SpecimenOrObservationBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} */ @Override - public DeleteResult deleteSingleRead(UUID arg0, UUID arg1) { - return defaultService.deleteSingleRead(arg0, arg1); + public DeleteResult delete(UUID arg0, SpecimenDeleteConfigurator arg1) { + return defaultService.delete(arg0, arg1); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveDerivate(java.util.UUID, java.util.UUID, java.util.UUID) + /** + * {@inheritDoc} */ @Override - public UpdateResult moveDerivate(UUID arg0, UUID arg1, UUID arg2) { - return defaultService.moveDerivate(arg0, arg1, arg2); + public Pager list(Class arg0, TaxonNameBase arg1, + Integer arg2, Integer arg3, List arg4, List arg5) { + return defaultService.list(arg0, arg1, arg2, arg3, arg4, arg5); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveDerivate(eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase, eu.etaxonomy.cdm.model.occurrence.DerivedUnit) + /** + * {@inheritDoc} */ @Override - public boolean moveDerivate(SpecimenOrObservationBase from, SpecimenOrObservationBase to, DerivedUnit derivate) { - return defaultService.moveDerivate(from, to, derivate); + public Collection listDeterminationEvents(SpecimenOrObservationBase arg0, Integer arg1, + Integer arg2, List arg3, List arg4) { + return defaultService.listDeterminationEvents(arg0, arg1, arg2, arg3, arg4); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IOccurrenceService#moveSequence(java.util.UUID, java.util.UUID, java.util.UUID) + @Override + public Collection> listDeterminedTaxa(SpecimenOrObservationBase arg0, Integer arg1, Integer arg2, + List arg3, List arg4) { + return defaultService.listDeterminedTaxa(arg0, arg1, arg2, arg3, arg4); + } + + @Override + public Collection> listIndividualsAssociationTaxa(SpecimenOrObservationBase arg0, Integer arg1, + Integer arg2, List arg3, List arg4) { + return defaultService.listIndividualsAssociationTaxa(arg0, arg1, arg2, arg3, arg4); + } + + /** + * {@inheritDoc} */ @Override - public UpdateResult moveSequence(UUID arg0, UUID arg1, UUID arg2) { - return defaultService.moveSequence(arg0, arg1, arg2); + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + + @Override + public Collection> listTypeDesignationTaxa(DerivedUnit arg0, Integer arg1, Integer arg2, + List arg3, List arg4) { + return defaultService.listTypeDesignationTaxa(arg0, arg1, arg2, arg3, arg4); + } + + @Override + public Map> listTypeDesignations(Collection arg0, + Integer arg1, Integer arg2, List arg3, List arg4) { + return defaultService.listTypeDesignations(arg0, arg1, arg2, arg3, arg4); + } + + @Override + public Collection listTypeDesignations(DerivedUnit arg0, Integer arg1, Integer arg2, + List arg3, List arg4) { + return defaultService.listTypeDesignations(arg0, arg1, arg2, arg3, arg4); + } + + @Override + public List getAllChildDerivatives(UUID arg0) { + return defaultService.getAllChildDerivatives(arg0); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientReferenceService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientReferenceService.java index 550642d65..605f12b78 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientReferenceService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientReferenceService.java @@ -40,6 +40,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -733,4 +734,38 @@ public class TransientReferenceService implements IReferenceService { public List merge(List arg0) { return defaultService.merge(arg0); } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(Reference arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public Reference loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java index fac79adfb..fc6cf73c4 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java @@ -79,6 +79,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.fetch.CdmFetch; import eu.etaxonomy.cdm.persistence.query.Grouping; @@ -1498,21 +1499,22 @@ public class TransientTaxonService implements ITaxonService { } /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeRelatedTaxonToSynonym(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType) + * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToRelatedTaxon(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String) */ @Override - public UpdateResult changeRelatedTaxonToSynonym(UUID arg0, UUID arg1, TaxonRelationshipType arg2, - SynonymRelationshipType arg3) throws DataChangeNoRollbackException { - return defaultService.changeRelatedTaxonToSynonym(arg0, arg1, arg2, arg3); + public UpdateResult changeSynonymToRelatedTaxon(UUID arg0, UUID arg1, TaxonRelationshipType arg2, Reference arg3, + String arg4) { + return defaultService.changeSynonymToRelatedTaxon(arg0, arg1, arg2, arg3, arg4); } /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToRelatedTaxon(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String) + * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeRelatedTaxonToSynonym(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType, eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType) */ @Override - public UpdateResult changeSynonymToRelatedTaxon(UUID arg0, UUID arg1, TaxonRelationshipType arg2, Reference arg3, - String arg4) { - return defaultService.changeSynonymToRelatedTaxon(arg0, arg1, arg2, arg3, arg4); + public UpdateResult changeRelatedTaxonToSynonym(UUID arg0, UUID arg1, TaxonRelationshipType arg2, + SynonymRelationshipType arg3) throws DataChangeNoRollbackException { + return defaultService.changeRelatedTaxonToSynonym(arg0, arg1, arg2, arg3); + } /* (non-Javadoc) @@ -1523,4 +1525,38 @@ public class TransientTaxonService implements ITaxonService { Reference arg5, String arg6) throws HomotypicalGroupChangeException { return defaultService.changeSynonymToAcceptedTaxon(arg0, arg1, arg2, arg3, arg4, arg5, arg6); } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List, boolean) + */ + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#merge(eu.etaxonomy.cdm.model.common.ICdmBase, boolean) + */ + @Override + public MergeResult merge(TaxonBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.service.IService#loadWithUpdate(java.util.UUID) + */ + @Override + public TaxonBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java index ec9867549..e032eb3eb 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java @@ -52,6 +52,7 @@ import eu.etaxonomy.cdm.model.media.Rights; import eu.etaxonomy.cdm.model.view.AuditEvent; import eu.etaxonomy.cdm.model.view.AuditEventRecord; import eu.etaxonomy.cdm.persistence.dao.common.AuditEventSort; +import eu.etaxonomy.cdm.persistence.dto.MergeResult; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.query.Grouping; import eu.etaxonomy.cdm.persistence.query.MatchMode; @@ -852,11 +853,8 @@ public class TransientTermService implements ITermService { return defaultService.isDeletable(object, config); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.ITermService#listByTermType(eu.etaxonomy.cdm.model.common.TermType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List) - */ @Override - public List> listByTermType(TermType termType, Integer limit, Integer start, + public List listByTermType(TermType termType, Integer limit, Integer start, List orderHints, List propertyPaths) { return defaultService.listByTermType(termType, limit, start, orderHints, propertyPaths); } @@ -872,35 +870,56 @@ public class TransientTermService implements ITermService { return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IService#delete(java.util.UUID) - */ @Override public DeleteResult delete(UUID uuid) { return defaultService.delete(uuid); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IService#delete(java.util.Collection) - */ @Override public DeleteResult delete(Collection arg0) { return defaultService.delete(arg0); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.IService#merge(java.util.List) - */ @Override public List merge(List arg0) { return defaultService.merge(arg0); } - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.service.ITermService#delete(java.util.UUID, eu.etaxonomy.cdm.api.service.config.TermDeletionConfigurator) - */ @Override public DeleteResult delete(UUID arg0, TermDeletionConfigurator arg1) { return defaultService.delete(arg0, arg1); } + + @Override + public List> merge(List arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + @Override + public MergeResult merge(DefinedTermBase arg0, boolean arg1) { + return defaultService.merge(arg0, arg1); + } + + @Override + public DefinedTermBase loadWithUpdate(UUID arg0) { + return defaultService.loadWithUpdate(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public Language getLanguageByLabel(String arg0) { + return defaultService.getLanguageByLabel(arg0); + } + + /** + * {@inheritDoc} + */ + @Override + public List load(List arg0, List arg1) { + return defaultService.load(arg0, arg1); + } + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java index d7fcc56f8..a6504a980 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateView.java @@ -1,8 +1,12 @@ package eu.etaxonomy.taxeditor.editor.view.derivate; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; -import java.util.Map.Entry; +import java.util.List; +import java.util.Map; import java.util.Set; import java.util.UUID; @@ -11,8 +15,7 @@ import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeNode; import org.eclipse.jface.viewers.TreeSelection; @@ -20,6 +23,8 @@ import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; @@ -27,25 +32,37 @@ import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.ISelectionService; +import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.EditorPart; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.IOccurrenceService; -import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.molecular.Sequence; import eu.etaxonomy.cdm.model.molecular.SingleRead; +import eu.etaxonomy.cdm.model.occurrence.FieldUnit; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.Messages; +import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter.DerivateSearchCompositeController; +import eu.etaxonomy.taxeditor.model.IContextListener; import eu.etaxonomy.taxeditor.model.IDirtyMarkable; import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData; import eu.etaxonomy.taxeditor.model.IPartContentHasMedia; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateContentProvider; import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider; @@ -54,15 +71,30 @@ import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider; * Displays the derivate hierarchy of the specimen specified in the editor input. * */ -public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkable, - IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia, - ISelectionChangedListener, IPostOperationEnabled { - +public class DerivateView extends EditorPart implements IPartContentHasFactualData, IConversationEnabled, + ICdmEntitySessionEnabled, IDirtyMarkable, IPostOperationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData, IPartContentHasMedia, + IContextListener, ISelectionListener { public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView"; //$NON-NLS-1$ public static final String YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION = Messages.DerivateView_YOU_NEED_TO_SAVE; public static final String VIEW_HAS_UNSAVED_CHANGES = Messages.DerivateView_UNSAVED_CHANGES; + private static final List SPECIMEN_INIT_STRATEGY = Arrays.asList(new String[] { + "descriptions", + "annotations", + "markers", + "credits", + "extensions", + "rights", + "sources", + "derivationEvents.derivatives.annotations", + "derivationEvents.derivatives.markers", + "derivationEvents.derivatives.credits", + "derivationEvents.derivatives.extensions", + "derivationEvents.derivatives.rights", + "derivationEvents.derivatives.sources" + }); + private ConversationHolder conversation; private TreeViewer viewer; @@ -73,9 +105,31 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa private DerivateLabelProvider labelProvider; - private Set multiLinkSingleReads; + private DerivateContentProvider contentProvider; + + private DerivateSearchCompositeController derivateSearchCompositeController; + + /** + * A map with keys being the derivative entities belonging to the {@link UUID}s passed to the constructor + * and values being the root elements of the hierarchy (may be the same objects as the derivative entities) + */ + private Map, SpecimenOrObservationBase> derivateToRootEntityMap; + + /** + * The set of root elements + */ + private Set> rootElements; - private ISelection selection = null; + private ICdmEntitySession cdmEntitySession; + + /** + * true if this view is listening to selection changes + */ + private boolean listenToSelectionChange; + + private Taxon selectedTaxon; + + private ISelectionService selectionService; /** * Default constructor @@ -83,18 +137,61 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa public DerivateView() { } + + /** + * {@inheritDoc} + */ + @Override + public void init(IEditorSite site, IEditorInput input) throws PartInitException { + this.setSite(site); + this.setInput(input); + this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>(); + this.rootElements = new HashSet>(); + + if (CdmStore.isActive() && conversation == null) { + conversation = CdmStore.createConversation(); + } + if (CdmStore.isActive()) { + cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); + } + //listen to context changes + CdmStore.getContextManager().addContextListener(this); + } + @Override public void createPartControl(Composite parent) { + + parent.setLayout(new GridLayout()); + + //---search and filter--- + derivateSearchCompositeController = new DerivateSearchCompositeController(parent, this); + GridData gridDataSearchBar = new GridData(); + gridDataSearchBar.horizontalAlignment = GridData.FILL; + gridDataSearchBar.grabExcessHorizontalSpace = true; + derivateSearchCompositeController.setLayoutData(gridDataSearchBar); + derivateSearchCompositeController.setEnabled(CdmStore.isActive()); + + //---tree viewer--- viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION)); - viewer.setContentProvider(new DerivateContentProvider()); + GridData gridDataTree = new GridData(); + gridDataTree.horizontalAlignment = GridData.FILL; + gridDataTree.verticalAlignment = GridData.FILL; + gridDataTree.grabExcessVerticalSpace = true; + gridDataTree.grabExcessHorizontalSpace = true; + viewer.getTree().setLayoutData(gridDataTree); + contentProvider = new DerivateContentProvider(); + viewer.setContentProvider(contentProvider); labelProvider = new DerivateLabelProvider(); labelProvider.setConversation(conversation); viewer.setLabelProvider(labelProvider); viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS); + viewer.getTree().setEnabled(CdmStore.isActive()); // Propagate selection from viewer getSite().setSelectionProvider(viewer); + //listen to selection changes - viewer.addSelectionChangedListener(this); + selectionService = getSite().getWorkbenchWindow().getSelectionService(); + selectionService.addSelectionListener(this); //create context menu MenuManager menuManager = new MenuManager(); @@ -103,20 +200,8 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa Menu menu = menuManager.createContextMenu(control); control.setMenu(menu); - generateMultiLinkSingleReads(); - labelProvider.setMultiLinkSingleReads(multiLinkSingleReads); - IEditorInput editorInput = getEditorInput(); - viewer.setInput(((DerivateViewEditorInput) editorInput).getRootUUIDs()); - //set selection to selected derivate if only one was selected - if(editorInput instanceof DerivateViewEditorInput){ - Set derivateUUIDs = ((DerivateViewEditorInput) editorInput).getDerivateUUIDs(); - if(derivateUUIDs.size()==1){ - SpecimenOrObservationBase specimen = CdmStore.getService(IOccurrenceService.class).load(derivateUUIDs.iterator().next()); - if(specimen!=null){ - viewer.setSelection(new StructuredSelection(new TreeNode(specimen))); - } - } - } + //init tree + updateRootEntities(); //add drag'n'drop support Transfer[] transfers = new Transfer[] {LocalSelectionTransfer.getTransfer(),}; @@ -124,13 +209,74 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa viewer.addDropSupport(dndOperations, transfers, new DerivateDropListener(this)); } + public void updateRootEntities() { + updateRootEntities((Collection)null); + } + + public void updateRootEntities(Collection derivativeUuids) { + if(conversation!=null){ + if (!conversation.isBound()) { + conversation.bind(); + } + /* + * If the active session is not the session of the Derivate Editor then we will + * save it, bind temporarily to our session and rebind to the original session. + * This happens e.g. if a selection change happens in the taxon editor and + * "Link with editor" is enabled. The selection change event and thus the + * loading in updateRootEntities() happens in the session of the taxon + * editor. + */ + ICdmEntitySession previousCdmEntitySession = CdmStore.getCurrentSessionManager().getActiveSession(); + if(cdmEntitySession != null) { + cdmEntitySession.bind(); + } + + List derivates = null; + if(derivativeUuids!=null){ + this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>(); + this.rootElements = new HashSet>(); + derivates = CdmStore.getService(IOccurrenceService.class).load(new ArrayList(derivativeUuids), SPECIMEN_INIT_STRATEGY); + } + updateRootEntities(derivates); + previousCdmEntitySession.bind(); + } + } + + + public void updateRootEntities(List derivates) { + + if(derivates!=null){ + this.derivateToRootEntityMap = new HashMap, SpecimenOrObservationBase>(); + this.rootElements = new HashSet>(); + for (SpecimenOrObservationBase derivate : derivates) { + + if(derivate instanceof FieldUnit){ + derivateToRootEntityMap.put(derivate, derivate); + } + else { + SpecimenOrObservationBase topMostDerivate = EditorUtil.getTopMostDerivate(derivate); + if(topMostDerivate!=null){ + derivateToRootEntityMap.put(derivate, topMostDerivate); + } + else{ + derivateToRootEntityMap.put(derivate, derivate); + } + } + } + for (SpecimenOrObservationBase specimen : derivateToRootEntityMap.values()) { + rootElements.add(specimen); + } + } + labelProvider.initCache(rootElements); + viewer.setInput(rootElements); + + getEditorSite().getActionBars().getStatusLineManager().setMessage(rootElements.size() +" derivative hierarchies found"); + + } + @Override public void doSave(IProgressMonitor monitor) { String taskName = Messages.DerivateView_SAVING_HIERARCHY; - if(getEditorInput() instanceof DerivateViewEditorInput){ - DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput(); - taskName += " "+derivateViewEditorInput.getName(); //$NON-NLS-1$ - } monitor.beginTask(taskName, 3); if (!conversation.isBound()) { conversation.bind(); @@ -139,6 +285,10 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa // commit the conversation and start a new transaction immediately conversation.commit(true); + + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IOccurrenceService.class).merge(new ArrayList(rootElements), true); + } monitor.worked(1); this.setDirty(false); @@ -154,24 +304,9 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa @Override public String getTitleToolTip() { - if(getEditorInput() instanceof DerivateViewEditorInput){ - DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) getEditorInput(); - return derivateViewEditorInput.getName(); - } return Messages.DerivateView_DERIVATIVE_EDITOR; } - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - setSite(site); - setInput(input); - if(input instanceof DerivateViewEditorInput){ - DerivateViewEditorInput derivateViewEditorInput = (DerivateViewEditorInput) input; - conversation = derivateViewEditorInput.getConversationHolder(); - setPartName(derivateViewEditorInput.getName()); - } - } - @Override public boolean isDirty() { return isDirty; @@ -193,9 +328,12 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa public void setFocus() { viewer.getControl().setFocus(); //make sure to bind again if maybe in another view the conversation was unbound - if(!conversation.isBound()){ + if(conversation!=null && !conversation.isBound()){ conversation.bind(); } + if(cdmEntitySession != null) { + cdmEntitySession.bind(); + } } @Override @@ -207,18 +345,11 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa return conversation; } - /** - * @return the viewer - */ - public TreeViewer getViewer() { - return viewer; - } - @Override public void changed(Object element) { setDirty(true); firePropertyChange(IEditorPart.PROP_DIRTY); - viewer.refresh(); + viewer.update(new TreeNode(element), null); } @Override @@ -226,6 +357,24 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa changed(null); } + @Override + public Map> getPropertyPathsMap() { + List specimenPropertyPaths = Arrays.asList(new String[] { + "descriptions", + "derivationEvents.derivates", + "annotations", + "markers", + "credits", + "extensions", + "rights", + "sources" + }); + Map> specimenPropertyPathMap = + new HashMap>(); + specimenPropertyPathMap.put(SpecimenOrObservationBase.class,specimenPropertyPaths); + return specimenPropertyPathMap; + } + /** * Refreshes the derivate hierarchy tree and expands the tree * to show and select the given object. @@ -243,35 +392,25 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa * Refreshes the derivate hierarchy tree */ public void refreshTree(){ - generateMultiLinkSingleReads(); - labelProvider.setMultiLinkSingleReads(multiLinkSingleReads); viewer.refresh(); } - private void generateMultiLinkSingleReads() { - Set multiLinkSingleReads = new HashSet(); - for(Entry> entry:CdmStore.getService(ISequenceService.class).getSingleReadSequencesMap().entrySet()){ - if(entry.getValue().size()>1){ - multiLinkSingleReads.add(entry.getKey()); - } - } - this.multiLinkSingleReads = multiLinkSingleReads; + //FIXME:Remoting hack to make this work for remoting + //This should actually be resolved using remoting post operations + public void remove(Object obj) { + rootElements.remove(obj); + viewer.setInput(rootElements); } /** * @return a set of {@link SingleRead}s that have multiple parents */ public Set getMultiLinkSingleReads() { - return this.multiLinkSingleReads; - } - - @Override - public void selectionChanged(SelectionChangedEvent event) { - this.selection = event.getSelection(); + return DerivateLabelProvider.getMultiLinkSingleReads(); } - public ISelection getSelection() { - return selection; + public Object getSelectionInput() { + return selectedTaxon; } public DerivateLabelProvider getLabelProvider() { @@ -292,9 +431,132 @@ public class DerivateView extends EditorPart implements IPartContentHasFactualDa return true; } + @Override public boolean canAttachMedia() { return true; } + public void addFieldUnit(FieldUnit fieldUnit) { + rootElements.add(fieldUnit); + derivateToRootEntityMap.put(fieldUnit, fieldUnit); + } + + @Override + public ICdmEntitySession getCdmEntitySession() { + return cdmEntitySession; + } + + @Override + public void dispose() { + super.dispose(); + if(conversation!=null){ + conversation.close(); + } + if(cdmEntitySession != null) { + cdmEntitySession.dispose(); + } + } + + @Override + public void selectionChanged(IWorkbenchPart part, ISelection selection) { + if(viewer.getTree().isDisposed()){ + return; + } + if(listenToSelectionChange){ + if(part instanceof MultiPageTaxonEditor){ + selectedTaxon = ((MultiPageTaxonEditor) part).getTaxon(); + } + else if(selection instanceof IStructuredSelection){ + Object selectedElement = ((IStructuredSelection) selection).getFirstElement(); + if(selectedElement instanceof CdmBase){ + if(((CdmBase) selectedElement).isInstanceOf(TaxonNode.class)){ + selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, TaxonNode.class).getTaxon(); + } + else if(((CdmBase) selectedElement).isInstanceOf(Taxon.class)){ + selectedTaxon = HibernateProxyHelper.deproxy(selectedElement, Taxon.class); + } + } + } + if(selectedTaxon!=null){ + Collection fieldUnits = CdmStore.getService(IOccurrenceService.class).listFieldUnitsByAssociatedTaxon(selectedTaxon, null, null); + Collection uuids = new HashSet(); + for (SpecimenOrObservationBase specimenOrObservationBase : fieldUnits) { + uuids.add(specimenOrObservationBase.getUuid()); + } + updateRootEntities(uuids); + setPartName("Derivative Editor: " + selectedTaxon.getName()); + } + } + } + + public TreeViewer getViewer() { + return viewer; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getRootEntities() { + return new ArrayList>(rootElements); + } + + public void toggleListenToSelectionChange() { + listenToSelectionChange = !listenToSelectionChange; + derivateSearchCompositeController.setEnabled(!listenToSelectionChange); + if(!listenToSelectionChange){ + selectedTaxon = null; + setPartName("Derivative Editor"); + } + else if(selectedTaxon==null){ + setPartName("Derivative Editor [no taxon selected]"); + } + } + + public boolean isListenToSelectionChange(){ + return listenToSelectionChange; + } + + /** + * {@inheritDoc} + */ + @Override + public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) { + } + + /** + * {@inheritDoc} + */ + @Override + public void contextStop(IMemento memento, IProgressMonitor monitor) { + derivateSearchCompositeController.setEnabled(false); + viewer.getTree().setEnabled(false); + viewer.setInput(null); + } + + /** + * {@inheritDoc} + */ + @Override + public void contextStart(IMemento memento, IProgressMonitor monitor) { + derivateSearchCompositeController.setEnabled(!listenToSelectionChange); + viewer.getTree().setEnabled(true); + refreshTree(); + } + + /** + * {@inheritDoc} + */ + @Override + public void contextRefresh(IProgressMonitor monitor) { + } + + /** + * {@inheritDoc} + */ + @Override + public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) { + } + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java index 3527fe5ed..6f7b3be60 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/DerivateViewEditorInput.java @@ -9,195 +9,54 @@ */ package eu.etaxonomy.taxeditor.editor.view.derivate; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; -import eu.etaxonomy.cdm.api.conversation.ConversationHolder; -import eu.etaxonomy.cdm.api.service.IOccurrenceService; -import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; -import eu.etaxonomy.cdm.model.occurrence.FieldUnit; -import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; -import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.Messages; -import eu.etaxonomy.taxeditor.model.MessagingUtils; -import eu.etaxonomy.taxeditor.store.CdmStore; -import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider; - /** - * Editor input for the {@link DerivateView} which holds the currently selected derivate for which - * the derivate hierarchy should be shown in the DerivateView.
- * It also holds a {@link SpecimenOrObservationBase} which is the root of the hierarchy. (both may be the same object) + * Editor input for the {@link DerivateView} + * * @author pplitzner - * @date 25.11.2013 + * @date Nov 11, 2015 * */ -public class DerivateViewEditorInput implements IEditorInput{ +public class DerivateViewEditorInput implements IEditorInput { - /** - * The selected derivate {@link UUID}s - */ - private final Set derivateUUIDs; - /** - * List of the {@link UUID}s of the root elements of the hierarchy (may be the same objects as the derivates) - */ - private Set rootUUIDs; - - private final ConversationHolder conversationHolder; - - /** - * Creates an editor input for the {@link DerivateView} with the currently selected derivates and the - * corresponding {@link FieldUnit}s (both may be the same object). - * @param derivateUuids the {@link UUID}s of the derivates for which the derivate hierarchy should be shown - * @param rootUUIDs the root of the hierarchy - */ - public DerivateViewEditorInput(Set derivateUuids) { - super(); - this.conversationHolder = CdmStore.createConversation(); - this.derivateUUIDs = derivateUuids; - this.rootUUIDs = new HashSet(); - for (UUID uuid : derivateUuids) { - SpecimenOrObservationBase derivate = CdmStore.getService(IOccurrenceService.class).load(uuid); - if(derivate instanceof FieldUnit){ - rootUUIDs.add(uuid); - } - else if(derivate instanceof DerivedUnit){ - SpecimenOrObservationBase topMostDerivate = EditorUtil.getTopMostDerivate(derivate); - if(topMostDerivate!=null){ - rootUUIDs.add(topMostDerivate.getUuid()); - } - } - } - if(rootUUIDs.isEmpty()){ - rootUUIDs = derivateUUIDs; - } - if(rootUUIDs.isEmpty()){ - MessagingUtils.messageDialog(Messages.DerivateViewEditorInput_FAIL_INIT, DerivateViewEditorInput.class, Messages.DerivateViewEditorInput_NO_ROOT); - } + public DerivateViewEditorInput() { } - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ @Override public Object getAdapter(Class adapter) { - // TODO Auto-generated method stub return null; } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#exists() - */ @Override public boolean exists() { return false; } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getImageDescriptor() - */ @Override public ImageDescriptor getImageDescriptor() { - // TODO Auto-generated method stub return null; } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getName() - */ @Override public String getName() { return getEditorName(); } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getPersistable() - */ @Override public IPersistableElement getPersistable() { return null; } - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getToolTipText() - */ @Override public String getToolTipText() { return getEditorName(); } private String getEditorName() { - String name = null; - for(UUID uuid:rootUUIDs){ - SpecimenOrObservationBase specimen = CdmStore.getService(IOccurrenceService.class).load(uuid); - if(specimen!=null){ - if(name==null){ - name = DerivateLabelProvider.getDerivateText(specimen, conversationHolder); - } - else{ - name += " + "+DerivateLabelProvider.getDerivateText(specimen, conversationHolder); //$NON-NLS-1$ - } - } - } - return name; - } - - public Set getRootUUIDs() { - return rootUUIDs; - } - - public Set getDerivateUUIDs() { - return derivateUUIDs; - } - - public void addRootUuid(UUID root){ - rootUUIDs.add(root); + return "Derivative Editor"; } - - public ConversationHolder getConversationHolder() { - return conversationHolder; - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((rootUUIDs == null) ? 0 : rootUUIDs.hashCode()); - return result; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - DerivateViewEditorInput other = (DerivateViewEditorInput) obj; - if (rootUUIDs == null) { - if (other.rootUUIDs != null) { - return false; - } - } else if (!rootUUIDs.equals(other.rootUUIDs)) { - return false; - } - return true; - } - - } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java index 2438c4325..8b45cb6f7 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateDerivateContextMenu.java @@ -13,7 +13,9 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeCacheStrategy; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.model.media.Media; import eu.etaxonomy.cdm.model.molecular.DnaSample; import eu.etaxonomy.cdm.model.molecular.Sequence; @@ -30,6 +32,7 @@ import eu.etaxonomy.taxeditor.editor.Messages; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog; /** @@ -124,27 +127,33 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { public void widgetSelected(SelectionEvent e) { //select media Media media = MediaSelectionDialog.select(AbstractUtility.getShell(), null, null); - //create MediaSpecimen - MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specimenType); - mediaSpecimen.setMediaSpecimen(media); + if(media!=null){ + //create MediaSpecimen + MediaSpecimen mediaSpecimen = MediaSpecimen.NewInstance(specimenType); + mediaSpecimen.setMediaSpecimen(media); - //attach to parent - if(selectedNode.getValue() instanceof SpecimenOrObservationBase){ - SpecimenOrObservationBase specimenOrObservationBase = (SpecimenOrObservationBase)selectedNode.getValue(); + //attach to parent + if(selectedNode.getValue() instanceof SpecimenOrObservationBase){ + SpecimenOrObservationBase specimenOrObservationBase = (SpecimenOrObservationBase)selectedNode.getValue(); - specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType)); - mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); - mediaSpecimen.getTitleCache(); //update title cache - } + specimenOrObservationBase.addDerivationEvent(DerivationEvent.NewSimpleInstance(specimenOrObservationBase, mediaSpecimen, derivationEventType)); + mediaSpecimen.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); + mediaSpecimen.getTitleCache(); //update title cache + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IOccurrenceService.class).merge(specimenOrObservationBase, true); + } + } - //refresh view - DerivateView derivateView = null; - if(AbstractUtility.getActivePart() instanceof DerivateView){ - derivateView = (DerivateView) AbstractUtility.getActivePart(); - } - if(derivateView!=null){ - derivateView.getConversationHolder().commit(); - derivateView.refreshTree(mediaSpecimen); + //refresh view + DerivateView derivateView = null; + if(AbstractUtility.getActivePart() instanceof DerivateView){ + derivateView = (DerivateView) AbstractUtility.getActivePart(); + } + if(derivateView!=null){ + + derivateView.getConversationHolder().commit(); + derivateView.refreshTree(mediaSpecimen); + } } } }); @@ -197,13 +206,19 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { Sequence newInstance = Sequence.NewInstance(dnaSample, "", 0); //$NON-NLS-1$ createdElement = newInstance; } + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate, true); + } } else if(selectedDerivate instanceof Sequence){ SingleRead newInstance = SingleRead.NewInstance(); ((Sequence) selectedDerivate).addSingleRead(newInstance); createdElement = newInstance; + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmApplicationState.getCurrentAppConfig().getSequenceService().merge((Sequence)selectedDerivate, true); + } } - else if(selectedDerivate instanceof SpecimenOrObservationBase && DerivedUnit.class.isAssignableFrom(childClass)){ + if(selectedDerivate instanceof SpecimenOrObservationBase && DerivedUnit.class.isAssignableFrom(childClass)){ SpecimenOrObservationBase specimenOrObservationBase = (SpecimenOrObservationBase)selectedDerivate; DerivedUnit derivedUnit; if(childClass.equals(DnaSample.class)){ @@ -227,6 +242,9 @@ public class CreateDerivateContextMenu extends CompoundContributionItem { derivedUnit.setCacheStrategy(new DerivedUnitFacadeCacheStrategy()); derivedUnit.getTitleCache(); //update title cache createdElement = derivedUnit; + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(IOccurrenceService.class).merge((SpecimenOrObservationBase) selectedDerivate, true); + } } //refresh view diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java new file mode 100644 index 000000000..0828a3134 --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/CreateFieldUnitContextMenu.java @@ -0,0 +1,111 @@ +package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu; + +import org.eclipse.jface.action.ContributionItem; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.CompoundContributionItem; + +import eu.etaxonomy.cdm.api.service.IOccurrenceService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.description.IndividualsAssociation; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.occurrence.FieldUnit; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * Context menu for the SingleReads in the derivate hierarchy. + * + */ +public class CreateFieldUnitContextMenu extends CompoundContributionItem { + + private enum CommandType { + COPY_TO_CLIPBOARD, REMOVE_FROM_SEQUENCE, ADD_TO_SEQUENCE + } + + @Override + protected IContributionItem[] getContributionItems() { + IContributionItem[] contributionItems = new IContributionItem[] { + new ContributionItem() { + @Override + public void fill(Menu menu, int index) { + final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchPart activePart = window.getActivePage().getActivePart(); + if(activePart instanceof DerivateView){ + final DerivateView derivateView = (DerivateView) activePart; + if(derivateView.isListenToSelectionChange()){ + Object selectionInput = derivateView.getSelectionInput(); + if(selectionInput instanceof CdmBase && ((CdmBase) selectionInput).isInstanceOf(Taxon.class)){ + final Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(((CdmBase)selectionInput).getUuid()), Taxon.class); + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText("Create FieldUnit for "+taxon.getName()); + item.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if(derivateView.isDirty()){ + MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION); + return; + } + + FieldUnit fieldUnit = FieldUnit.NewInstance(); + fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class); + IndividualsAssociation association = IndividualsAssociation.NewInstance(fieldUnit); + TaxonDescription description; + if(!taxon.getDescriptions().isEmpty()){ + description = taxon.getDescriptions().iterator().next(); + } + else{ + description = TaxonDescription.NewInstance(taxon); + } + description.addElement(association); + if(CdmStore.getCurrentSessionManager().isRemoting()){ + CdmStore.getService(ITaxonService.class).merge(taxon); + } + else{ + CdmStore.getService(ITaxonService.class).saveOrUpdate(taxon); + } + + derivateView.getConversationHolder().commit(); + derivateView.addFieldUnit(fieldUnit); + derivateView.refreshTree(); + } + }); + } + } + else{ + MenuItem item = new MenuItem(menu, SWT.NONE); + item.setText("Create FieldUnit"); + item.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if(derivateView.isDirty()){ + MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION); + return; + } + FieldUnit fieldUnit = FieldUnit.NewInstance(); + fieldUnit = CdmBase.deproxy(CdmStore.getService(IOccurrenceService.class).save(fieldUnit), FieldUnit.class); + derivateView.getConversationHolder().commit(); + derivateView.addFieldUnit(fieldUnit); + derivateView.updateRootEntities(); + } + }); + } + } + } + } + }; + return contributionItems; + } +} + diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java index 17d95b197..522120d1b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/DerivateViewContextMenu.java @@ -8,8 +8,10 @@ public class DerivateViewContextMenu extends CompoundContributionItem { @Override protected IContributionItem[] getContributionItems() { IContributionItem[] contributionItems = new IContributionItem[] { + new CreateFieldUnitContextMenu(), new CreateDerivateContextMenu(), - new SingleReadSequenceContextMenu() + new ListenToSelectionChangeContextMenu(), + new SingleReadSequenceContextMenu(), }; return contributionItems; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/ListenToSelectionChangeContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/ListenToSelectionChangeContextMenu.java new file mode 100644 index 000000000..15fa005f1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/ListenToSelectionChangeContextMenu.java @@ -0,0 +1,64 @@ +package eu.etaxonomy.taxeditor.editor.view.derivate.contextMenu; + +import org.eclipse.jface.action.ContributionItem; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.actions.CompoundContributionItem; + +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; +import eu.etaxonomy.taxeditor.model.ImageResources; + +/** + * Context menu for the SingleReads in the derivate hierarchy. + * + */ +public class ListenToSelectionChangeContextMenu extends CompoundContributionItem { + + @Override + protected IContributionItem[] getContributionItems() { + IContributionItem[] contributionItems = new IContributionItem[] { + new ContributionItem() { + @Override + public void fill(Menu menu, int index) { + final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + IWorkbenchPart activePart = window.getActivePage().getActivePart(); + if(activePart instanceof DerivateView){ + final DerivateView derivateView = (DerivateView) activePart; + MenuItem item = new MenuItem(menu, SWT.NONE); + if(derivateView.isListenToSelectionChange()){ + item.setText("Unlink from taxon selection"); + } + else{ + item.setText("Link with taxon selection"); + } + item.setImage(ImageResources.getImage(ImageResources.SYNCED)); + item.addSelectionListener(new SelectionAdapterExtension(derivateView)); + } + } + } + }; + return contributionItems; + } + + private final class SelectionAdapterExtension extends SelectionAdapter { + + private final DerivateView derivateView; + + private SelectionAdapterExtension(DerivateView derivateView) { + this.derivateView = derivateView; + } + + @Override + public void widgetSelected(SelectionEvent e) { + derivateView.toggleListenToSelectionChange(); + } + } +} + diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java index 92848bc39..097ece606 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/contextMenu/SingleReadSequenceContextMenu.java @@ -121,7 +121,7 @@ public class SingleReadSequenceContextMenu extends CompoundContributionItem { SingleRead singleRead = (SingleRead)clipBoardTreeNode.getValue(); Sequence sequence = (Sequence)selectedTreeNode.getValue(); sequence.addSingleRead(singleRead); - CdmStore.getService(ISequenceService.class).saveOrUpdate(sequence); + CdmStore.getService(ISequenceService.class).merge(sequence); if(activeEditor instanceof DerivateView) { DerivateView derivateView = (DerivateView)activeEditor; derivateView.getConversationHolder().commit(); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java deleted file mode 100644 index e57cbfbf7..000000000 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/CreateFieldUnitHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -package eu.etaxonomy.taxeditor.editor.view.derivate.handler; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; - -import eu.etaxonomy.cdm.api.service.IOccurrenceService; -import eu.etaxonomy.cdm.model.occurrence.FieldUnit; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; -import eu.etaxonomy.taxeditor.model.AbstractUtility; -import eu.etaxonomy.taxeditor.model.MessagingUtils; -import eu.etaxonomy.taxeditor.store.CdmStore; - -public class CreateFieldUnitHandler extends AbstractHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - if(AbstractUtility.getActivePart() instanceof DerivateView){ - DerivateView derivateView = (DerivateView)AbstractUtility.getActivePart(); - if(derivateView.isDirty()){ - MessagingUtils.warningDialog(DerivateView.VIEW_HAS_UNSAVED_CHANGES, this, DerivateView.YOU_NEED_TO_SAVE_BEFORE_PERFORMING_THIS_ACTION); - return null; - } - FieldUnit fieldUnit = FieldUnit.NewInstance(); - CdmStore.getService(IOccurrenceService.class).save(fieldUnit); - derivateView.getConversationHolder().commit(); - DerivateViewEditorInput input = (DerivateViewEditorInput) derivateView.getEditorInput(); - input.addRootUuid(fieldUnit.getUuid()); - derivateView.refreshTree(); - } - return null; - } - -} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java new file mode 100644 index 000000000..413c3772d --- /dev/null +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/ListenToSelectionChangeHandler.java @@ -0,0 +1,23 @@ +package eu.etaxonomy.taxeditor.editor.view.derivate.handler; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; + +public class ListenToSelectionChangeHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + IWorkbenchPart activePart = HandlerUtil.getActivePart(event); + if(activePart instanceof DerivateView){ + DerivateView derivativeEditor = (DerivateView)activePart; + derivativeEditor.toggleListenToSelectionChange(); + } + return null; + } + +} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/OpenDerivateEditorForTaxonHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/OpenDerivateEditorForTaxonHandler.java deleted file mode 100644 index 7b30737f9..000000000 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/handler/OpenDerivateEditorForTaxonHandler.java +++ /dev/null @@ -1,82 +0,0 @@ -// $Id$ -/** -* Copyright (C) 2014 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.editor.view.derivate.handler; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.UUID; - -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.IStructuredSelection; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.handlers.HandlerUtil; - -import eu.etaxonomy.cdm.api.service.IOccurrenceService; -import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; -import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.cdm.model.taxon.TaxonNode; -import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.Messages; -import eu.etaxonomy.taxeditor.editor.handler.OpenDerivateViewHandler; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; -import eu.etaxonomy.taxeditor.model.MessagingUtils; -import eu.etaxonomy.taxeditor.store.CdmStore; - -/** - * @author pplitzner - * @date Nov 25, 2014 - * - */ -public class OpenDerivateEditorForTaxonHandler extends AbstractHandler { - - private static final String COULD_NOT_OPEN_DERIVATIVE_EDITOR = Messages.OpenDerivateEditorForTaxonHandler_COULD_NOT_OPEN_EDITOR; - - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - ISelection currentSelection = HandlerUtil.getCurrentSelection(event); - if(currentSelection instanceof IStructuredSelection){ - Iterator selectionIterator = ((IStructuredSelection) currentSelection).iterator(); - Set derivateUuids = new HashSet(); - while(selectionIterator.hasNext()){ - Object object = selectionIterator.next(); - if(object instanceof TaxonNode){ - TaxonNode node = (TaxonNode)object; - Taxon taxon = node.getTaxon(); - List listByAssociatedTaxon = CdmStore.getService(IOccurrenceService.class).listByAssociatedTaxon(null, null, taxon, null, null, null, null, null); - for (SpecimenOrObservationBase specimenOrObservationBase : listByAssociatedTaxon) { - derivateUuids.add(specimenOrObservationBase.getUuid()); - } - } - } - if(derivateUuids.isEmpty()){ - MessagingUtils.warningDialog(COULD_NOT_OPEN_DERIVATIVE_EDITOR, this, Messages.OpenDerivateEditorForTaxonHandler_NO_DERIVATIVES_FOUND); - return null; - } - DerivateViewEditorInput input = new DerivateViewEditorInput(derivateUuids); - try { - EditorUtil.open(input); - } catch (PartInitException e) { - MessagingUtils.error(OpenDerivateViewHandler.class, COULD_NOT_OPEN_DERIVATIVE_EDITOR, e); - } catch (NullPointerException npe){ - MessagingUtils.messageDialog(Messages.OpenDerivateEditorForTaxonHandler_FAILED_TO_OPEN, OpenDerivateViewHandler.class, Messages.OpenDerivateEditorForTaxonHandler_HIERARCHY_CORRUPTED, npe); - } - } - return null; - } - -} diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java index 839beb546..f5956fa1b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/DeleteDerivateOperation.java @@ -21,12 +21,12 @@ import org.eclipse.ui.ISaveablePart; import eu.etaxonomy.cdm.api.service.DeleteResult; import eu.etaxonomy.cdm.api.service.IOccurrenceService; import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator; +import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.molecular.Sequence; import eu.etaxonomy.cdm.model.molecular.SingleRead; import eu.etaxonomy.taxeditor.editor.Messages; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; -import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; @@ -79,21 +79,20 @@ public class DeleteDerivateOperation extends AbstractPostOperation { && treeNode.getValue().equals(element) && treeNode.getParent()!=null && treeNode.getParent().getValue() instanceof Sequence){ - deleteResult = CdmStore.getService(IOccurrenceService.class).deleteSingleRead((SingleRead)element, (Sequence) treeNode.getParent().getValue()); - } - else{ - deleteResult = CdmStore.getService(IOccurrenceService.class).deleteDerivateHierarchy(element, deleteConfigurator); + deleteResult = CdmStore.getService(ISequenceService.class).deleteSingleRead(((SingleRead)element).getUuid(), + ((Sequence) treeNode.getParent().getValue()).getUuid()); + } else if(element instanceof Sequence){ + deleteResult = CdmStore.getService(ISequenceService.class).delete(element.getUuid()); + } else { + deleteResult = CdmStore.getService(IOccurrenceService.class).delete(element.getUuid(), deleteConfigurator); } if(deleteResult.isOk()){ if(getPostOperationEnabled() instanceof DerivateView){ DerivateView derivateView = (DerivateView) getPostOperationEnabled(); + derivateView.remove(element); //update DerivateView derivateView.getConversationHolder().commit(); IStatus returnStatus = postExecute(null); - //close if no more items left - if(derivateView.getViewer().getTree().getItemCount()<1){ - AbstractUtility.close(derivateView); - } return returnStatus; } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java index 5a1756b9c..b1426ddb6 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/operation/MoveDerivateOperation.java @@ -9,6 +9,8 @@ */ package eu.etaxonomy.taxeditor.editor.view.derivate.operation; +import java.util.UUID; + import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; @@ -71,6 +73,10 @@ public class MoveDerivateOperation extends AbstractPostOperation { fromNode = draggedNode.getParent(); if(moveTreeNode(draggedNode, fromNode, targetNode)){ + //special case if derivative with no parent was moved + if(fromNode==null && draggedNode!=null && draggedNode.getValue()!=null){ + derivateView.remove(draggedNode.getValue()); + } //update DerivateView derivateView.getConversationHolder().commit(); LocalSelectionTransfer.getTransfer().setSelection(null); @@ -96,10 +102,14 @@ public class MoveDerivateOperation extends AbstractPostOperation { DerivedUnit draggedSpecimen = (DerivedUnit) draggedNodeValue; SpecimenOrObservationBase targetSpecimen = (SpecimenOrObservationBase) targetNodeValue; //check if type is a sub derivate type - if(fromParentSpecimen instanceof SpecimenOrObservationBase - && fromNode!=null - && !fromNode.equals(targetNode)){//don't drag on direct parent node) - return occurrenceService.moveDerivate((SpecimenOrObservationBase)fromParentSpecimen, targetSpecimen, draggedSpecimen); + if(fromNode==null || !fromNode.equals(targetNode)){//don't drag on direct parent node) + UUID fromUuid = null; + if(fromParentSpecimen!=null){ + fromUuid = ((SpecimenOrObservationBase)fromParentSpecimen).getUuid(); + } + return occurrenceService.moveDerivate(fromUuid, + targetSpecimen.getUuid(), + draggedSpecimen.getUuid()).isOk(); } } @@ -107,7 +117,10 @@ public class MoveDerivateOperation extends AbstractPostOperation { else if(draggedNodeValue instanceof SingleRead && targetNodeValue instanceof Sequence){ SingleRead singleRead = (SingleRead) draggedNodeValue; if(fromParentSpecimen instanceof Sequence){ - return CdmStore.getService(ISequenceService.class).moveSingleRead((Sequence)fromParentSpecimen, (Sequence)targetNodeValue, singleRead).isOk(); + return CdmStore.getService(ISequenceService.class).moveSingleRead(((Sequence)fromParentSpecimen).getUuid(), + ((Sequence)targetNodeValue).getUuid(), + singleRead.getUuid()).isOk(); + } } @@ -115,7 +128,10 @@ public class MoveDerivateOperation extends AbstractPostOperation { else if(draggedNodeValue instanceof Sequence && targetNodeValue instanceof DnaSample && ((SpecimenOrObservationBase) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){ Sequence sequence = (Sequence)draggedNodeValue; if(fromParentSpecimen instanceof DnaSample && ((SpecimenOrObservationBase) targetNodeValue).getRecordBasis()==SpecimenOrObservationType.DnaSample){ - return occurrenceService.moveSequence((DnaSample)fromParentSpecimen, (DnaSample)targetNodeValue, sequence).isOk(); + return occurrenceService.moveSequence(((DnaSample)fromParentSpecimen).getUuid(), + ((DnaSample)targetNodeValue).getUuid(), + sequence.getUuid()).isOk(); + } } return false; diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchComposite.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchComposite.java similarity index 60% rename from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchComposite.java rename to eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchComposite.java index b101a2298..b34b7ab19 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchComposite.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchComposite.java @@ -7,12 +7,9 @@ * 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.derivateSearch; +package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -20,7 +17,6 @@ import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.wb.swt.ResourceManager; @@ -30,72 +26,82 @@ import org.eclipse.wb.swt.ResourceManager; * */ public class DerivateSearchComposite extends Composite { + + public static final int ALL_SPECIMENS = 0; + public static final int ASSIGNED_SPECIMENS = 1; + public static final int UNASSIGNED_SPECIMENS = 2; + private final FormToolkit formToolkit = new FormToolkit(Display.getDefault()); private final Text searchField; - private final Table table; - private final TableViewer resultViewer; private final Combo comboDerivateType; private final Button buttonSearch; - private final Button btnFilterUndeterminedSpecimen; private final Text textTaxonName; private final Button btnBrowseTaxa; private final Label lblTaxon; private final Label lblDerivateType; private final Button btnClearTaxon; + private Label lbltaxonAssignment; + private Combo comboTaxonAssignment; + private Label lblTitleCache; /** * Create the composite. + * * @param parent * @param style */ public DerivateSearchComposite(Composite parent, int style) { super(parent, style); - setLayout(new GridLayout(4, false)); + setLayout(new GridLayout(7, false)); lblTaxon = new Label(this, SWT.NONE); lblTaxon.setText("Taxon"); - textTaxonName = formToolkit.createText(this, "New Text", SWT.NONE); + textTaxonName = formToolkit.createText(this, "New Text", SWT.BORDER); textTaxonName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); textTaxonName.setEnabled(false); textTaxonName.setText(""); btnBrowseTaxa = formToolkit.createButton(this, "", SWT.NONE); + btnBrowseTaxa.setAlignment(SWT.RIGHT); btnBrowseTaxa.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/open.gif")); btnClearTaxon = formToolkit.createButton(this, "", SWT.NONE); - btnClearTaxon.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1)); + btnClearTaxon.setAlignment(SWT.RIGHT); + btnClearTaxon.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1)); btnClearTaxon.setImage(ResourceManager.getPluginImage("eu.etaxonomy.taxeditor.store", "icons/trash.gif")); + lbltaxonAssignment = new Label(this, SWT.NONE); + lbltaxonAssignment.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + lbltaxonAssignment.setText("Taxon assignment"); + + comboTaxonAssignment = new Combo(this, SWT.NONE); + comboTaxonAssignment.setItems(new String[] { "All", "Yes", "No" }); + comboTaxonAssignment.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + formToolkit.adapt(comboTaxonAssignment); + formToolkit.paintBordersFor(comboTaxonAssignment); + comboTaxonAssignment.select(ALL_SPECIMENS); + new Label(this, SWT.NONE); + + lblTitleCache = new Label(this, SWT.NONE); + lblTitleCache.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + lblTitleCache.setText("Title Cache"); + + searchField = formToolkit.createText(this, "New Text", SWT.BORDER); + searchField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); + searchField.setText(""); + lblDerivateType = new Label(this, SWT.NULL); + lblDerivateType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblDerivateType.setText("Derivative Type"); comboDerivateType = new Combo(this, SWT.READ_ONLY); comboDerivateType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); formToolkit.paintBordersFor(comboDerivateType); - btnFilterUndeterminedSpecimen = new Button(this, SWT.CHECK); - btnFilterUndeterminedSpecimen.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); - btnFilterUndeterminedSpecimen.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - } - }); - btnFilterUndeterminedSpecimen.setText("Determined"); - - buttonSearch = new Button(this, SWT.NONE); - formToolkit.adapt(buttonSearch, true, true); - buttonSearch.setText("Search"); - - searchField = formToolkit.createText(this, "New Text", SWT.NONE); - searchField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); - searchField.setText(""); - new Label(this, SWT.NONE); - new Label(this, SWT.NONE); - - resultViewer = new TableViewer(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); - table = resultViewer.getTable(); - table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1)); + buttonSearch = new Button(this, SWT.NONE); + formToolkit.adapt(buttonSearch, true, true); + buttonSearch.setText("Search"); } @@ -103,42 +109,51 @@ public class DerivateSearchComposite extends Composite { protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } + public Text getSearchField() { return searchField; } - public TableViewer getResultViewer() { - return resultViewer; - } + public Combo getComboDerivateType() { return comboDerivateType; } + public Button getButtonSearch() { return buttonSearch; } @Override - public void setEnabled(boolean enabled){ + public void setEnabled(boolean enabled) { super.setEnabled(enabled); searchField.setEnabled(enabled); - table.setEnabled(enabled); - // resultViewer.setEnabled(enabled); comboDerivateType.setEnabled(enabled); + comboTaxonAssignment.setEnabled(enabled); buttonSearch.setEnabled(enabled); - btnFilterUndeterminedSpecimen.setEnabled(enabled); btnBrowseTaxa.setEnabled(enabled); + btnClearTaxon.setEnabled(enabled); lblTaxon.setEnabled(enabled); + lblTitleCache.setEnabled(enabled); + lbltaxonAssignment.setEnabled(enabled); lblDerivateType.setEnabled(enabled); } - public Button getBtnFilterUndeterminedSpecimen() { - return btnFilterUndeterminedSpecimen; - } + + public Button getBtnBrowseTaxa() { return btnBrowseTaxa; } + public Text getTextTaxonName() { return textTaxonName; } + public Button getBtnClearTaxon() { return btnClearTaxon; } + public Combo getComboTaxonAssignment() { + return comboTaxonAssignment; + } + + public Label getLbltaxonAssignment() { + return lbltaxonAssignment; + } } diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java similarity index 61% rename from eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java rename to eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java index dc954df63..42d43961a 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/derivateSearch/DerivateSearchCompositeController.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/derivate/searchFilter/DerivateSearchCompositeController.java @@ -7,25 +7,18 @@ * 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.derivateSearch; +package eu.etaxonomy.taxeditor.editor.view.derivate.searchFilter; import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.NotEnabledException; -import org.eclipse.core.commands.NotHandledException; -import org.eclipse.core.commands.common.NotDefinedException; -import org.eclipse.jface.viewers.ArrayContentProvider; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; -import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Widget; -import org.eclipse.ui.handlers.IHandlerService; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.service.IOccurrenceService; @@ -33,12 +26,13 @@ import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType; import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.taxeditor.model.AbstractUtility; -import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.SearchManager; import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory; import eu.etaxonomy.taxeditor.ui.mvc.combo.EnumTermComboController; +import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider; /** * Controller class for the {@link DerivateSearchComposite}.
@@ -50,17 +44,13 @@ public class DerivateSearchCompositeController implements Listener{ private final DerivateSearchComposite derivateSearchComposite; private EnumTermComboController comboSpecimenTypeController; - private final DerivateSearchView derivateSearchView; private DerivateLabelProvider labelProvider; private Taxon selectedTaxon; + private DerivateView derivativeEditor; - /** - * @param parent - * @param derivateSearchView - */ - public DerivateSearchCompositeController(Composite parent, DerivateSearchView derivateSearchView) { + public DerivateSearchCompositeController(Composite parent, DerivateView derivativeEditor) { this.derivateSearchComposite = new DerivateSearchComposite(parent, SWT.NONE); - this.derivateSearchView = derivateSearchView; + this.derivativeEditor = derivativeEditor; init(); } @@ -75,40 +65,9 @@ public class DerivateSearchCompositeController implements Listener{ derivateSearchComposite.getBtnBrowseTaxa().addListener(SWT.Selection, this); derivateSearchComposite.getBtnClearTaxon().addListener(SWT.Selection, this); - - //result table - TableViewer resultViewer = derivateSearchComposite.getResultViewer(); - resultViewer.setContentProvider(new ArrayContentProvider()); - labelProvider = new DerivateLabelProvider(); - resultViewer.setLabelProvider(labelProvider); - resultViewer.addDoubleClickListener(new IDoubleClickListener() { - @Override - public void doubleClick(DoubleClickEvent event) { - String commandId = "eu.etaxonomy.taxeditor.editor.handler.openDerivateView"; - - IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class); - try { - handlerService.executeCommand(commandId, null); - } catch (ExecutionException e) { - MessagingUtils.error(DerivateSearchCompositeController.class, e); - } catch (NotDefinedException e) { - MessagingUtils.error(DerivateSearchCompositeController.class, e); - } catch (NotEnabledException e) { - MessagingUtils.error(DerivateSearchCompositeController.class, e); - } catch (NotHandledException e) { - MessagingUtils.error(DerivateSearchCompositeController.class, e); - } - - } - }); - } private void searchDerivates(){ - if(!derivateSearchView.getConversationHolder().isBound()){ - derivateSearchView.setFocus(); //rebind the conversation - } - String queryString = derivateSearchComposite.getSearchField().getText(); SpecimenOrObservationType specimenType = comboSpecimenTypeController.getSelection(); @@ -117,12 +76,11 @@ public class DerivateSearchCompositeController implements Listener{ config.setSpecimenType(specimenType.equals(SpecimenOrObservationType.Unknown)?null:specimenType);//unknown := all types config.setTitleSearchString(queryString); if(selectedTaxon!=null){ - config.setRetrieveIndirectlyAssociatedSpecimens(true); config.setSpecimenType(null); } SearchManager searchManager = new SearchManager(); - List occurrences = searchManager.findOccurrences(config); + List occurrences = searchManager.findOccurrences(config, true); //filter out specimens of wrong type (only if an associated taxon was selected) if(selectedTaxon!=null && !specimenType.equals(SpecimenOrObservationType.Unknown)){ @@ -136,17 +94,27 @@ public class DerivateSearchCompositeController implements Listener{ occurrences = specimensOfCorrectType; } - //filter out assigned specimens - if(derivateSearchComposite.getBtnFilterUndeterminedSpecimen().getSelection()){ - List specimensWithNoDetermination = new ArrayList(); - for(SpecimenOrObservationBase result:occurrences){ - if(CdmStore.getService(IOccurrenceService.class).countDeterminations(result, null)==0){ - specimensWithNoDetermination.add(result); + //filter out (un-)assigned specimens + if(selectedTaxon==null){ + int selectionIndex = derivateSearchComposite.getComboTaxonAssignment().getSelectionIndex(); + List> specimenWithAssociations = new ArrayList>(); + if(selectionIndex!=DerivateSearchComposite.ALL_SPECIMENS){ + for (SpecimenOrObservationBase specimenOrObservationBase : occurrences) { + Collection> associatedTaxa = CdmStore.getService(IOccurrenceService.class).listAssociatedTaxa(specimenOrObservationBase, null, null, null, null); + if(!associatedTaxa.isEmpty()){ + specimenWithAssociations.add(specimenOrObservationBase); + specimenWithAssociations.addAll(CdmStore.getService(IOccurrenceService.class).getFieldUnits(specimenOrObservationBase.getUuid())); + } } } - occurrences = specimensWithNoDetermination; + if(selectionIndex==DerivateSearchComposite.UNASSIGNED_SPECIMENS){ + occurrences.removeAll(specimenWithAssociations); + } + else if(selectionIndex==DerivateSearchComposite.ASSIGNED_SPECIMENS){ + occurrences = new ArrayList(specimenWithAssociations); + } } - derivateSearchComposite.getResultViewer().setInput(occurrences); + derivativeEditor.updateRootEntities(occurrences); } @Override @@ -157,14 +125,20 @@ public class DerivateSearchCompositeController implements Listener{ searchDerivates(); } else if(eventSource==derivateSearchComposite.getBtnBrowseTaxa()){ - selectedTaxon = SelectionDialogFactory.getSelectionFromDialog(Taxon.class, derivateSearchView.getSite().getShell(), derivateSearchView.getConversationHolder(), null); + selectedTaxon = SelectionDialogFactory.getSelectionFromDialog(Taxon.class, this.derivateSearchComposite.getShell(), derivativeEditor.getConversationHolder(), null); if(selectedTaxon!=null){ derivateSearchComposite.getTextTaxonName().setText(selectedTaxon.getTitleCache()); } + derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ASSIGNED_SPECIMENS); + derivateSearchComposite.getComboTaxonAssignment().setEnabled(false); + derivateSearchComposite.getLbltaxonAssignment().setEnabled(false); } else if(eventSource==derivateSearchComposite.getBtnClearTaxon()){ selectedTaxon = null; derivateSearchComposite.getTextTaxonName().setText(""); + derivateSearchComposite.getComboTaxonAssignment().select(DerivateSearchComposite.ALL_SPECIMENS); + derivateSearchComposite.getComboTaxonAssignment().setEnabled(true); + derivateSearchComposite.getLbltaxonAssignment().setEnabled(true); } } @@ -174,16 +148,22 @@ public class DerivateSearchCompositeController implements Listener{ */ public void setEnabled(boolean enabled) { if(!derivateSearchComposite.isDisposed()){ - derivateSearchComposite.setEnabled(enabled); + GridData layoutData = (GridData) derivateSearchComposite.getLayoutData(); + layoutData.exclude = !enabled; + derivateSearchComposite.setVisible(enabled); + derivateSearchComposite.getParent().layout(true); } } + public void setLayoutData(Object layoutData){ + derivateSearchComposite.setLayoutData(layoutData); + } + /** * Resets all input fields */ public void reset(){ if(!derivateSearchComposite.isDisposed()){ - derivateSearchComposite.getResultViewer().setInput(null); derivateSearchComposite.getSearchField().setText(""); derivateSearchComposite.getComboDerivateType().deselectAll(); comboSpecimenTypeController.setSelection(SpecimenOrObservationType.Unknown); @@ -191,17 +171,6 @@ public class DerivateSearchCompositeController implements Listener{ selectedTaxon = null; } - public TableViewer getResultViewer() { - return derivateSearchComposite.getResultViewer(); - } - - public void setFocus() { - derivateSearchComposite.getResultViewer().getControl().setFocus(); - } - - /** - * @param conversationHolder - */ public void setConversation(ConversationHolder conversationHolder) { labelProvider.setConversation(conversationHolder); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java index de3e46f0d..86c95a2c1 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDragListener.java @@ -18,6 +18,7 @@ import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSourceAdapter; import org.eclipse.swt.dnd.DragSourceEvent; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; @@ -30,6 +31,7 @@ import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; public class DescriptionElementDragListener extends DragSourceAdapter { private DescriptiveViewPart part; + private DescriptionBase description; public DescriptionElementDragListener(DescriptiveViewPart part){ this.part = part; @@ -43,9 +45,10 @@ public class DescriptionElementDragListener extends DragSourceAdapter { return; // FIXME what to do here? if (event.detail != DND.DROP_NONE) { - IStructuredSelection selection = (IStructuredSelection) part.getViewer() - .getSelection(); - part.changed(null); + //IStructuredSelection selection = (IStructuredSelection) part.getViewer().getSelection(); + part.getViewer().refresh(); + + part.changed(null); } } @@ -58,7 +61,11 @@ public class DescriptionElementDragListener extends DragSourceAdapter { List descriptionElements = new ArrayList(); for (Object object : selection.toList()){ if(object instanceof DescriptionBase){ - descriptionElements.addAll(((DescriptionBase) object).getElements()); + if (!((DescriptionBase) object).getElements().isEmpty()){ + descriptionElements.addAll(((DescriptionBase) object).getElements()); + } + description = HibernateProxyHelper.deproxy(object, DescriptionBase.class); + }else if(object instanceof FeatureNodeContainer){ descriptionElements.addAll(((FeatureNodeContainer) object).getDescriptionElements()); }else if(object instanceof DescriptionElementBase){ @@ -68,8 +75,12 @@ public class DescriptionElementDragListener extends DragSourceAdapter { } if (DescriptionElementTransfer.getInstance().isSupportedType( event.dataType)) { - event.data = descriptionElements.toArray(new DescriptionElementBase[descriptionElements.size()]); + if (!descriptionElements.isEmpty()){ + event.data = descriptionElements.toArray(new DescriptionElementBase[descriptionElements.size()]); + } + } + } /** diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java index 488cc775b..465e3f0c0 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptionElementDropAdapter.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -46,35 +46,40 @@ public class DescriptionElementDropAdapter extends ViewerDropAdapter { public boolean performDrop(Object data) { TaxonDescription target = (TaxonDescription) getCurrentTarget(); Object[] droppedElements = (Object[]) data; - + Collection descriptionElements = new ArrayList(); - + boolean isCopy = getCurrentOperation() == DND.DROP_COPY ? true : false; - + // cannot drop a feature node onto itself - for (Object droppedElement : droppedElements) { - if (droppedElement == null){ - MessagingUtils.warningDialog("Operation not supported yet", this, "We are currently unable to drag and drop a newly created element. Please save the editor to make this work."); - return false; - } - if(! (droppedElement instanceof DescriptionElementBase)){ - return false; - }else{ - DescriptionElementBase descriptionElement = (DescriptionElementBase) droppedElement; - - if (descriptionElement.getInDescription().equals(target)) { + if (droppedElements != null){ + for (Object droppedElement : droppedElements) { + if (droppedElement == null){ + MessagingUtils.warningDialog("Operation not supported yet", this, "We are currently unable to drag and drop a newly created element. Please save the editor to make this work."); return false; } - - descriptionElements.add(descriptionElement); - } + if(! (droppedElement instanceof DescriptionElementBase)){ + return false; + }else{ + DescriptionElementBase descriptionElement = (DescriptionElementBase) droppedElement; + + if (descriptionElement.getInDescription().equals(target)) { + return false; + } + + descriptionElements.add(descriptionElement); + } + } + + AbstractPostOperation operation = new MoveDescriptionElementsOperation("Move Descriptions", EditorUtil.getUndoContext(), target, descriptionElements, isCopy, null); + + EditorUtil.executeOperation(operation); + return true; } - - AbstractPostOperation operation = new MoveDescriptionElementsOperation("Move Descriptions", EditorUtil.getUndoContext(), target, descriptionElements, isCopy, null); - - EditorUtil.executeOperation(operation); - - return true; + MessagingUtils.warningDialog("Operation not supported yet", this, "We are unable to drag and drop empty descriptions"); + + return false; + } /* (non-Javadoc) @@ -85,7 +90,6 @@ public class DescriptionElementDropAdapter extends ViewerDropAdapter { TransferData transferData) { boolean transferDataIsSupported = DescriptionElementTransfer.getInstance().isSupportedType( transferData); - System.out.println(target); return target instanceof TaxonDescription && transferDataIsSupported; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java index 317137548..b0aeb0f4d 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveContentProvider.java @@ -20,6 +20,7 @@ import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.description.FeatureTree; import eu.etaxonomy.cdm.model.description.IDescribable; import eu.etaxonomy.cdm.model.description.IndividualsAssociation; +import eu.etaxonomy.taxeditor.editor.definedterm.input.TermEditorInput; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; @@ -39,6 +40,7 @@ public class DescriptiveContentProvider implements ITreeContentProvider { protected Map, FeatureNodeContainerTree> featureNodeContainerCache; private boolean showOnlyIndividualAssociations; + public DescriptiveContentProvider(Map, FeatureNodeContainerTree> featureNodeContainerCache) { this(featureNodeContainerCache, false); } @@ -144,8 +146,8 @@ public class DescriptiveContentProvider implements ITreeContentProvider { * @return */ private FeatureTree getFeatureTree(DescriptionBase description){ - FeatureTree featureTree = null; + FeatureTree featureTree; // TODO change this to the feature tree associated with this taxon description if (description.hasStructuredData()){ featureTree = PreferencesUtil.getDefaultFeatureTreeForStructuredDescription(); @@ -155,7 +157,7 @@ public class DescriptiveContentProvider implements ITreeContentProvider { // create a transient tree with all features if none was selected if(featureTree == null){ - featureTree = FeatureTree.NewInstance(TermStore.getTerms(Feature.class)); + featureTree = TermEditorInput.getDefaultFeatureTree(); } return featureTree; diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java index 7556a73d2..60d46862b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/DescriptiveViewPart.java @@ -11,11 +11,7 @@ package eu.etaxonomy.taxeditor.editor.view.descriptive; import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; import java.util.Map; -import java.util.Set; -import java.util.UUID; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.GroupMarker; @@ -23,14 +19,11 @@ import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeNode; -import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; @@ -43,20 +36,18 @@ import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PartInitException; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.cdm.model.description.IDescribable; -import eu.etaxonomy.cdm.model.description.IndividualsAssociation; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.view.checklist.ChecklistEditor; import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; +import eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; import eu.etaxonomy.taxeditor.model.FeatureNodeContainerTree; @@ -64,14 +55,12 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; import eu.etaxonomy.taxeditor.model.ImageResources; -import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart; import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart; import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart; /** - *

DescriptiveViewPart class.

- * * @author n.hoffmann * @created Jun 9, 2010 * @version 1.0 @@ -124,58 +113,8 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP createToolbar(); - // set initial input -// if(getEditor() != null){ -// viewer.setInput(getEditor().getEditorInput()); -// } - - viewer.addDoubleClickListener(new IDoubleClickListener() { - @Override - public void doubleClick(DoubleClickEvent event) { - //Open derivate editor when specimen description element is double clicked - TreeSelection selection = (TreeSelection) viewer.getSelection(); - Iterator iterator = selection.iterator(); - Set specimenUuids = new HashSet(); - while(iterator.hasNext()){ - Object next = iterator.next(); - if(next instanceof IndividualsAssociation){ - SpecimenOrObservationBase specimen = ((IndividualsAssociation)next).getAssociatedSpecimenOrObservation(); - if(specimen!=null){ - specimenUuids.add(specimen.getUuid()); - } - } - } - try { - if(!specimenUuids.isEmpty()){ - EditorUtil.open(new DerivateViewEditorInput(specimenUuids)); - } - } catch (PartInitException e) { - MessagingUtils.error(DescriptiveViewPart.class, "Could not open Derivative Editor", e); - } - - - //TODO: extend command to accept parameter to open editor -// String commandId = "eu.etaxonomy.taxeditor.editor.handler.openDerivateView"; -// IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class); -// try { -// handlerService.executeCommand(commandId, null); -// } catch (ExecutionException e) { -// MessagingUtils.error(DerivateSearchCompositeController.class, e); -// } catch (NotDefinedException e) { -// MessagingUtils.error(DerivateSearchCompositeController.class, e); -// } catch (NotEnabledException e) { -// MessagingUtils.error(DerivateSearchCompositeController.class, e); -// } catch (NotHandledException e) { -// MessagingUtils.error(DerivateSearchCompositeController.class, e); -// } - - } - }); } - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.model.AbstractCdmViewPart#getInitialSelection() - */ /** {@inheritDoc} */ @Override protected ISelection getInitialSelection() { @@ -223,10 +162,12 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP if(part == this){ return; } - if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){ - // do not show empty page as these views are also used to edit the description selected in this view - return; - } + if (part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart + || part instanceof MediaViewPart) { + // do not show empty page as these views are also used to edit the + // description selected in this view + return; + } // unpackage TreeNode of DerivateView else if(part instanceof DerivateView){ TreeNode treeNodeOfSelection = EditorUtil.getTreeNodeOfSelection(selection); @@ -336,8 +277,13 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP } if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase)){ ((BulkEditor) part).forceDirty(); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection(); + ((BulkEditor) part).changed(selection.getFirstElement()); + } } + super.changed(object); } @@ -347,11 +293,6 @@ public class DescriptiveViewPart extends AbstractCdmEditorViewPart implements IP return viewer; } - /** - *

onComplete

- * - * @return a boolean. - */ @Override public boolean onComplete() { return false; diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java index fc7a044a9..31b116958 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java @@ -39,6 +39,7 @@ import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; /** *

DeleteDescriptionHandler class.

@@ -59,6 +60,7 @@ public class DeleteHandler extends AbstractHandler { IWorkbenchPart part = HandlerUtil.getActivePart(event); IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part : null; + ICdmEntitySessionEnabled cdmEntitySessionEnabled = (part instanceof ICdmEntitySessionEnabled) ? (ICdmEntitySessionEnabled) part : null; try { String label = event.getCommand().getName(); @@ -71,20 +73,20 @@ public class DeleteHandler extends AbstractHandler { // TaxonDescription if(object instanceof TaxonDescription){ - operations.add(new DeleteTaxonDescriptionOperation(label, undoContext, (TaxonDescription) object, postOperationEnabled)); + operations.add(new DeleteTaxonDescriptionOperation(label, undoContext, (TaxonDescription) object, postOperationEnabled, cdmEntitySessionEnabled)); } else if(object instanceof SpecimenDescription){ - operations.add(new DeleteSpecimenDescriptionOperation(label, undoContext, (SpecimenDescription) object, postOperationEnabled)); + operations.add(new DeleteSpecimenDescriptionOperation(label, undoContext, (SpecimenDescription) object, postOperationEnabled, cdmEntitySessionEnabled)) ; } // DescriptionElementBase else if(object instanceof DescriptionElementBase){ - operations.add(new DeleteDescriptionElementOperation(label, undoContext, (DescriptionElementBase) object, postOperationEnabled)); + operations.add(new DeleteDescriptionElementOperation(label, undoContext, (DescriptionElementBase) object, postOperationEnabled, cdmEntitySessionEnabled)); } else if(object instanceof FeatureNodeContainer){ List descriptions = ((FeatureNodeContainer) object).getDescriptionElementsForEntireBranch(); for(DescriptionElementBase description : descriptions){ - operations.add(new DeleteDescriptionElementOperation(label, undoContext, description, postOperationEnabled)); + operations.add(new DeleteDescriptionElementOperation(label, undoContext, description, postOperationEnabled, cdmEntitySessionEnabled)); } } // Media diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java index 3c1fee4fb..459cd29bb 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionElementsHandler.java @@ -26,10 +26,7 @@ import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.common.Annotation; -import eu.etaxonomy.cdm.model.common.AnnotationType; import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.common.Language; import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.cdm.model.description.TaxonDescription; @@ -58,9 +55,7 @@ import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; public class MoveDescriptionElementsHandler extends AbstractHandler implements IPostOperationEnabled{ private UUID newAcceptedTaxonNodeUuid; private TaxonNameEditor editor; - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ + @Override public Object execute(ExecutionEvent event) throws ExecutionException { @@ -93,22 +88,25 @@ public class MoveDescriptionElementsHandler extends AbstractHandler implements I } DescriptionBase description = elements.get(0).getInDescription(); List excludeTaxa = new ArrayList(); - if (description.isInstanceOf(TaxonDescription.class)){ + if (description!=null && description.isInstanceOf(TaxonDescription.class)){ TaxonDescription taxonDescription = HibernateProxyHelper.deproxy(description, TaxonDescription.class); actualTaxon = taxonDescription.getTaxon(); excludeTaxa.add(actualTaxon.getUuid()); } Classification classification = null; + TaxonNode actualNode = null; if (actualTaxon != null){ if (!actualTaxon.getTaxonNodes().isEmpty() && actualTaxon.getTaxonNodes().size() ==1){ - classification = actualTaxon.getTaxonNodes().iterator().next().getClassification(); + actualNode = actualTaxon.getTaxonNodes().iterator().next(); + classification = actualNode.getClassification(); + } } TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Choose the accepted taxon", excludeTaxa, - null,classification + null, classification ); if (newAcceptedTaxonNode != null){ Taxon targetTaxon = newAcceptedTaxonNode.getTaxon(); @@ -118,19 +116,15 @@ public class MoveDescriptionElementsHandler extends AbstractHandler implements I return null; } newAcceptedTaxonNodeUuid = newAcceptedTaxonNode.getUuid(); - TaxonDescription targetDescription = TaxonDescription.NewInstance(targetTaxon); + String moveMessage = String.format("Elements moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()); - targetDescription.setTitleCache(moveMessage, true); - Annotation annotation = Annotation.NewInstance(moveMessage, Language.getDefaultLanguage()); - annotation.setAnnotationType(AnnotationType.TECHNICAL()); - targetDescription.addAnnotation(annotation); try { AbstractPostOperation operation = new MoveDescriptionElementsOperation( event.getCommand().getName(), EditorUtil.getUndoContext(), - targetDescription, elements, false, this); + targetTaxon.getUuid(), moveMessage, elements, false, this); - EditorUtil.executeOperation(operation); + AbstractUtility.executeOperation(operation); //CdmStore.getService(ITaxonService.class).saveOrUpdate(targetTaxon); @@ -143,9 +137,6 @@ public class MoveDescriptionElementsHandler extends AbstractHandler implements I return null; } - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) - */ /** {@inheritDoc} */ @Override public boolean postOperation(CdmBase objectAffectedByOperation) { @@ -180,7 +171,6 @@ public class MoveDescriptionElementsHandler extends AbstractHandler implements I @Override public boolean onComplete() { - // TODO Auto-generated method stub return false; } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java index c4b57e9cb..c51d0ee05 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java @@ -12,6 +12,7 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.common.NotDefinedException; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Display; @@ -22,16 +23,17 @@ import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; -import eu.etaxonomy.taxeditor.editor.Page; -import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor; +import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.MoveDescriptionToOtherTaxonOperation; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.FeatureNodeContainer; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; @@ -50,7 +52,7 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler private MoveDescriptionToOtherTaxonOperation operation; private UUID newAcceptedTaxonNodeUuid; - private TaxonNameEditor editor; + private MultiPageTaxonEditor editor; /* (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) @@ -60,6 +62,18 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler public Object execute(ExecutionEvent event) throws ExecutionException { ISelection selection = HandlerUtil.getCurrentSelection(event); + editor = EditorUtil.getActiveMultiPageTaxonEditor(); + if (this.editor.isDirty()){ + boolean proceed = MessageDialog.openQuestion(null, + "Save changes", "You have made changes that must be saved before this query can be executed. Would you like to proceed?"); + if (proceed) { + editor.doSave(EditorUtil.getMonitor()); + } else { + return null; + } + + } + if(selection instanceof IStructuredSelection){ @@ -74,7 +88,7 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler } else if (element instanceof DescriptionBase){ uuid = ((DescriptionBase)element).getUuid(); } - + if (uuid != null){ descriptions.add((TaxonDescription) CdmStore.getService(IDescriptionService.class).load(uuid, null)); } @@ -85,14 +99,24 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler // Choose the target taxon List excludeTaxa = new ArrayList(); - editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME); + + excludeTaxa.add(descriptions.get(0).getTaxon().getUuid()); + + //get current taxon node + TaxonNode node = null; + Classification classification = null; + MultiPageTaxonEditor taxonEditor = EditorUtil.getActiveMultiPageTaxonEditor(); + if(taxonEditor!=null){ + node = ((TaxonEditorInput) taxonEditor.getEditorInput()).getTaxonNode(); + classification = node.getClassification(); + } TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Choose the accepted taxon", excludeTaxa, - null, - null); + node, + classification); if (newAcceptedTaxonNode == null) { return null; @@ -103,7 +127,12 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler try { for(TaxonDescription description : descriptions){ operation = new MoveDescriptionToOtherTaxonOperation(event.getCommand().getName(), - editor.getUndoContext(), description, newAcceptedTaxonNode, this, editor); + editor.getUndoContext(), + description, + newAcceptedTaxonNode, + this, + editor, + (ICdmEntitySessionEnabled)editor.getEditorInput()); AbstractUtility.executeOperation(operation); } @@ -126,7 +155,7 @@ public class MoveDescriptionToOtherTaxonHandler extends AbstractHandler @Override public void run() { - AbstractUtility.close(editor.getMultiPageTaxonEditor()); + AbstractUtility.close(editor); try { MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid); diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java index ed86d4b2b..0c5ded96a 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -20,6 +20,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; /** *

DeleteDescriptionElementOperation class.

@@ -29,8 +30,8 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; * @version 1.0 */ public class DeleteDescriptionElementOperation extends AbstractPostTaxonOperation { - - private DescriptionElementBase element; + + private final DescriptionElementBase element; private DescriptionBase description = null; /** @@ -42,9 +43,10 @@ public class DeleteDescriptionElementOperation extends AbstractPostTaxonOperatio * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. */ public DeleteDescriptionElementOperation(String label, IUndoContext undoContext, - DescriptionElementBase element, IPostOperationEnabled postOperationEnabled) { - super(label, undoContext, postOperationEnabled); - + DescriptionElementBase element, IPostOperationEnabled postOperationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, cdmEntitySessionEnabled); + this.element = element; } @@ -55,11 +57,11 @@ public class DeleteDescriptionElementOperation extends AbstractPostTaxonOperatio @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - + description = element.getInDescription(); - + monitor.worked(20); - + // Remove element from description if (description == null) { MessagingUtils.error(this.getClass(), "Couldn't find element's description!", null); @@ -91,7 +93,7 @@ public class DeleteDescriptionElementOperation extends AbstractPostTaxonOperatio throws ExecutionException { description.addElement(element); - + return postExecute(element); } } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteSpecimenDescriptionOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteSpecimenDescriptionOperation.java index 6b5b7f6ec..4f2a46550 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteSpecimenDescriptionOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteSpecimenDescriptionOperation.java @@ -20,6 +20,7 @@ import eu.etaxonomy.cdm.model.description.SpecimenDescription; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -32,9 +33,12 @@ public class DeleteSpecimenDescriptionOperation extends AbstractPostOperation propertyPaths = new ArrayList(); - propertyPaths.add("taxon"); - TaxonDescription loadedDescription = (TaxonDescription) CdmStore.getService(IDescriptionService.class).load(description.getUuid(), propertyPaths); - CdmStore.getService(IDescriptionService.class).deleteDescription(loadedDescription); + CdmStore.getService(IDescriptionService.class).deleteDescription(description.getUuid()); return postExecute(description); } return null; - + } /* (non-Javadoc) diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java index fd74d7274..d2f26b6df 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionElementsOperation.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -11,23 +11,20 @@ package eu.etaxonomy.taxeditor.editor.view.descriptive.operation; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.PartInitException; import eu.etaxonomy.cdm.api.service.IDescriptionService; -import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.api.service.UpdateResult; import eu.etaxonomy.cdm.model.description.DescriptionBase; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; -import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; -import eu.etaxonomy.taxeditor.model.AbstractUtility; -import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; @@ -42,10 +39,12 @@ public class MoveDescriptionElementsOperation extends AbstractPostTaxonOperation private Collection descriptionElements; private DescriptionBase targetDescription; private IDescriptionService service; + private UUID targetTaxonUuid; + private String moveMessage; private boolean isCopy; /** - * + * * @param label * @param undoContext * @param targetDescription @@ -54,28 +53,50 @@ public class MoveDescriptionElementsOperation extends AbstractPostTaxonOperation * @param postOperationEnabled */ public MoveDescriptionElementsOperation(String label, - IUndoContext undoContext, DescriptionBase targetDescription, + IUndoContext undoContext, DescriptionBase targetDescription, Collection descriptionElements, boolean isCopy, IPostOperationEnabled postOperationEnabled) { super(label, undoContext, postOperationEnabled); this.targetDescription = targetDescription; this.descriptionElements = descriptionElements; this.isCopy = isCopy; - + service = CdmStore.getService(IDescriptionService.class); } + public MoveDescriptionElementsOperation(String label, + IUndoContext undoContext, UUID targetTaxonUuid,String moveMessage, + Collection descriptionElements, boolean isCopy, + IPostOperationEnabled postOperationEnabled) { + super(label, undoContext, postOperationEnabled); + this.targetTaxonUuid = targetTaxonUuid; + this.descriptionElements = descriptionElements; + this.moveMessage = moveMessage; + this.isCopy = isCopy; + + service = CdmStore.getService(IDescriptionService.class); + } + /* (non-Javadoc) * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) */ @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { - - - service.moveDescriptionElementsToDescription(descriptionElements, targetDescription, isCopy); - - + + Set descriptionElementsUuid = new HashSet(); + for(DescriptionElementBase deBase : descriptionElements) { + descriptionElementsUuid.add(deBase.getUuid()); + } + UpdateResult result; + if(targetDescription == null){ + result = service.moveDescriptionElementsToDescription(descriptionElementsUuid, targetTaxonUuid, moveMessage, isCopy); + + } else { + UUID targetDescriptionUuid = targetDescription.getUuid(); + result = service.moveDescriptionElementsToDescription(descriptionElementsUuid, targetDescriptionUuid, isCopy); + + } return postExecute(targetDescription); } @@ -98,7 +119,7 @@ public class MoveDescriptionElementsOperation extends AbstractPostTaxonOperation // TODO Auto-generated method stub return null; } - - + + } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java index 8ab3fe60b..1a04b047c 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -17,6 +17,8 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.model.common.Annotation; @@ -27,6 +29,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -37,11 +40,11 @@ import eu.etaxonomy.taxeditor.store.CdmStore; */ public class MoveDescriptionToOtherTaxonOperation extends AbstractPersistentPostOperation { - - private TaxonNode newAcceptedTaxonNode; - private TaxonDescription description; - + private final TaxonNode newAcceptedTaxonNode; + + private final TaxonDescription description; + /** *

Constructor for ChangeAcceptedTaxonToSynonymOperation.

* @@ -53,9 +56,13 @@ public class MoveDescriptionToOtherTaxonOperation extends * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. */ public MoveDescriptionToOtherTaxonOperation(String label, - IUndoContext undoContext, TaxonDescription description, TaxonNode targetTaxonNode, - IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); // FIXME is this the right constructor ??? + IUndoContext undoContext, + TaxonDescription description, + TaxonNode targetTaxonNode, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); // FIXME is this the right constructor ??? this.description = description; this.newAcceptedTaxonNode = targetTaxonNode; } @@ -71,7 +78,7 @@ public class MoveDescriptionToOtherTaxonOperation extends monitor.worked(20); bind(); - + String moveMessage = String.format("Description moved from %s", EditorUtil.getActiveMultiPageTaxonEditor().getTaxon()); if(description.isProtectedTitleCache()){ String separator = ""; @@ -84,9 +91,15 @@ public class MoveDescriptionToOtherTaxonOperation extends annotation.setAnnotationType(AnnotationType.TECHNICAL()); description.addAnnotation(annotation); newAcceptedTaxonNode.getTaxon().addDescription(description); - CdmStore.getService(IDescriptionService.class).saveOrUpdate(description); + if (CdmApplicationState.getCurrentAppConfig() instanceof CdmApplicationRemoteController) { + CdmStore.getService(IDescriptionService.class).merge(description); + } else { + CdmStore.getService(IDescriptionService.class).saveOrUpdate(description); + } + + // CdmStore.getService(IDescriptionService.class).moveTaxonDescription(description.getUuid(), newAcceptedTaxonNode.getTaxon().getUuid()); monitor.worked(40); - + return postExecute(description); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java index e0520f002..331526d40 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/MediaViewPart.java @@ -23,18 +23,18 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; +import eu.etaxonomy.cdm.model.description.IDescribable; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; -import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.IPartContentHasDetails; import eu.etaxonomy.taxeditor.model.IPartContentHasMedia; import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData; +import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart; import eu.etaxonomy.taxeditor.view.detail.DetailsViewPart; import eu.etaxonomy.taxeditor.view.supplementaldata.SupplementalDataViewPart; @@ -97,24 +97,22 @@ public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartCon return; } - if(part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart){ - // do not show empty page as these views are also used to edit the description selected in this view + if (part instanceof DetailsViewPart || part instanceof SupplementalDataViewPart + || part instanceof DescriptiveViewPart) { + // do not show empty page as these views are also used to edit the + // description selected in this view return; } if(part instanceof IPartContentHasMedia && ((IPartContentHasMedia) part).canAttachMedia()){ - if(part instanceof MultiPageTaxonEditor){ - IEditorInput input = ((IEditorPart) part).getEditorInput(); - showViewer(part, new StructuredSelection(input)); - return; - } - else if(selection instanceof IStructuredSelection){ + if(selection instanceof IStructuredSelection){ Object firstElement = ((IStructuredSelection) selection).getFirstElement(); if(firstElement instanceof TreeNode){ showViewer(part, new StructuredSelection(((TreeNode) firstElement).getValue())); return; } - else if(firstElement!=null){ + else if(firstElement!=null + && firstElement instanceof IDescribable){ showViewer(part, (IStructuredSelection) selection); return; } @@ -137,6 +135,10 @@ public class MediaViewPart extends AbstractCdmEditorViewPart implements IPartCon // take a look at ISaveblePart if(part instanceof BulkEditor && !(object instanceof SpecimenOrObservationBase)){ ((BulkEditor) part).forceDirty(); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + IStructuredSelection selection = (IStructuredSelection) ((BulkEditor) part).getSelectionProvider().getSelection(); + ((BulkEditor) part).changed(selection.getFirstElement()); + } } super.changed(object); } diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java index 466428298..894440b0b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java +++ b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/handler/AddImageGalleryHandler.java @@ -7,28 +7,16 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.common.NotDefinedException; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TreeNode; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; +import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase; import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.cdm.model.taxon.TaxonBase; -import eu.etaxonomy.taxeditor.bulkeditor.BulkEditor; import eu.etaxonomy.taxeditor.bulkeditor.BulkEditorUtil; -import eu.etaxonomy.taxeditor.bulkeditor.input.OccurrenceEditorInput; import eu.etaxonomy.taxeditor.editor.EditorUtil; -import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView; -import eu.etaxonomy.taxeditor.editor.view.derivate.DerivateViewEditorInput; -import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart; import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.AddDerivedUnitFacadeMediaOperation; -import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateSpecimenDescriptionOperation; import eu.etaxonomy.taxeditor.editor.view.descriptive.operation.CreateTaxonDescriptionOperation; import eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart; import eu.etaxonomy.taxeditor.model.AbstractUtility; @@ -37,89 +25,44 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; /** - *

AddImageGalleryHandler class.

- * * @author p.ciardelli * @version $Id: $ */ public class AddImageGalleryHandler extends AbstractHandler { - /* (non-Javadoc) - * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) - */ /** {@inheritDoc} */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { - IWorkbenchPart part = HandlerUtil.getActivePart(event); - IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part : null; + IWorkbenchPart part = HandlerUtil.getActivePart(event); + IPostOperationEnabled postOperationEnabled = (part instanceof IPostOperationEnabled) ? (IPostOperationEnabled) part : null; + if(part instanceof MediaViewPart){ + Object viewerInput = ((MediaViewPart)part).getViewer().getInput(); + try { + if(viewerInput instanceof CdmBase){ + if(((CdmBase) viewerInput).isInstanceOf(Taxon.class)){ + Taxon taxon = HibernateProxyHelper.deproxy(viewerInput, Taxon.class); - IEditorPart editor = HandlerUtil.getActiveEditor(event); - IEditorInput input = editor.getEditorInput(); + AbstractPostOperation operation = new CreateTaxonDescriptionOperation(event.getCommand().getName(), + EditorUtil.getUndoContext(), taxon, postOperationEnabled, true); - if (input instanceof TaxonEditorInput) { - Taxon taxon = ((TaxonEditorInput) input).getTaxon(); - AbstractPostOperation operation; - try { - // TODO use undo context specific to editor - operation = new CreateTaxonDescriptionOperation(event.getCommand().getName(), - EditorUtil.getUndoContext(), taxon, postOperationEnabled, true); - AbstractUtility.executeOperation(operation); - } catch (NotDefinedException e) { - MessagingUtils.warn(getClass(), "Command name not set."); - } - } - else if(input instanceof OccurrenceEditorInput){ - BulkEditor bulkEditor = (BulkEditor) editor; - ISelection selection = bulkEditor.getSelectionProvider().getSelection(); - invokeOperation(event, postOperationEnabled, selection); - } - else if(input instanceof DerivateViewEditorInput){ - ISelection selection = ((DerivateView)editor).getSelection(); - invokeOperation(event, postOperationEnabled, selection); - } else if(part instanceof MediaViewPart){ - Object viewerInput = ((MediaViewPart)part).getViewer().getInput(); - - if(viewerInput instanceof Taxon){ - Taxon taxon = HibernateProxyHelper.deproxy(viewerInput, Taxon.class); - AbstractPostOperation operation; - try { - // TODO use undo context specific to editor - operation = new CreateTaxonDescriptionOperation(event.getCommand().getName(), - EditorUtil.getUndoContext(), taxon, postOperationEnabled, true); - AbstractUtility.executeOperation(operation); - } catch (NotDefinedException e) { - MessagingUtils.warn(getClass(), "Command name not set."); - } - - } - } - - return null; - } + AbstractUtility.executeOperation(operation); + } + else if(((CdmBase) viewerInput).isInstanceOf(SpecimenOrObservationBase.class)){ + SpecimenOrObservationBase specimen = HibernateProxyHelper.deproxy(viewerInput, SpecimenOrObservationBase.class); - /** - * @param event - * @param postOperationEnabled - * @param selection - */ - private void invokeOperation(ExecutionEvent event, IPostOperationEnabled postOperationEnabled, ISelection selection) { - if(selection instanceof IStructuredSelection){ - Object element = ((IStructuredSelection) selection).getFirstElement(); - if(element instanceof TreeNode){ - element = ((TreeNode) element).getValue(); - } - if(element instanceof SpecimenOrObservationBase){ - try { - AbstractPostOperation operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(), - BulkEditorUtil.getUndoContext(), (SpecimenOrObservationBase)element, postOperationEnabled); - AbstractUtility.executeOperation(operation); - } catch (NotDefinedException e) { - MessagingUtils.warn(getClass(), "Command name not set."); - } - } - } - } + AbstractPostOperation operation = new AddDerivedUnitFacadeMediaOperation(event.getCommand().getName(), + BulkEditorUtil.getUndoContext(), specimen, postOperationEnabled); + + AbstractUtility.executeOperation(operation); + } + } + } catch (NotDefinedException e) { + MessagingUtils.warn(getClass(), "Command name not set."); + } + } + return null; + } -} +} \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties b/eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties deleted file mode 100644 index 5f2aaccdd..000000000 --- a/eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties +++ /dev/null @@ -1,33 +0,0 @@ -### ************ APPENDER ***********************************### - -### direct log messages to stdout ### -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### direct messages to file hibernate.log ### -log4j.appender.file=org.apache.log4j.FileAppender -log4j.appender.file.File=taxeditor.log -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### ************* LOG LEVELS *********************************### - -### set log levels - for more verbose logging change 'info' to 'debug' ### -### levels: error, warn, debug, info -log4j.rootLogger=INFO, stdout - -### set directory-specific levels below - -### basic level for editor directory -log4j.logger.eu.etaxonomy.taxeditor.editor = WARN, stdout - -log4j.logger.eu.etaxonomy.taxeditor.editor.handler = DEBUG, stdout - -### log level for conversation handler -#log4j.logger.eu.etaxonomy.cdm.api.application = DEBUG, stdout - -log4j.logger.org.springframework.orm.hibernate3 = WARN, stdout - - diff --git a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExisitingHomotypicalGroupOperationTest.java b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExisitingHomotypicalGroupOperationTest.java index 39909f5cf..7f476f1d7 100644 --- a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExisitingHomotypicalGroupOperationTest.java +++ b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExisitingHomotypicalGroupOperationTest.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -17,11 +17,9 @@ import org.junit.Test; import eu.etaxonomy.cdm.model.name.HomotypicalGroup; import eu.etaxonomy.cdm.model.name.NonViralName; -import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; -import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation; import eu.etaxonomy.taxeditor.store.operations.AbstractTaxeditorOperationTestBase; /** @@ -31,115 +29,115 @@ import eu.etaxonomy.taxeditor.store.operations.AbstractTaxeditorOperationTestBas */ public class CreateSynonymInExisitingHomotypicalGroupOperationTest extends AbstractTaxeditorOperationTestBase { - private TaxonNameBase newSynonymName; + private NonViralName newSynonymName; private HomotypicalGroup homotypicalGroup; private NonViralName taxonName; - + /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { - + taxonName = NonViralName.NewInstance(null); taxon = Taxon.NewInstance(taxonName, null); - + homotypicalGroup = HomotypicalGroup.NewInstance(); newSynonymName = NonViralName.NewInstance(null); - + operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group", undoContext, taxon, homotypicalGroup, newSynonymName, postOperation); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * + * * Homotypic group is the Taxons homotypic group, so we expect the synonym to be homotypic to the accepted taxon. - * - * @throws ExecutionException + * + * @throws ExecutionException */ @Test - public void testExecuteTaxonHomotypicGroup() throws ExecutionException { + public void testExecuteTaxonHomotypicGroup() throws ExecutionException { homotypicalGroup.addTypifiedName(taxonName); operation.execute(monitor, info); - + Assert.assertTrue("Taxon should have a synonym now.", taxon.getSynonyms().size() > 0); Assert.assertTrue("Taxon should have a homotypic synonym now", taxon.getHomotypicSynonymsByHomotypicGroup().size() > 0); } - + /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * + * * Homotypic group is not the accepted taxons. Heterotypic synonym should be created. - * - * @throws ExecutionException + * + * @throws ExecutionException */ @Test - public void testExecuteSynonymHomotypicGroup() throws ExecutionException { + public void testExecuteSynonymHomotypicGroup() throws ExecutionException { // test heterotypic synonym operation.execute(monitor, info); - + Assert.assertTrue("Taxon should have a synonym now.", taxon.getSynonyms().size() > 0); Assert.assertTrue("Taxon should have a homotypic group", taxon.getHomotypicSynonymyGroups().size() > 0); Assert.assertEquals("Synonym relationship should be heterotypic", SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), taxon.getSynonymRelations().toArray(new SynonymRelationship[0])[0].getType()); } - + /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testUndoTaxonHomotypicGroup() throws ExecutionException { homotypicalGroup.addTypifiedName(taxonName); - + operation.execute(monitor, info); operation.undo(monitor, info); - + Assert.assertTrue("There should not be synonym relationships for the taxon", taxon.getSynonyms().size() == 0); } - + /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testUndoSynonymHomotypicGroup() throws ExecutionException { operation.execute(monitor, info); operation.undo(monitor, info); - + Assert.assertTrue("There should not be synonym relationships for the taxon", taxon.getSynonyms().size() == 0); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testRedoTaxonHomotypicGroup() throws ExecutionException { homotypicalGroup.addTypifiedName(taxonName); - + operation.execute(monitor, info); - operation.undo(monitor, info); + operation.undo(monitor, info); operation.redo(monitor, info); - + Assert.assertTrue("Taxon should have a synonym now.", taxon.getSynonyms().size() > 0); Assert.assertTrue("Taxon should have a homotypic synonym now", taxon.getHomotypicSynonymsByHomotypicGroup().size() > 0); } - + /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testRedoSynonymHomotypicGroup() throws ExecutionException { operation.execute(monitor, info); - operation.undo(monitor, info); + operation.undo(monitor, info); operation.redo(monitor, info); - + Assert.assertTrue("Taxon should have a synonym now.", taxon.getSynonyms().size() > 0); Assert.assertTrue("Taxon should have a homotypic group", taxon.getHomotypicSynonymyGroups().size() > 0); Assert.assertEquals("Synonym relationship should be heterotypic", SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), taxon.getSynonymRelations().toArray(new SynonymRelationship[0])[0].getType()); diff --git a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteDescriptionElementOperationTest.java b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteDescriptionElementOperationTest.java index 1dc962c6c..f5dd35aec 100644 --- a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteDescriptionElementOperationTest.java +++ b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteDescriptionElementOperationTest.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -32,7 +32,7 @@ public class DeleteDescriptionElementOperationTest extends AbstractTaxeditorOper private static DescriptionElementBase descriptionElement; private static TaxonDescription description; - + /** * @throws java.lang.Exception */ @@ -40,48 +40,48 @@ public class DeleteDescriptionElementOperationTest extends AbstractTaxeditorOper public static void setUpBeforeClass() throws Exception { taxon = Taxon.NewInstance(null, null); descriptionElement = TextData.NewInstance(); - + description = TaxonDescription.NewInstance(); - + description.addElement(descriptionElement); - + taxon.addDescription(description); - - - operation = new DeleteDescriptionElementOperation("", undoContext, descriptionElement, postOperation); + + + operation = new DeleteDescriptionElementOperation("", undoContext, descriptionElement, postOperation, cdmEntitySessionEnabled); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteDescriptionElementOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testExecuteIProgressMonitorIAdaptable() throws ExecutionException { operation.execute(monitor, info); - + Assert.assertTrue(taxon.getDescriptions().toArray(new TaxonDescription[0])[0].getElements().size() == 0); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteDescriptionElementOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testUndoIProgressMonitorIAdaptable() throws ExecutionException { operation.undo(monitor, info); - + Assert.assertTrue(taxon.getDescriptions().toArray(new TaxonDescription[0])[0].getElements().size() > 0); Assert.assertEquals(descriptionElement, taxon.getDescriptions().toArray(new TaxonDescription[0])[0].getElements().toArray(new DescriptionElementBase[0])[0]); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.view.descriptive.operation.DeleteDescriptionElementOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testRedoIProgressMonitorIAdaptable() throws ExecutionException { operation.redo(monitor, info); - + Assert.assertTrue(taxon.getDescriptions().toArray(new TaxonDescription[0])[0].getElements().size() == 0); } } diff --git a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperationTest.java b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperationTest.java index 38e6e8861..4876aed8b 100644 --- a/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperationTest.java +++ b/eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperationTest.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -26,7 +26,6 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; -import eu.etaxonomy.taxeditor.editor.name.operation.SwapSynonymAndAcceptedOperation; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.store.operations.AbstractTaxeditorOperationTestBase; @@ -38,7 +37,7 @@ import eu.etaxonomy.taxeditor.store.operations.AbstractTaxeditorOperationTestBas public class SwapSynonymAndAcceptedOperationTest extends AbstractTaxeditorOperationTestBase { private static final Logger logger = Logger .getLogger(SwapSynonymAndAcceptedOperationTest.class); - + private static AbstractPostOperation operation; private static Taxon taxon; @@ -65,19 +64,19 @@ public class SwapSynonymAndAcceptedOperationTest extends AbstractTaxeditorOperat private static NonViralName oldTaxonName; - + /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { - + (new DefaultTermInitializer()).initialize(); - + // Create the original accepted taxon oldTaxonName = NonViralName.NewInstance(null); taxon = Taxon.NewInstance(oldTaxonName, null); - + // Create its parent taxon parentTaxon = Taxon.NewInstance(NonViralName.NewInstance(null), null); parentTaxon.addTaxonomicChild(taxon, null, null); @@ -85,14 +84,14 @@ public class SwapSynonymAndAcceptedOperationTest extends AbstractTaxeditorOperat // Give it a child taxon childTaxon = Taxon.NewInstance(NonViralName.NewInstance(null), null); childTaxon.setTaxonomicParent(taxon, null, null); - + // Create a homotypic synonym for the accepted taxon taxon.addHomotypicSynonymName(NonViralName.NewInstance(null), null, null); // homotypicSynonym = Synonym.NewInstance(NonViralName.NewInstance(null), null); // HomotypicalGroup acceptedHomotypicalGroup = HomotypicalGroup.NewInstance(); // acceptedHomotypicalGroup.addTypifiedName(oldTaxon.getName()); // acceptedHomotypicalGroup.addTypifiedName(homotypicSynonym.getName()); - + // Create a heterotypic synonym that will be used to create the new accepted taxon oldSynonymName = NonViralName.NewInstance(null); oldHeterotypicSynonym = Synonym.NewInstance(oldSynonymName, null); @@ -100,51 +99,51 @@ public class SwapSynonymAndAcceptedOperationTest extends AbstractTaxeditorOperat heteroypicalGroup = HomotypicalGroup.NewInstance(); heteroypicalGroup.addTypifiedName(oldHeterotypicSynonym.getName()); taxon.addSynonym(oldHeterotypicSynonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF()); - + // Create a misapplication misapplication = Taxon.NewInstance(NonViralName.NewInstance(null), null); - taxon.addMisappliedName(misapplication, null, null); - + taxon.addMisappliedName(misapplication, null, null); + // Create a concept relation concept = Taxon.NewInstance(NonViralName.NewInstance(null), null); conceptRelationshipType = TaxonRelationshipType.CONGRUENT_TO(); - concept.addTaxonRelation(taxon, conceptRelationshipType, null, null); - + concept.addTaxonRelation(taxon, conceptRelationshipType, null, null); + // Create a description description = TaxonDescription.NewInstance(); taxon.addDescription(description); - + operation = new SwapSynonymAndAcceptedOperation - (null, undoContext, taxon, oldHeterotypicSynonym, postOperation); + (null, undoContext, taxon, oldHeterotypicSynonym, postOperation, cdmEntitySessionEnabled); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testExecute() throws ExecutionException { operation.execute(null, null); - - // New taxon has correct name? + + // New taxon has correct name? Assert.assertEquals(taxon.getName(), oldSynonymName); - + // New taxon has correct parent? Assert.assertEquals(taxon.getTaxonomicParent(), parentTaxon); - + // New taxon has correct child? Assert.assertTrue(taxon.getTaxonomicChildren().contains(childTaxon)); - + // New taxon has 2 synonyms? Assert.assertEquals(taxon.getSynonyms().size(), 2); - + // New taxon has a synonym with the name of the previous accepted taxon? Assert.assertTrue(taxon.getSynonymNames().contains(oldTaxonName)); - + // New taxon has misapplication? Assert.assertTrue(taxon.getMisappliedNames().contains(misapplication)); - + // New taxon has 1 concept relation? int conceptRelCount = 0; for (TaxonRelationship relation : taxon.getTaxonRelations()) { @@ -155,30 +154,30 @@ public class SwapSynonymAndAcceptedOperationTest extends AbstractTaxeditorOperat conceptRelCount++; } Assert.assertEquals(conceptRelCount, 1); - + // New taxon has description? taxon.getDescriptions().contains(description); } /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testUndo() throws ExecutionException { operation.undo(null, null); - + // Assert.assertEquals(oldHomotypicalGroup, synonym.getHomotypicGroup()); } - + /** * Test method for {@link eu.etaxonomy.taxeditor.editor.name.operation.ChangeHomotypicGroupOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)}. - * @throws ExecutionException + * @throws ExecutionException */ @Test public void testRedo() throws ExecutionException { operation.redo(null, null); - + // Assert.assertEquals(newHomotypicalGroup, synonym.getHomotypicGroup()); } diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/.gitignore b/eu.etaxonomy.taxeditor.feature.jre.linux64/.gitignore new file mode 100644 index 000000000..b83d22266 --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/.project b/eu.etaxonomy.taxeditor.feature.jre.linux64/.project new file mode 100644 index 000000000..a4450e6df --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/.project @@ -0,0 +1,24 @@ + + eu.etaxonomy.taxeditor.feature.jre.linux64 + + + eu.etaxonomy.taxeditor.application + eu.etaxonomy.taxeditor.bulkeditor + eu.etaxonomy.taxeditor.cdmlib + eu.etaxonomy.taxeditor.editor + eu.etaxonomy.taxeditor.feature.platform + eu.etaxonomy.taxeditor.navigation + eu.etaxonomy.taxeditor.printpublisher + eu.etaxonomy.taxeditor.store + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/LICENSE.TXT b/eu.etaxonomy.taxeditor.feature.jre.linux64/LICENSE.TXT new file mode 100644 index 000000000..e56def0ac --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/LICENSE.TXT @@ -0,0 +1,4 @@ +The contents of this feature are subject to the Eclipse Public License Version 1.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at +http://www.eclipse.org/legal/epl-v10.html + +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/build.properties b/eu.etaxonomy.taxeditor.feature.jre.linux64/build.properties new file mode 100644 index 000000000..a8b2d4a37 --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/build.properties @@ -0,0 +1,3 @@ +bin.includes = feature.xml,\ + p2.inf,\ + jre/ diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/feature.xml b/eu.etaxonomy.taxeditor.feature.jre.linux64/feature.xml new file mode 100644 index 000000000..12bdae7ca --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/feature.xml @@ -0,0 +1,54 @@ + + + + + [Enter Feature Description here.] + + + + [Enter Copyright Description here.] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/jre/test b/eu.etaxonomy.taxeditor.feature.jre.linux64/jre/test new file mode 100644 index 000000000..e69de29bb diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/p2.inf b/eu.etaxonomy.taxeditor.feature.jre.linux64/p2.inf new file mode 100644 index 000000000..48251bc5d --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/p2.inf @@ -0,0 +1,4 @@ +instructions.configure=\ +org.eclipse.equinox.p2.touchpoint.eclipse.setJvm(jvm:features/eu.etaxonomy.taxeditor.feature.jre.linux64_3.12.0/jre/bin); +instructions.unconfigure=\ +org.eclipse.equinox.p2.touchpoint.eclipse.setJvm(jvm:null); \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.feature.jre.linux64/pom.xml b/eu.etaxonomy.taxeditor.feature.jre.linux64/pom.xml new file mode 100644 index 000000000..637536679 --- /dev/null +++ b/eu.etaxonomy.taxeditor.feature.jre.linux64/pom.xml @@ -0,0 +1,15 @@ + + + + eu.etaxonomy + taxeditor-parent + 3.12.0 + + 4.0.0 + eu.etaxonomy.taxeditor.feature.jre.linux64 + eclipse-feature + + Taxonomic Editor Feature JRE Linux 64 + + http://dev.e-taxonomy.eu/trac/wiki/TaxonomicEditorEditorBundle + diff --git a/eu.etaxonomy.taxeditor.feature.platform/feature.xml b/eu.etaxonomy.taxeditor.feature.platform/feature.xml index 0c3015081..5724992ba 100644 --- a/eu.etaxonomy.taxeditor.feature.platform/feature.xml +++ b/eu.etaxonomy.taxeditor.feature.platform/feature.xml @@ -2,7 +2,7 @@ diff --git a/eu.etaxonomy.taxeditor.feature.platform/pom.xml b/eu.etaxonomy.taxeditor.feature.platform/pom.xml index fe97ed563..683b21a19 100644 --- a/eu.etaxonomy.taxeditor.feature.platform/pom.xml +++ b/eu.etaxonomy.taxeditor.feature.platform/pom.xml @@ -3,7 +3,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 eu.etaxonomy.taxeditor.feature.platform diff --git a/eu.etaxonomy.taxeditor.feature/README.txt b/eu.etaxonomy.taxeditor.feature/README.txt deleted file mode 100644 index a4a2fdf6d..000000000 --- a/eu.etaxonomy.taxeditor.feature/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -when updating the build.properties file make sure to apply the updates on both -build.properties.with.jre and -build.properties.wo.jre diff --git a/eu.etaxonomy.taxeditor.feature/build.properties.with.jre b/eu.etaxonomy.taxeditor.feature/build.properties.with.jre index 421dda37b..8ffba5156 100644 --- a/eu.etaxonomy.taxeditor.feature/build.properties.with.jre +++ b/eu.etaxonomy.taxeditor.feature/build.properties.with.jre @@ -8,4 +8,4 @@ root.win32.win32.x86_64.permissions.755=jre/bin/** root.win32.win32.x86=win-32 root.win32.win32.x86.permissions.755=jre/bin/** root.macosx.cocoa.x86_64=mac-64 -root.macosx.cocoa.x86_64.permissions.755=jre/Contents/Home/jre/bin/** \ No newline at end of file +root.macosx.cocoa.x86_64.permissions.755=jre/Contents/Home/jre/bin/** diff --git a/eu.etaxonomy.taxeditor.feature/feature.xml b/eu.etaxonomy.taxeditor.feature/feature.xml index c563f4d22..83d78e49f 100644 --- a/eu.etaxonomy.taxeditor.feature/feature.xml +++ b/eu.etaxonomy.taxeditor.feature/feature.xml @@ -2,7 +2,7 @@ + + diff --git a/eu.etaxonomy.taxeditor.feature/pom.xml b/eu.etaxonomy.taxeditor.feature/pom.xml index ed987bf80..7cee1b662 100644 --- a/eu.etaxonomy.taxeditor.feature/pom.xml +++ b/eu.etaxonomy.taxeditor.feature/pom.xml @@ -3,7 +3,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 eu.etaxonomy.taxeditor.feature diff --git a/eu.etaxonomy.taxeditor.help/.classpath b/eu.etaxonomy.taxeditor.help/.classpath index 46c533388..bcb633e0f 100644 --- a/eu.etaxonomy.taxeditor.help/.classpath +++ b/eu.etaxonomy.taxeditor.help/.classpath @@ -1,7 +1,7 @@ - - - - - - - + + + + + + + diff --git a/eu.etaxonomy.taxeditor.help/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.help/META-INF/MANIFEST.MF index c84a3d0d0..17e44a92d 100644 --- a/eu.etaxonomy.taxeditor.help/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.help/META-INF/MANIFEST.MF @@ -2,12 +2,12 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Help Bundle-SymbolicName: eu.etaxonomy.taxeditor.help; singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.help.Activator Bundle-Vendor: EDIT Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.help.ui, org.eclipse.help.webapp -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy diff --git a/eu.etaxonomy.taxeditor.help/pom.xml b/eu.etaxonomy.taxeditor.help/pom.xml index 8ba5243c6..00c6ce83e 100644 --- a/eu.etaxonomy.taxeditor.help/pom.xml +++ b/eu.etaxonomy.taxeditor.help/pom.xml @@ -3,7 +3,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.molecular.lib/.classpath b/eu.etaxonomy.taxeditor.molecular.lib/.classpath index 1d66dd2b8..93500de9a 100644 --- a/eu.etaxonomy.taxeditor.molecular.lib/.classpath +++ b/eu.etaxonomy.taxeditor.molecular.lib/.classpath @@ -1,6 +1,6 @@ - + diff --git a/eu.etaxonomy.taxeditor.molecular.lib/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.molecular.lib/META-INF/MANIFEST.MF index d6e68ace0..9f60e840c 100644 --- a/eu.etaxonomy.taxeditor.molecular.lib/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.molecular.lib/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: eu.etaxonomy.taxeditor.molecular.lib Bundle-SymbolicName: eu.etaxonomy.taxeditor.molecular.lib;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-ClassPath: ., lib/bioinfweb-commons-bio-2-SNAPSHOT.jar, lib/bioinfweb-commons-core-2-SNAPSHOT.jar, @@ -162,3 +162,4 @@ Export-Package: info.bioinfweb.commons, Bundle-ActivationPolicy: lazy Import-Package: javax.swing Require-Bundle: org.eclipse.swt +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 diff --git a/eu.etaxonomy.taxeditor.molecular.lib/pom.xml b/eu.etaxonomy.taxeditor.molecular.lib/pom.xml index 14bf1a6f5..c9dedb294 100644 --- a/eu.etaxonomy.taxeditor.molecular.lib/pom.xml +++ b/eu.etaxonomy.taxeditor.molecular.lib/pom.xml @@ -7,7 +7,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 diff --git a/eu.etaxonomy.taxeditor.molecular/.classpath b/eu.etaxonomy.taxeditor.molecular/.classpath index f14ba2c2e..60dea2f68 100644 --- a/eu.etaxonomy.taxeditor.molecular/.classpath +++ b/eu.etaxonomy.taxeditor.molecular/.classpath @@ -1,6 +1,6 @@ - + diff --git a/eu.etaxonomy.taxeditor.molecular/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.molecular/META-INF/MANIFEST.MF index a63002e44..cb2be6881 100644 --- a/eu.etaxonomy.taxeditor.molecular/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.molecular/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Molecular Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.molecular;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.molecular.TaxeditorMolecularPlugin Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, @@ -13,7 +13,7 @@ Require-Bundle: org.eclipse.ui, eu.etaxonomy.taxeditor.editor, eu.etaxonomy.taxeditor.store, eu.etaxonomy.taxeditor.molecular.lib -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy Bundle-Vendor: EDIT Export-Package: eu.etaxonomy.taxeditor.molecular, diff --git a/eu.etaxonomy.taxeditor.molecular/pom.xml b/eu.etaxonomy.taxeditor.molecular/pom.xml index ef5e8ccc3..45b0106e6 100644 --- a/eu.etaxonomy.taxeditor.molecular/pom.xml +++ b/eu.etaxonomy.taxeditor.molecular/pom.xml @@ -3,7 +3,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditor.java b/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditor.java index 35b0a2df6..4934d9a37 100644 --- a/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditor.java +++ b/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditor.java @@ -371,6 +371,7 @@ public class AlignmentEditor extends EditorPart { //re-loading sequence to avoid session conflicts Sequence sequenceNode = CdmStore.getService(ISequenceService.class).load(((AlignmentEditorInput)getEditorInput()).getSequenceNodeUuid()); + ((AlignmentEditorInput)getEditorInput()).setSequenceNode(sequenceNode); StringAdapter stringProvider = new StringAdapter(getEditableConsensusArea().getAlignmentModel(), false); // Throws an exception if a token has more than one character. // Write consensus sequence: @@ -415,6 +416,7 @@ public class AlignmentEditor extends EditorPart { } monitor.worked(1); + ((AlignmentEditorInput)getEditorInput()).merge(); // Commit the conversation and start a new transaction immediately: conversationHolder.commit(true); monitor.worked(1); @@ -490,8 +492,13 @@ public class AlignmentEditor extends EditorPart { if(conversationHolder!=null){ conversationHolder.bind(); } + ((AlignmentEditorInput)getEditorInput()).bind(); } + @Override + public void dispose() { + ((AlignmentEditorInput)getEditorInput()).dispose(); + } public boolean isInsertMode() { return getAlignmentsContainer().getEditSettings().isInsert(); diff --git a/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditorInput.java b/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditorInput.java index b82362551..4bc956e3c 100644 --- a/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditorInput.java +++ b/eu.etaxonomy.taxeditor.molecular/src/main/java/eu/etaxonomy/taxeditor/molecular/editor/AlignmentEditorInput.java @@ -10,12 +10,19 @@ package eu.etaxonomy.taxeditor.molecular.editor; +import java.util.Arrays; +import java.util.List; import java.util.UUID; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; +import eu.etaxonomy.cdm.api.service.molecular.ISequenceService; +import eu.etaxonomy.cdm.model.molecular.Sequence; +import eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput; +import eu.etaxonomy.taxeditor.store.CdmStore; + /** @@ -23,16 +30,17 @@ import org.eclipse.ui.IPersistableElement; * @author Ben Stöver * @date 04.08.2014 */ -public class AlignmentEditorInput implements IEditorInput { +public class AlignmentEditorInput extends CdmEntitySessionInput implements IEditorInput { private static final String name = "AlignmentEditor"; private final UUID sequenceNodeUuid; - + private Sequence sequenceNode; public AlignmentEditorInput(UUID sequenceNodeUuid) { - super(); + super(false); this.sequenceNodeUuid = sequenceNodeUuid; + initSession(); } @@ -135,4 +143,28 @@ public class AlignmentEditorInput implements IEditorInput { } return true; } + + + public void setSequenceNode(Sequence sequenceNode) { + this.sequenceNode = sequenceNode; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return Arrays.asList(sequenceNode); + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#merge() + */ + @Override + public void merge() { + if(CdmStore.getCurrentSessionManager().isRemoting()) { + CdmStore.getService(ISequenceService.class).merge(sequenceNode, true); + } + } } diff --git a/eu.etaxonomy.taxeditor.navigation/.classpath b/eu.etaxonomy.taxeditor.navigation/.classpath index 5676d8def..3a227f058 100644 --- a/eu.etaxonomy.taxeditor.navigation/.classpath +++ b/eu.etaxonomy.taxeditor.navigation/.classpath @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.navigation/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.navigation/META-INF/MANIFEST.MF index 028df087a..e81f78994 100644 --- a/eu.etaxonomy.taxeditor.navigation/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.navigation/META-INF/MANIFEST.MF @@ -2,13 +2,15 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Navigation Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.navigation;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Vendor: EDIT Export-Package: eu.etaxonomy.cdm, eu.etaxonomy.taxeditor.navigation, eu.etaxonomy.taxeditor.navigation.internal, eu.etaxonomy.taxeditor.navigation.key.polytomous, + eu.etaxonomy.taxeditor.navigation.key.polytomous.operation, eu.etaxonomy.taxeditor.navigation.navigator, + eu.etaxonomy.taxeditor.navigation.navigator.operation, eu.etaxonomy.taxeditor.navigation.search Require-Bundle: org.eclipse.ui, org.eclipse.ui.navigator, @@ -25,7 +27,7 @@ Import-Package: org.eclipse.core.resources, org.eclipse.ui.forms.widgets, org.osgi.framework Bundle-Activator: eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: ., activation-1.1.jar, antlr-2.7.6.jar, diff --git a/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages.properties b/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages.properties index acd510f07..2fb82b9b4 100644 --- a/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages.properties +++ b/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages.properties @@ -1,7 +1,7 @@ SearchBar_0=Use "*" for wildcard searching SearchBar_1=Search SearchBar_2=Could not execute search -SearchBar_3=Please type at least one character when using the "*" wildcard. +SearchBar_3=Please type at least one character SearchBar_4=Error opening search result. SearchBar_6=Taxa SearchBar_7=Synonyms diff --git a/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages_de.properties b/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages_de.properties index 3ab85da0c..0546737ff 100644 --- a/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages_de.properties +++ b/eu.etaxonomy.taxeditor.navigation/OSGI-INF/l10n/messages_de.properties @@ -1,7 +1,7 @@ SearchBar_0=Benutze "*" f\u00FCr Platzhalter-Suche SearchBar_1=Suche SearchBar_2=Suche konnte nicht ausgef\u00FChrt werden -SearchBar_3=Bitte geben Sie mindestens ein Zeichen ein, wenn Sie den "*" Platzhalter benutzen wollen +SearchBar_3=Bitte geben Sie mindestens einen Buchstaben ein SearchBar_4=Fehler beim f\u00fcffnen des Suchergebnisses SearchBar_6=Taxa SearchBar_7=Synonyme diff --git a/eu.etaxonomy.taxeditor.navigation/plugin.xml b/eu.etaxonomy.taxeditor.navigation/plugin.xml index 9d828fb45..9767c38e9 100644 --- a/eu.etaxonomy.taxeditor.navigation/plugin.xml +++ b/eu.etaxonomy.taxeditor.navigation/plugin.xml @@ -47,6 +47,12 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -731,7 +824,7 @@ class="eu.etaxonomy.taxeditor.preference.CdmStorePropertyTester" id="eu.etaxonomy.taxeditor.preference.CdmStorePropertyTester" namespace="eu.etaxonomy.taxeditor.preference.CdmStorePropertyTester" - properties="isCdmStoreConnected" + properties="isCdmStoreConnected,isRemoting,isStandAlone" type="java.lang.Object"> @@ -797,6 +890,18 @@ + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.navigation/pom.xml b/eu.etaxonomy.taxeditor.navigation/pom.xml index a305b3efd..b03b072c1 100644 --- a/eu.etaxonomy.taxeditor.navigation/pom.xml +++ b/eu.etaxonomy.taxeditor.navigation/pom.xml @@ -3,7 +3,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java index 7e48f97fc..a266c8d92 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/NavigationUtil.java @@ -43,6 +43,7 @@ import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin; import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator; +import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin; /** *

NavigationUtil class.

@@ -98,7 +99,12 @@ public class NavigationUtil extends AbstractUtility{ } catch (PartInitException e) { MessagingUtils.error(NavigationUtil.class, "Error opening the editor", e); } catch (Exception e) { - MessagingUtils.warningDialog("Could not create Taxon", NavigationUtil.class, e.getMessage()); + MessagingUtils.errorDialog("Could not create Taxon", + NavigationUtil.class, + e.getMessage(), TaxeditorStorePlugin.PLUGIN_ID, + e, + true); + } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewLabels.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewLabels.java new file mode 100644 index 000000000..6961c3ab8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewLabels.java @@ -0,0 +1,25 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous; + +/** + * @author cmathew + * @date 25 Jun 2015 + * + */ +public interface PolytomousKeyViewLabels { + + public static final String DELETE_POLYTOMOUS_KEY_LABEL = "Delete Polytomous Key"; + public static final String UPDATE_ALL_POLYTOMOUS_KEY_NODES_LABEL = "Update All Polytomous Key Nodes"; + + public static final String ERROR_OPENING_KEY_EDITOR_MESSAGE = "Error opening Polytomous Key Editor"; + + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java index 09861da31..e6757a31b 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java @@ -4,6 +4,7 @@ package eu.etaxonomy.taxeditor.navigation.key.polytomous; import java.util.List; +import java.util.Map; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.common.NotDefinedException; @@ -33,6 +34,10 @@ import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.application.ICdmChangeListener; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; @@ -44,6 +49,8 @@ import eu.etaxonomy.taxeditor.model.DataChangeBridge; import eu.etaxonomy.taxeditor.model.IContextListener; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; @@ -52,7 +59,8 @@ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory; * */ public class PolytomousKeyViewPart extends ViewPart implements - IConversationEnabled, IPostOperationEnabled { + IConversationEnabled, ICdmEntitySessionEnabled, IPostOperationEnabled, + ICdmChangeListener { private class FilterModifyListener implements ModifyListener{ @Override @@ -111,6 +119,7 @@ public class PolytomousKeyViewPart extends ViewPart implements private IContextListener contextListener; private final CdmFormFactory formFactory; private Text text_filter; + private ICdmEntitySession cdmEntitySession; private PolytomousKeyViewPartDataChangeBehavior dataChangeBehavior; @@ -195,6 +204,9 @@ public class PolytomousKeyViewPart extends ViewPart implements private void setInput() { conversation = CdmStore.createConversation(); conversation.registerForDataStoreChanges(this); + cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); + CdmApplicationState.getCurrentDataChangeService().register(this); + List input = CdmStore.getService(IPolytomousKeyService.class).list(PolytomousKey.class, null, null, null, null); if(!viewer.getControl().isDisposed()){ viewer.setInput(input); @@ -206,6 +218,9 @@ public class PolytomousKeyViewPart extends ViewPart implements */ @Override public void setFocus() { + if(cdmEntitySession != null) { + cdmEntitySession.bind(); + } viewer.getControl().setFocus(); } @@ -239,6 +254,10 @@ public class PolytomousKeyViewPart extends ViewPart implements conversation.close(); CdmStore.getContextManager().removeContextListener(contextListener); } + if(cdmEntitySession != null) { + cdmEntitySession.dispose(); + } + CdmApplicationState.getCurrentDataChangeService().unregister(this); super.dispose(); } @@ -278,4 +297,40 @@ public class PolytomousKeyViewPart extends ViewPart implements return (List)viewer.getInput(); } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() + */ + @Override + public ICdmEntitySession getCdmEntitySession() { + return cdmEntitySession; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return getKeys(); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent) + */ + @Override + public void onChange(CdmChangeEvent event) { + if(event.getAction() == Action.Delete && PolytomousKey.class.equals(event.getEntityType())) { + refresh(); + } + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + // TODO Auto-generated method stub + return null; + } + } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java index 449a661f0..07e8caca4 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java @@ -17,14 +17,9 @@ import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.model.description.PolytomousKey; -import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.key.polytomous.PolytomousKeyViewPart; @@ -38,33 +33,32 @@ import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; */ public class DeleteHandler extends AbstractHandler { - protected IWorkbenchPage activePage; /* (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); - activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); + List keys = selection.toList(); if(keys.isEmpty()){ return null; } - for (PolytomousKey key : keys){ - closeObsoleteEditor(key); - } - boolean confirmation = MessagingUtils.confirmDialog("Confirm deletion", "Do you want to delete the selected key" + (keys.size() == 1 ? "" : "s") + "?"); + + boolean confirmation = MessagingUtils.confirmDialog("Confirm deletaion", "Do you want to delete the selected key" + (keys.size() == 1 ? "" : "s") + "?"); if(confirmation){ for(PolytomousKey key : keys){ try { + PolytomousKeyViewPart pkvp = (PolytomousKeyViewPart) NavigationUtil.getView(PolytomousKeyViewPart.ID, false); AbstractPostOperation operation = new DeleteOperation( event.getCommand().getName(), NavigationUtil.getUndoContext(), key, - (PolytomousKeyViewPart) NavigationUtil.getView(PolytomousKeyViewPart.ID, false), - (PolytomousKeyViewPart) NavigationUtil.getView(PolytomousKeyViewPart.ID, false)); + pkvp, + pkvp, + pkvp); NavigationUtil.executeOperation(operation); } catch (NotDefinedException e) { MessagingUtils.error(getClass(), e); @@ -75,26 +69,4 @@ public class DeleteHandler extends AbstractHandler { return null; } - - protected boolean closeObsoleteEditor(PolytomousKey key){ - boolean result = true; - for (IEditorReference ref : activePage.getEditorReferences()) { - try { - - IEditorInput input = ref.getEditorInput(); - if (input instanceof PolytomousKeyEditorInput) { - PolytomousKey pKey = ((PolytomousKeyEditorInput)input).getKey(); - //if node is a child of taxonNode then close the editor - if(key.equals(pKey)){ - //if (taxonNode.equals(node)) { - result &= activePage.closeEditor(ref.getEditor(false), true); - - } - } - } catch (PartInitException e) { - continue; - } - } - return result; - } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingDeletePolytomousKeyHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingDeletePolytomousKeyHandler.java new file mode 100644 index 000000000..691cccb16 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingDeletePolytomousKeyHandler.java @@ -0,0 +1,83 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous.handler; + +import java.util.List; +import java.util.UUID; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.PolytomousKeyViewLabels; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.operation.RemotingDeletePolytomousKeyOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; +import eu.etaxonomy.taxeditor.util.OperationsUtil; + +/** + * @author cmathew + * @date 25 Jun 2015 + * + */ +public class RemotingDeletePolytomousKeyHandler extends RemotingCdmHandler { + + List keysToDelete; + /** + * @param label + */ + public RemotingDeletePolytomousKeyHandler() { + super(PolytomousKeyViewLabels.DELETE_POLYTOMOUS_KEY_LABEL); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); + + keysToDelete = OperationsUtil.convertToUuidList(selection.toList()); + + if(keysToDelete.isEmpty()){ + return Status.CANCEL_STATUS; + } + + boolean confirmation = MessagingUtils.confirmDialog("Confirm deletaion", "Do you want to delete the selected key" + (keysToDelete.size() == 1 ? "" : "s") + "?"); + + if(!confirmation) { + return Status.CANCEL_STATUS; + } + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingDeletePolytomousKeyOperation(event.getTrigger(), + false, + keysToDelete); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingEditPolytomousKeyNodesHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingEditPolytomousKeyNodesHandler.java new file mode 100644 index 000000000..56949fc26 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingEditPolytomousKeyNodesHandler.java @@ -0,0 +1,90 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous.handler; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +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.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.swt.widgets.Display; + +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.navigation.NavigationUtil; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.PolytomousKeyViewLabels; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.PolytomousKeyViewPart; + +/** + * @author cmathew + * @date 29 Jun 2015 + * + */ +public class RemotingEditPolytomousKeyNodesHandler extends AbstractHandler { + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public Object execute(final ExecutionEvent event) throws ExecutionException { + PolytomousKeyViewPart view = (PolytomousKeyViewPart) NavigationUtil.getView(PolytomousKeyViewPart.ID, false); + + ISelection selection = view.getSite().getSelectionProvider().getSelection(); + if(selection instanceof StructuredSelection){ + + final StructuredSelection structuredSelection = (StructuredSelection) selection; + + Job job = new Job("Opening Polytomous Keys"){ + + @Override + protected IStatus run(IProgressMonitor monitor) { + monitor.beginTask("Opening Polytomous Keys", structuredSelection.size()); + + for(final Object selectedObject : structuredSelection.toArray()){ + if(selectedObject instanceof PolytomousKey){ + + Display.getDefault().asyncExec(new Runnable(){ + + @Override + public void run() { + try { + PolytomousKey key = (PolytomousKey) selectedObject; + EditorUtil.openPolytomousKey(key.getUuid()); + } catch(Exception ex) { + MessagingUtils.warningDialog(PolytomousKeyViewLabels.ERROR_OPENING_KEY_EDITOR_MESSAGE, + event.getTrigger(), + ex.getLocalizedMessage()); + ex.printStackTrace(); + } + } + + }); + monitor.worked(1); + } + } + monitor.done(); + return Status.OK_STATUS; + } + + }; + + job.setPriority(Job.SHORT); + job.schedule(); + + } + return null; + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingUpdatePolytomousKeyAllNodesHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingUpdatePolytomousKeyAllNodesHandler.java new file mode 100644 index 000000000..6c5ec4115 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/RemotingUpdatePolytomousKeyAllNodesHandler.java @@ -0,0 +1,60 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous.handler; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; + +import eu.etaxonomy.taxeditor.navigation.key.polytomous.PolytomousKeyViewLabels; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.operation.RemotingUpdatePolytomousKeyAllNodesOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; + +/** + * @author cmathew + * @date 29 Jun 2015 + * + */ +public class RemotingUpdatePolytomousKeyAllNodesHandler extends RemotingCdmHandler { + + /** + * @param label + */ + public RemotingUpdatePolytomousKeyAllNodesHandler() { + super(PolytomousKeyViewLabels.UPDATE_ALL_POLYTOMOUS_KEY_NODES_LABEL); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingUpdatePolytomousKeyAllNodesOperation(event.getTrigger(), false); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java index 868116c20..01bf873c5 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java @@ -23,6 +23,7 @@ import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; import eu.etaxonomy.cdm.model.description.PolytomousKey; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -33,6 +34,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore; public class DeleteOperation extends AbstractPersistentPostOperation { private final PolytomousKey key; + private final ICdmEntitySessionEnabled cdmEntitySessionEnabled; + /** * @param label @@ -41,9 +44,12 @@ public class DeleteOperation extends AbstractPersistentPostOperation { */ public DeleteOperation(String label, IUndoContext undoContext, PolytomousKey key, - IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.key = key; + this.cdmEntitySessionEnabled = cdmEntitySessionEnabled; } @Override @@ -52,6 +58,7 @@ public class DeleteOperation extends AbstractPersistentPostOperation { bind(); DeleteResult result = CdmStore.getService(IPolytomousKeyService.class).delete(key); + if (result.isError() && !result.getExceptions().isEmpty()){ MessageDialog.openError(null, "Delete failed", result.getExceptions().iterator().next().getMessage()); diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingDeletePolytomousKeyOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingDeletePolytomousKeyOperation.java new file mode 100644 index 000000000..6551fe3b2 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingDeletePolytomousKeyOperation.java @@ -0,0 +1,57 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous.operation; + +import java.util.List; +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * @author cmathew + * @date 25 Jun 2015 + * + */ +public class RemotingDeletePolytomousKeyOperation extends RemotingCdmUpdateOperation { + + private final static String LABEL = "Delete Polytomous Key operation"; + + private final List keysToDelete; + /** + * @param label + * @param action + * @param source + * @param async + */ + public RemotingDeletePolytomousKeyOperation(Object source, + boolean async, + List keysToDelete) { + super(LABEL, Action.Delete, source, async); + this.keysToDelete = keysToDelete; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + entityType = PolytomousKey.class; + return CdmStore.getService(IPolytomousKeyService.class).delete(keysToDelete); + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingUpdatePolytomousKeyAllNodesOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingUpdatePolytomousKeyAllNodesOperation.java new file mode 100644 index 000000000..f002c93a5 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/RemotingUpdatePolytomousKeyAllNodesOperation.java @@ -0,0 +1,66 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.key.polytomous.operation; + +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * @author cmathew + * @date 29 Jun 2015 + * + */ +public class RemotingUpdatePolytomousKeyAllNodesOperation extends RemotingCdmUpdateOperation { + + private final UUID polytomousKeyUuid; + /** + * @param label + * @param action + * @param source + * @param async + */ + public RemotingUpdatePolytomousKeyAllNodesOperation(Object source, + boolean async, + UUID polytomousKeyUuid) { + super(LABEL, Action.Update, source, async); + this.polytomousKeyUuid = polytomousKeyUuid; + + } + + public RemotingUpdatePolytomousKeyAllNodesOperation(Object source, + boolean async) { + super(LABEL, Action.Update, source, async); + // this implies that we have to update all nodes of all keys + this.polytomousKeyUuid = null; + } + + private final static String LABEL = "Update All Polytomous Key Nodes operation"; + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + if(polytomousKeyUuid == null) { + return CdmStore.getService(IPolytomousKeyService.class).updateAllNodeNumberings(); + } else { + return CdmStore.getService(IPolytomousKeyService.class).updateAllNodeNumberings(polytomousKeyUuid); + } + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java index ef4e0317c..55b29173d 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -38,8 +38,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore; */ public class Root extends PlatformObject implements IAdaptable, IPersistableElement, IElementFactory, IConversationEnabled { - private ConversationHolder conversation; - + private final ConversationHolder conversation; + /** *

Constructor for Root.

* @@ -48,26 +48,28 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem public Root (ConversationHolder conversation){ this.conversation = conversation; } - + /** *

getParentBeans

* * @return a {@link java.util.List} object. */ public List getParentBeans() { - List propertyPaths = Arrays.asList(new String[]{"name"}); - + List propertyPaths = Arrays.asList(new String[]{ + "name", + "rootNode.childNodes"}); + List classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths); - + if(classifications.size() == 0){ Classification classification = Classification.NewInstance("My Classification"); - AbstractPostOperation operation = new CreateClassification("Creating initial classification", NavigationUtil.getUndoContext(), classification, NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false)); + AbstractPostOperation operation = new CreateClassification("Creating initial classification", NavigationUtil.getUndoContext(), classification, NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false), NavigationUtil.getNavigator(false)); NavigationUtil.executeOperation(operation); - + classifications = CdmStore.getService(IClassificationService.class).list(null, null, null, null, propertyPaths); } - - return classifications; + + return classifications; } /* (non-Javadoc) @@ -78,7 +80,8 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem * * @return a {@link java.lang.String} object. */ - public String getFactoryId() { + @Override + public String getFactoryId() { return null; } @@ -86,14 +89,16 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem * @see org.eclipse.ui.IPersistable#saveState(org.eclipse.ui.IMemento) */ /** {@inheritDoc} */ - public void saveState(IMemento memento) { + @Override + public void saveState(IMemento memento) { } /* (non-Javadoc) * @see org.eclipse.ui.IElementFactory#createElement(org.eclipse.ui.IMemento) */ /** {@inheritDoc} */ - public IAdaptable createElement(IMemento memento) { + @Override + public IAdaptable createElement(IMemento memento) { return null; } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonLinkHelper.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonLinkHelper.java index 1d30e554f..bacbf1f98 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonLinkHelper.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonLinkHelper.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -13,7 +13,6 @@ package eu.etaxonomy.taxeditor.navigation.navigator; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.navigator.ILinkHelper; @@ -33,28 +32,29 @@ public class TaxonLinkHelper implements ILinkHelper { /** Constant ID="eu.etaxonomy.taxeditor.navigation.taxon"{trunked} */ public static final String ID = "eu.etaxonomy.taxeditor.navigation.taxonlinkhelper"; //$NON-NLS-1$ - + /* (non-Javadoc) * @see org.eclipse.ui.navigator.ILinkHelper#activateEditor(org.eclipse.ui.IWorkbenchPage, org.eclipse.jface.viewers.IStructuredSelection) */ /** {@inheritDoc} */ - public void activateEditor(IWorkbenchPage page, + @Override + public void activateEditor(IWorkbenchPage page, IStructuredSelection selection) { try { if (selection == null || selection.isEmpty()) { return; } - if (selection.getFirstElement() instanceof TaxonNode) { - TaxonNode taxonNode = (TaxonNode) selection.getFirstElement(); - TaxonEditorInput taxonEditorInput; - - taxonEditorInput = TaxonEditorInput.NewInstance(taxonNode.getUuid()); - - IEditorPart editor = null; - if ((editor = page.findEditor(taxonEditorInput)) != null) { - page.bringToTop(editor); - } - } +// if (selection.getFirstElement() instanceof TaxonNode) { +// TaxonNode taxonNode = (TaxonNode) selection.getFirstElement(); +// TaxonEditorInput taxonEditorInput; +// +// taxonEditorInput = TaxonEditorInput.NewInstance(taxonNode.getUuid()); +// +// IEditorPart editor = null; +// if ((editor = page.findEditor(taxonEditorInput)) != null) { +// page.bringToTop(editor); +// } +// } } catch (Exception e) { MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage()); } @@ -64,7 +64,8 @@ public class TaxonLinkHelper implements ILinkHelper { * @see org.eclipse.ui.navigator.ILinkHelper#findSelection(org.eclipse.ui.IEditorInput) */ /** {@inheritDoc} */ - public IStructuredSelection findSelection(IEditorInput editorInput) { + @Override + public IStructuredSelection findSelection(IEditorInput editorInput) { if (editorInput instanceof TaxonEditorInput) { TaxonNode taxonNode = ((TaxonEditorInput) editorInput).getTaxonNode(); if (taxonNode != null) { diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java index 273d9ad36..c2d28d358 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java @@ -11,9 +11,12 @@ package eu.etaxonomy.taxeditor.navigation.navigator; import java.util.ArrayList; +import java.util.Arrays; import java.util.Comparator; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Observable; import java.util.Observer; import java.util.Set; @@ -28,10 +31,15 @@ import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.navigator.CommonNavigator; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.application.ICdmChangeListener; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; import eu.etaxonomy.cdm.api.service.IClassificationService; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.model.taxon.TaxonNodeByRankAndNameComparator; @@ -42,6 +50,8 @@ import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; import eu.etaxonomy.taxeditor.store.LoginManager; @@ -54,7 +64,8 @@ import eu.etaxonomy.taxeditor.store.LoginManager; * @version 1.0 */ public class TaxonNavigator extends CommonNavigator implements - IPostOperationEnabled, IConversationEnabled, Observer { + IPostOperationEnabled, IConversationEnabled, Observer, + ICdmEntitySessionEnabled, ICdmChangeListener { /** * Constant @@ -68,10 +79,14 @@ public class TaxonNavigator extends CommonNavigator implements private ConversationHolder conversation; + private ICdmEntitySession cdmEntitySession; + private String partNameCache; private IDataChangeBehavior dataChangeBehavior; + private Root root; + /* * (non-Javadoc) * @@ -111,8 +126,8 @@ public class TaxonNavigator extends CommonNavigator implements // we do not preserve state. Closing the view, in contrary to // closing the whole application // should be handled by the state manager too - - return new Root(conversation); + root = new Root(conversation); + return root; } return new EmptyRoot(); } @@ -130,10 +145,15 @@ public class TaxonNavigator extends CommonNavigator implements *

*/ public void init() { + if (CdmStore.isActive() && conversation == null) { conversation = CdmStore.createConversation(); conversation.registerForDataStoreChanges(TaxonNavigator.this); } + if (CdmStore.isActive()) { + cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true); + CdmApplicationState.getCurrentDataChangeService().register(this); + } CdmStore.getLoginManager().addObserver(this); } @@ -151,6 +171,15 @@ public class TaxonNavigator extends CommonNavigator implements getCommonViewer().refresh(); } + /** + * Refresh this navigators viewer + */ + public void refresh(Set objects) { + for(Object obj : objects) { + getCommonViewer().refresh(obj); + } + } + /** * Removes all content */ @@ -169,8 +198,9 @@ public class TaxonNavigator extends CommonNavigator implements * a {@link org.eclipse.core.runtime.IProgressMonitor} object. */ public void restore(IMemento memento, IProgressMonitor monitor) { + root = new Root(conversation); if (memento == null) { - getCommonViewer().setInput(new Root(conversation)); + getCommonViewer().setInput(root); return; } int mementoWork = 0; @@ -198,7 +228,7 @@ public class TaxonNavigator extends CommonNavigator implements subProgressMonitor.worked(1); conversation.registerForDataStoreChanges(TaxonNavigator.this); subProgressMonitor.worked(1); - getCommonViewer().setInput(new Root(conversation)); + getCommonViewer().setInput(root); subProgressMonitor.worked(1); getCommonViewer().refresh(); subProgressMonitor.worked(1); @@ -359,6 +389,12 @@ public class TaxonNavigator extends CommonNavigator implements if (conversation != null) { conversation.unregisterForDataStoreChanges(this); } + if(cdmEntitySession != null) { + cdmEntitySession.dispose(); + } + if(CdmApplicationState.getCurrentDataChangeService() != null) { + CdmApplicationState.getCurrentDataChangeService().unregister(this); + } } /* @@ -374,6 +410,9 @@ public class TaxonNavigator extends CommonNavigator implements if (getConversationHolder() != null) { getConversationHolder().bind(); } + if(cdmEntitySession != null) { + cdmEntitySession.bind(); + } } /* @@ -461,4 +500,60 @@ public class TaxonNavigator extends CommonNavigator implements } } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() + */ + @Override + public ICdmEntitySession getCdmEntitySession() { + return cdmEntitySession; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + if(root != null) { + return root.getParentBeans(); + } + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent) + */ + @Override + public void onChange(CdmChangeEvent event) { + if(event.getAction() == Action.Delete && Classification.class.equals(event.getEntityType())) { + refresh(); + return; + } + for(CdmBase cb : event.getChangedObjects()) { + if(cb instanceof TaxonNode) { + TaxonNode tn = (TaxonNode)cb; + if(tn.getTaxon() == null) { + getCommonViewer().refresh(tn.getClassification()); + } else { + getCommonViewer().refresh(cb); + } + } else if (cb instanceof Classification) { + getCommonViewer().refresh(); + } + } + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + Map> propertyPathsMap = new HashMap>(); + List taxonNodePropertyPaths = Arrays.asList(new String[] { + "taxon.name" + }); + propertyPathsMap.put("childNodes", taxonNodePropertyPaths); + return propertyPathsMap; + } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java index 0bb6c999c..b1a636182 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java @@ -1,8 +1,8 @@ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -19,6 +19,7 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; +import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; import eu.etaxonomy.cdm.model.name.TaxonNameBase; import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; @@ -26,7 +27,6 @@ import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; -import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; import eu.etaxonomy.taxeditor.model.AbstractDataChangeBehaviour; import eu.etaxonomy.taxeditor.model.IDataChangeBehavior; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; @@ -38,13 +38,13 @@ import eu.etaxonomy.taxeditor.navigation.NavigationUtil; * @created 01.04.2009 * @version 1.0 */ -public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements +public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviour implements IDataChangeBehavior { - private TaxonNavigator source; + private final TaxonNavigator source; private Set staleObjects; - + /** *

Constructor for TaxonNavigatorDataChangeBehavior.

* @@ -53,7 +53,7 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou public TaxonNavigatorDataChangeBehavior(TaxonNavigator taxonNavigator) { source = taxonNavigator; } - + /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.store.model.IDataChangeBehavior#isRelevant(java.lang.Object, eu.etaxonomy.cdm.persistence.hibernate.CdmCrudEvent) */ @@ -64,22 +64,29 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou * @return a boolean. */ public boolean isRelevant(CdmDataChangeMap events) { - + // TODO react only on insert/update/delete of taxon and synonym objects // and on update of name objects boolean relevant = false; staleObjects = new HashSet(); - + for(CdmDataChangeEvent event : events.getAllEvents()){ EventType eventType = event.getEventType(); CdmBase eventEntity = event.getEntity(); - + + Set affectedObjects = event.getAffectedObjects(); + if(affectedObjects != null) { + for(CdmBase cb : affectedObjects) { + staleObjects.add((CdmBase)HibernateProxyHelper.deproxy(cb)); + } + } + // all tree node changes are relevant - if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE) + if((eventType == EventType.INSERT || eventType == EventType.DELETE || eventType == EventType.UPDATE) && event.getEntity() instanceof ITaxonTreeNode){ return true; } - + // name updates of the accepted taxon of open editors are relevant if(eventType == EventType.UPDATE && event.getEntity() instanceof TaxonNameBase){ TaxonNameBase name = null; @@ -90,10 +97,10 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou }else{ continue; } - + Set openEditors = NavigationUtil.getOpenEditors(); /*for(IEditorPart editor : openEditors){ - + if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){ return true; } @@ -102,7 +109,9 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou if (eventType == EventType.DELETE){ return true; } - + + + if(eventType == EventType.UPDATE && event.getEntity() instanceof Taxon){ TaxonNameBase name = null; if(eventEntity instanceof Taxon){ @@ -110,16 +119,16 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou }else{ continue; } - - Set openEditors = NavigationUtil.getOpenEditors(); + + // Set openEditors = NavigationUtil.getOpenEditors(); /*for(IEditorPart editor : openEditors){ - + if(name.equals(((TaxonEditorInput) editor.getEditorInput()).getTaxon().getName())){ return true; } }*/ } - + // if(eventType == EventType.UPDATE){ // relevant = true; // CdmBase entity = event.getEntity(); @@ -130,9 +139,9 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou // } // } } - + return false; - + // @deprecated // react on everything except load // if(events.sizeByEventType(EventType.INSERT) > 0){ @@ -156,12 +165,12 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou final Display display = Display.getCurrent(); Job job = new Job("Updating Taxon Navigator") { - + @Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask("Updating Taxon Navigator", 3); monitor.worked(1); - + // clear the session completely monitor.subTask("Clearing Taxon Navigators session"); display.asyncExec(new Runnable() { @@ -169,8 +178,8 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou public void run() { source.getConversationHolder().clear(); } - }); - // FIXME completely clearing the session is a brute force approach. + }); + // FIXME completely clearing the session is a brute force approach. // It would be much more elegant to clear only those elements that have been changed. // I could not get that to work but we should consider workin on this because we might // run into serious performance issues, especially when it comes to large trees @@ -178,27 +187,31 @@ public class TaxonNavigatorDataChangeBehavior extends AbstractDataChangeBehaviou // at least, we moved this to a job so it can run in a background thred // seems to improve the situation but not sure if final solution monitor.worked(1); - + monitor.subTask("Refreshing viewer"); - + display.asyncExec(new Runnable() { @Override public void run() { - source.refresh(); + if(staleObjects != null && staleObjects.size() > 0) { + source.refresh(staleObjects); + } else { + source.refresh(); + } } }); - - - + + + monitor.worked(1); monitor.done(); return Status.OK_STATUS; } }; - + job.setPriority(Job.SHORT); job.schedule(); - + } } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorLabels.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorLabels.java new file mode 100644 index 000000000..2b579e420 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorLabels.java @@ -0,0 +1,36 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator; + +/** + * @author cmathew + * @date 19 Jun 2015 + * + */ +public interface TaxonNavigatorLabels { + + public static final String CHANGE_ACCEPTED_TAXON_TO_SYNONYM_LABEL = "Change Accepted Taxon to Synonym"; + public static final String MOVE_TAXON_LABEL = "Move Taxon"; + public static final String MOVE_FACTUAL_DATA_LABEL = "Move Factual Data"; + public static final String DELETE_TAXON_NODE_LABEL = "Delete Taxon Node"; + + public static final String NO_TAXON_SELECTION_MESSAGE = "No taxon tree node selected for operation."; + public static final String SINGLE_TAXON_SELECTION_MESSAGE = "The chosen operation is available only for a single taxon."; + public static final String SOURCE_TAXON_HAS_CHILDREN_MESSAGE = "The chosen taxon must not have any childen. You need to move all childen to " + + "another taxon node in the TaxonNavigator before attempting to turn the accepted " + + "taxon into a synonym."; + public static final String RELATED_EDITOR_NOT_CLOSED_MESSAGE = "Could not close related taxon name editor. " + + "Please close it manually and try again."; + public static final String SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE = "Selected object is not a taxon tree node"; + public static final String UNSAVED_CHANGES_MESSAGE = "There are unsaved changes in the source taxon. Please save first."; + + + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapter.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapter.java index e0f8a0566..bdf2eb91c 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapter.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapter.java @@ -238,7 +238,7 @@ public class TreeNodeDropAdapter extends ViewerDropAdapter implements IPostOpera TaxonNode targetNode = (TaxonNode) targetITaxonTreeNode; AbstractPostOperation operation = new MoveTaxonOperation - ("Move Taxon", workspaceUndoContext, uuids, targetNode.getParent(), this, taxonNavigator, false); + ("Move Taxon", workspaceUndoContext, uuids, targetNode, this, taxonNavigator, false); NavigationUtil.executeOperation(operation); logger.info("Moved taxa to new parent " + targetITaxonTreeNode); diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java index 289d9d1b9..6b698ffcf 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java @@ -17,6 +17,7 @@ import java.util.Set; import java.util.UUID; import org.apache.log4j.Logger; +import org.eclipse.core.commands.operations.AbstractOperation; import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -37,6 +38,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; @@ -195,9 +197,14 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp return Status.CANCEL_STATUS; } - AbstractPostOperation operation = new MoveTaxonOperation - ("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true); - NavigationUtil.executeOperation(operation); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, (TaxonNode)targetITaxonTreeNode, true); + NavigationUtil.executeOperation(operation, null); + } else { + AbstractPostOperation operation = new MoveTaxonOperation + ("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true); + NavigationUtil.executeOperation(operation); + } logger.info("Moved taxa to new parent " + targetITaxonTreeNode); return Status.OK_STATUS; @@ -213,9 +220,14 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp return Status.CANCEL_STATUS; } - AbstractPostOperation operation = new MoveTaxonOperation - ("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true); - NavigationUtil.executeOperation(operation); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, (TaxonNode)targetITaxonTreeNode, true); + NavigationUtil.executeOperation(operation, null); + } else { + AbstractPostOperation operation = new MoveTaxonOperation + ("Move Taxon", workspaceUndoContext, uuids, targetITaxonTreeNode, this, taxonNavigator, true); + NavigationUtil.executeOperation(operation); + } logger.info("Moved taxa to new parent " + targetITaxonTreeNode); return Status.OK_STATUS; @@ -226,10 +238,15 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp return Status.CANCEL_STATUS; } TaxonNode targetNode = (TaxonNode) targetITaxonTreeNode; - AbstractPostOperation operation = new MoveTaxonOperation - ("Move Taxon", workspaceUndoContext, uuids, targetNode.getParent(), this, taxonNavigator, false); - NavigationUtil.executeOperation(operation); + if(CdmStore.getCurrentSessionManager().isRemoting()) { + AbstractOperation operation = new RemotingMoveTaxonOperation(taxonNavigator, false, uuids, targetNode.getParent(), true); + NavigationUtil.executeOperation(operation, null); + } else { + AbstractPostOperation operation = new MoveTaxonOperation + ("Move Taxon", workspaceUndoContext, uuids, targetNode, this, taxonNavigator, false); + NavigationUtil.executeOperation(operation); + } logger.info("Moved taxa to new parent " + targetITaxonTreeNode); return Status.OK_STATUS; } else{ diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/ChangeAcceptedTaxonToSynonymHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/ChangeAcceptedTaxonToSynonymHandler.java index 3763adc75..a60bd2e32 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/ChangeAcceptedTaxonToSynonymHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/ChangeAcceptedTaxonToSynonymHandler.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.navigation.navigator.handler; @@ -11,33 +11,25 @@ import java.util.Set; import java.util.UUID; 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.core.commands.IHandler; import org.eclipse.core.commands.common.NotDefinedException; -import org.eclipse.core.commands.operations.IUndoContext; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; -import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; -import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.EditorUtil; import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; -import eu.etaxonomy.taxeditor.editor.Page; -import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.navigator.operation.ChangeAcceptedTaxonToSynonymOperation; -import eu.etaxonomy.taxeditor.navigation.navigator.operation.DeleteOperation; import eu.etaxonomy.taxeditor.operation.AbstractPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; @@ -57,14 +49,15 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler private UUID newAcceptedTaxonNodeUuid; private TaxonNameEditor editor; - + /* (non-Javadoc) * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ /** {@inheritDoc} */ - public Object execute(ExecutionEvent event) throws ExecutionException { - - + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + + activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); taxonNavigator = NavigationUtil.showNavigator(); @@ -73,8 +66,8 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler String plural = selection.size() > 1 ? "s" : ""; // Prompt user for confirmation - - + + Iterator selectionIterator = selection.iterator(); Set treeNodes = new HashSet(); @@ -94,50 +87,55 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler AbstractPostOperation operation = null; if (treeNodes.size() == 1 ){ try { - + ITaxonTreeNode treeNode = treeNodes.iterator().next(); ITaxonTreeNode oldAcceptedTaxonNode =treeNode; - + // check if taxon has no children if(((TaxonNode)oldAcceptedTaxonNode).getCountChildren() > 0) { - MessagingUtils.warningDialog("Prerequisite not met", this, + MessagingUtils.warningDialog("Prerequisite not met", this, "The accepted taxon must not have any childen. You need to move all childen to " + "another taxon node in the TaxonNavigator before attempting to turn the accepted " + "taxon into a synonym."); return null; } /*if(((TaxonNode)oldAcceptedTaxonNode).getTaxon().hasSynonyms()) { - EditorUtil.warningDialog("Prerequisite not met", this, + EditorUtil.warningDialog("Prerequisite not met", this, "The accepted taxon must not have any synonyms. You need to move all synonyms to " + "another taxon before attempting to turn the accepted " + "taxon into a synonym."); return null; }*/ - + List excludeTaxa = new ArrayList(); - excludeTaxa.add(oldAcceptedTaxonNode.getUuid()); - TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), - taxonNavigator.getConversationHolder(), - "Choose the accepted taxon", - excludeTaxa, - null, - ((TaxonNode)oldAcceptedTaxonNode).getClassification()); + excludeTaxa.add(((TaxonNode)oldAcceptedTaxonNode).getTaxon().getUuid()); + TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), + taxonNavigator.getConversationHolder(), + "Choose the accepted taxon", + excludeTaxa, + null, + ((TaxonNode)oldAcceptedTaxonNode).getClassification()); if (newAcceptedTaxonNode == null) { return null; } - + if (allEditorsClosed){ - - operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(), NavigationUtil.getUndoContext(), oldAcceptedTaxonNode, newAcceptedTaxonNode, - taxonNavigator, taxonNavigator); - + + operation = new ChangeAcceptedTaxonToSynonymOperation(event.getCommand().getName(), + NavigationUtil.getUndoContext(), + oldAcceptedTaxonNode, + newAcceptedTaxonNode, + taxonNavigator, + taxonNavigator, + taxonNavigator); + NavigationUtil.executeOperation(operation); //} } - - - + + + } catch (NotDefinedException e) { MessagingUtils.warn(getClass(), "Command name not set"); } @@ -146,22 +144,24 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler return null; } } - - + + return null; - + } /* (non-Javadoc) * @see eu.etaxonomy.taxeditor.operations.IPostOperationEnabled#postOperation(eu.etaxonomy.cdm.model.common.CdmBase) */ /** {@inheritDoc} */ - public boolean postOperation(CdmBase objectAffectedByOperation) { + @Override + public boolean postOperation(CdmBase objectAffectedByOperation) { Display.getDefault().asyncExec(new Runnable(){ - public void run() { + @Override + public void run() { EditorUtil.close(editor.getMultiPageTaxonEditor()); - + try { MultiPageTaxonEditor possibleOpenEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(newAcceptedTaxonNodeUuid); if(possibleOpenEditor != null){ @@ -175,10 +175,10 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage()); } } - + }); - - + + return true; } @@ -187,8 +187,9 @@ public class ChangeAcceptedTaxonToSynonymHandler extends DeleteHandler * * @return a boolean. */ - public boolean onComplete() { + @Override + public boolean onComplete() { // TODO Auto-generated method stub return false; - } + } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java index f8e789caf..ea3fb60d9 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java @@ -28,13 +28,12 @@ import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator; -import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator.ChildHandling; +import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; import eu.etaxonomy.cdm.model.common.ITreeNode; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; -import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator; @@ -64,6 +63,12 @@ public class DeleteHandler extends AbstractHandler{ TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); + + String plural = selection.size() > 1 ? "s" : ""; + // Prompt user for confirmation + + + Iterator selectionIterator = selection.iterator(); Set treeNodes = new HashSet(); @@ -81,12 +86,15 @@ public class DeleteHandler extends AbstractHandler{ } AbstractPostOperation operation = null; TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setDeleteInAllClassifications(false); + if (treeNodes.size() == 1 ){ try { ITaxonTreeNode treeNode = treeNodes.iterator().next(); ITaxonTreeNode taxonNode =treeNode; TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); + //configNodes.setDeleteTaxon(false); if (taxonNode instanceof Classification && taxonNode.hasChildNodes()){ if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification? The tree has children, they will be deleted, too.")){ @@ -107,17 +115,17 @@ public class DeleteHandler extends AbstractHandler{ "Do you really want to delete the selected node? It has childnodes, they will be deleted, too.", MessageDialog.WARNING, new String[] { "Delete all children", "Move children to parent node", "Skip" }, 0); - int result = dialog.open(); + int dialog_result = dialog.open(); - if (result == 0){ + if (dialog_result == 0){ //delete all children configNodes.setChildHandling(ChildHandling.DELETE); config.setTaxonNodeConfig(configNodes); - } else if (result == 1){ + } else if (dialog_result == 1){ //move children configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT); config.setTaxonNodeConfig(configNodes); - } else if (result == 2){ + } else if (dialog_result == 2){ //skip return null; @@ -134,11 +142,17 @@ public class DeleteHandler extends AbstractHandler{ /*if(! MessageDialog.openConfirm(HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected nodes?")){ return null; }*/ - operation = new DeleteOperation( - event.getCommand().getName(), NavigationUtil.getUndoContext(), - taxonNode, config, taxonNavigator, taxonNavigator); - AbstractUtility.executeOperation(operation); + operation = new DeleteOperation(event.getCommand().getName(), + NavigationUtil.getUndoContext(), + taxonNode, + config, + taxonNavigator, + taxonNavigator, + taxonNavigator); + + NavigationUtil.executeOperation(operation); + //} } @@ -155,11 +169,17 @@ public class DeleteHandler extends AbstractHandler{ return null; } if (allEditorsClosed){ - operation = new DeleteOperation( - event.getCommand().getName(), NavigationUtil.getUndoContext(), - treeNodes, new TaxonDeletionConfigurator(), taxonNavigator, taxonNavigator); - AbstractUtility.executeOperation(operation); + operation = new DeleteOperation(event.getCommand().getName(), + NavigationUtil.getUndoContext(), + treeNodes, + new TaxonDeletionConfigurator(), + taxonNavigator, + taxonNavigator, + taxonNavigator); + + NavigationUtil.executeOperation(operation); + } }catch (NotDefinedException e) { MessagingUtils.warn(getClass(), "Command name not set"); diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java index d89a11fda..9810418ca 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -21,10 +20,6 @@ import eu.etaxonomy.cdm.api.service.IDescriptionService; import eu.etaxonomy.cdm.api.service.ITaxonNodeService; import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; -import eu.etaxonomy.cdm.model.common.Annotation; -import eu.etaxonomy.cdm.model.common.AnnotationType; -import eu.etaxonomy.cdm.model.common.Language; -import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.editor.EditorUtil; @@ -69,8 +64,8 @@ public class MoveFactualDataHandler extends AbstractHandler { navigator.getConversationHolder(), "Choose the accepted taxon", excludeTaxa, - null, - null); + sourceTaxonNode, + sourceTaxonNode.getClassification()); if (dialogTaxonNode == null) { return null; } @@ -81,26 +76,10 @@ public class MoveFactualDataHandler extends AbstractHandler { "changes in the target taxon. Please save first."); return null; } - for(TaxonDescription description : taxon.getDescriptions()){ - //reload to avoid session conflicts - description = HibernateProxyHelper.deproxy(CdmStore.getService(IDescriptionService.class).load(description.getUuid()), TaxonDescription.class); + CdmStore.getService(IDescriptionService.class).moveTaxonDescriptions(taxon.getUuid(),targetTaxonNode.getTaxon().getUuid()); - String moveMessage = String.format("Description moved from %s", taxon); - if(description.isProtectedTitleCache()){ - String separator = ""; - if(!StringUtils.isBlank(description.getTitleCache())){ - separator = " - "; - } - description.setTitleCache(description.getTitleCache() + separator + moveMessage, true); - } - Annotation annotation = Annotation.NewInstance(moveMessage, Language.getDefaultLanguage()); - annotation.setAnnotationType(AnnotationType.TECHNICAL()); - description.addAnnotation(annotation); - targetTaxonNode.getTaxon().addDescription(description); - CdmStore.getService(IDescriptionService.class).saveOrUpdate(description); - navigator.getConversationHolder().bind(); - navigator.getConversationHolder().commit(); - } + navigator.getConversationHolder().bind(); + navigator.getConversationHolder().commit(); Display.getDefault().asyncExec(new Runnable(){ diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java index a761433ad..9cc52f1b9 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java @@ -26,6 +26,7 @@ import org.eclipse.ui.handlers.HandlerUtil; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator; @@ -84,14 +85,15 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE // TaxonNode taxonNode = (TaxonNode) selection.getFirstElement(); if (taxonNodes.size() >= 1){ + Classification classification = taxonNodes.iterator().next().getClassification(); boolean moveToNewParent = true; if (PreferencesUtil.getSortNodesNaturally()){ if(!MessageDialog.openQuestion(null, "Target node", "The choosen target node should be the parent?")){ moveToNewParent = false; } - parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose the taxon above the moved taxon.", excludeTaxa, null, null); + parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose the taxon above the moved taxon.", excludeTaxa, null, classification); }else{ - parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose new parent", excludeTaxa, null, null); + parentTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), taxonNavigator.getConversationHolder(), "Choose new parent", excludeTaxa, null, classification); } if(parentTaxonNode != null){ if(NavigationUtil.isDirty(parentTaxonNode)){ diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NavigatorHandlerUtils.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NavigatorHandlerUtils.java new file mode 100644 index 000000000..3b1eae756 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/NavigatorHandlerUtils.java @@ -0,0 +1,55 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.handler; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorReference; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.model.common.ITreeNode; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.editor.TaxonEditorInput; + +/** + * @author cmathew + * @date 16 Jun 2015 + * + */ +public class NavigatorHandlerUtils { + + protected static boolean closeObsoleteEditor(ExecutionEvent event, TaxonNode taxonNode){ + IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); + boolean result = true; + for (IEditorReference ref : activePage.getEditorReferences()) { + try { + String treeIndex = ((ITreeNode)taxonNode).treeIndex(); + + + IEditorInput input = ref.getEditorInput(); + if (input instanceof TaxonEditorInput) { + TaxonNode node = ((TaxonEditorInput) input).getTaxonNode(); + //if node is a child of taxonNode then close the editor + if( ((ITreeNode) node).treeIndex().startsWith(treeIndex)){ + //if (taxonNode.equals(node)) { + result &= activePage.closeEditor(ref.getEditor(false), true); + + } + } + } catch (PartInitException e) { + continue; + } + } + return result; + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingChangeAcceptedTaxonToSynonymHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingChangeAcceptedTaxonToSynonymHandler.java new file mode 100644 index 000000000..c4f6df32c --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingChangeAcceptedTaxonToSynonymHandler.java @@ -0,0 +1,133 @@ +/** + * + */ +package eu.etaxonomy.taxeditor.navigation.navigator.handler; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; +import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingChangeAcceptedTaxonToSynonymOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; +import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; + +/** + *

ChangeAcceptedTaxonToSynonymHandler class.

+ * + * @author n.hoffmann + * @created Jan 4, 2010 + * @version 1.0 + */ +public class RemotingChangeAcceptedTaxonToSynonymHandler extends RemotingCdmHandler { + + private static final Logger logger = Logger + .getLogger(RemotingChangeAcceptedTaxonToSynonymHandler.class); + + + private ITaxonTreeNode oldTaxonNode; + + /** + * @param label + */ + public RemotingChangeAcceptedTaxonToSynonymHandler() { + super(TaxonNavigatorLabels.CHANGE_ACCEPTED_TAXON_TO_SYNONYM_LABEL); + } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); + // check that only a single taxon tree node has been selected + if(selection.size() > 1) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE); + } + + // check for no taxon tree node selected + if(selection.size() == 0) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE); + } + + // check that selected object is a taxon node + Object obj = selection.iterator().next(); + if(obj instanceof ITaxonTreeNode) { + oldTaxonNode = (ITaxonTreeNode)obj; + } else { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE); + } + // check that the source taxon node does not have children + if(((TaxonNode)oldTaxonNode).getCountChildren() > 0) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SOURCE_TAXON_HAS_CHILDREN_MESSAGE); + + } + + // check if corresponding name editor is closed + boolean editorClosed = NavigatorHandlerUtils.closeObsoleteEditor(event, (TaxonNode) oldTaxonNode); + if(editorClosed != true) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE); + } + + return Status.OK_STATUS; + } + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#doOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + List excludeTaxa = new ArrayList(); + excludeTaxa.add(((TaxonNode)oldTaxonNode).getTaxon().getUuid()); + TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), + new ConversationHolderMock(), + "Choose the accepted taxon", + excludeTaxa, + null, + ((TaxonNode)oldTaxonNode).getClassification()); + + if (newAcceptedTaxonNode == null) { + return null; + } + + RemotingChangeAcceptedTaxonToSynonymOperation rcattso = + new RemotingChangeAcceptedTaxonToSynonymOperation(event.getTrigger(), + false, + oldTaxonNode.getUuid(), + newAcceptedTaxonNode.getUuid()); + + return rcattso; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + + + + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingDeleteTaxonNodeHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingDeleteTaxonNodeHandler.java new file mode 100644 index 000000000..53d23d823 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingDeleteTaxonNodeHandler.java @@ -0,0 +1,153 @@ +// $Id$ +/** + * Copyright (C) 2015 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.navigation.navigator.handler; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; +import eu.etaxonomy.cdm.model.taxon.Classification; +import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; +import eu.etaxonomy.taxeditor.ui.dialog.deleteConfigurator.DeleteConfiguratorDialog; + +/** + * @author cmathew + * @date 22 Jun 2015 + * + */ +public class RemotingDeleteTaxonNodeHandler extends RemotingCdmHandler { + + private TaxonDeletionConfigurator config; + private Set treeNodes; + + /** + * @param label + */ + public RemotingDeleteTaxonNodeHandler() { + super(TaxonNavigatorLabels.DELETE_TAXON_NODE_LABEL); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); + + Iterator selectionIterator = selection.iterator(); + treeNodes = new HashSet(); + + while (selectionIterator.hasNext()){ + Object object = selectionIterator.next(); + if(object instanceof ITaxonTreeNode) { + treeNodes.add((ITaxonTreeNode) object); + } + } + boolean allEditorsClosed = true; + IWorkbenchPage activePage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); + for (ITaxonTreeNode treeNode : treeNodes) { + if(treeNode instanceof TaxonNode) { + allEditorsClosed &= EditorUtil.closeObsoleteEditor((TaxonNode) treeNode, activePage); + } + } + if(!allEditorsClosed) { + return new Status(IStatus.WARNING, + "unknown", + TaxonNavigatorLabels.RELATED_EDITOR_NOT_CLOSED_MESSAGE); + } + + config = new TaxonDeletionConfigurator(); + + if (treeNodes.size() == 1 ){ + + ITaxonTreeNode treeNode = treeNodes.iterator().next(); + ITaxonTreeNode taxonNode = treeNode; + TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); + if (taxonNode instanceof Classification && taxonNode.hasChildNodes()){ + if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification? The tree has children, they will be deleted, too.")){ + return Status.CANCEL_STATUS; + } + } else if (taxonNode instanceof Classification && !taxonNode.hasChildNodes()){ + if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(config, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the classification?")){ + return Status.CANCEL_STATUS; + } + } else { + + if (taxonNode.hasChildNodes()){ + DeleteConfiguratorDialog dialog = new DeleteConfiguratorDialog( + config, + HandlerUtil.getActiveShell(event), + "Confirm Deletion", + null, + "Do you really want to delete the selected node? It has childnodes, they will be deleted, too.", + MessageDialog.WARNING, new String[] { "Delete all children", + "Move children to parent node", "Skip" }, 0); + int result = dialog.open(); + + if (result == 0){ + //delete all children + configNodes.setChildHandling(ChildHandling.DELETE); + config.setTaxonNodeConfig(configNodes); + } else if (result == 1){ + //move children + configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT); + config.setTaxonNodeConfig(configNodes); + } else if (result == 2){ + return Status.CANCEL_STATUS; + } + } else{ + if(!DeleteConfiguratorDialog.openConfirmWithConfigurator(configNodes, HandlerUtil.getActiveShell(event), "Confirm Deletion", "Do you really want to delete the selected node?")){ + return Status.CANCEL_STATUS; + } + config.setTaxonNodeConfig(configNodes); + } + } + } + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingDeleteTaxonNodeOperation(event.getTrigger(), + false, + treeNodes, + config); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveFactualDataHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveFactualDataHandler.java new file mode 100644 index 000000000..1d6b008e9 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveFactualDataHandler.java @@ -0,0 +1,155 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.handler; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; +import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.editor.EditorUtil; +import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor; +import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.model.MessagingUtils; +import eu.etaxonomy.taxeditor.navigation.NavigationUtil; +import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveFactualDataOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; +import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; + +/** + * @author cmathew + * @date 19 Jun 2015 + * + */ +public class RemotingMoveFactualDataHandler extends RemotingCdmHandler { + + + private TaxonNode sourceTaxonNode; + private TaxonNode targetTaxonNode; + /** + * @param label + */ + public RemotingMoveFactualDataHandler() { + super(TaxonNavigatorLabels.MOVE_FACTUAL_DATA_LABEL); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); + // check that only a single taxon tree node has been selected + if(selection.size() > 1) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE); + } + + // check for no taxon tree node selected + if(selection.size() == 0) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE); + } + + // check that selected object is a taxon node + Object obj = selection.iterator().next(); + if(obj instanceof ITaxonTreeNode) { + sourceTaxonNode = (TaxonNode)obj; + } else { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE); + } + + if(NavigationUtil.isDirty(sourceTaxonNode)) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.UNSAVED_CHANGES_MESSAGE); + } + + List excludeTaxa = new ArrayList(); + excludeTaxa.add(sourceTaxonNode.getTaxon().getUuid()); + + targetTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), + new ConversationHolderMock(), + "Choose the accepted taxon", + excludeTaxa, + null, + sourceTaxonNode.getClassification()); + + if(targetTaxonNode == null) { + return new Status(IStatus.CANCEL, + "unknown", + ""); + } + if(NavigationUtil.isDirty(targetTaxonNode)){ + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.UNSAVED_CHANGES_MESSAGE); + } + return Status.OK_STATUS; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + return new RemotingMoveFactualDataOperation(event.getTrigger(), + false, + sourceTaxonNode.getTaxon().getUuid(), + targetTaxonNode.getTaxon().getUuid()); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + Display.getDefault().asyncExec(new Runnable(){ + @Override + public void run() { + try { + //close and re-open to refresh factual data view + MultiPageTaxonEditor sourceEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(sourceTaxonNode.getUuid()); + MultiPageTaxonEditor targetEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(targetTaxonNode.getUuid()); + if(targetEditor != null){ + AbstractUtility.close(sourceEditor); + AbstractUtility.close(targetEditor); + } + EditorUtil.openTaxonNode(sourceTaxonNode.getUuid()); + EditorUtil.openTaxonNode(targetTaxonNode.getUuid()); + } catch (PartInitException e) { + MessagingUtils.error(this.getClass(), e); + throw new RuntimeException(e); + } catch (Exception e) { + MessagingUtils.warningDialog("Could not create Taxon", this, e.getMessage()); + } + } + + }); + + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveTaxonNodeHandler.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveTaxonNodeHandler.java new file mode 100644 index 000000000..3458faa9f --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/RemotingMoveTaxonNodeHandler.java @@ -0,0 +1,139 @@ +// $Id$ +/** + * Copyright (C) 2015 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.navigation.navigator.handler; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.handlers.HandlerUtil; + +import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.navigation.NavigationUtil; +import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigatorLabels; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation; +import eu.etaxonomy.taxeditor.operation.RemotingCdmHandler; +import eu.etaxonomy.taxeditor.preference.PreferencesUtil; +import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog; + +/** + * @author cmathew + * @date 19 Jun 2015 + * + */ +public class RemotingMoveTaxonNodeHandler extends RemotingCdmHandler { + + private TaxonNode oldTaxonNode; + + public RemotingMoveTaxonNodeHandler() { + super(TaxonNavigatorLabels.MOVE_TAXON_LABEL); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#allowOperations(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public IStatus allowOperations(ExecutionEvent event) { + TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event); + // check that only a single taxon tree node has been selected + if(selection.size() > 1) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SINGLE_TAXON_SELECTION_MESSAGE); + } + + // check for no taxon tree node selected + if(selection.size() == 0) { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.NO_TAXON_SELECTION_MESSAGE); + } + // check that selected object is a taxon node + Object obj = selection.iterator().next(); + if(obj instanceof TaxonNode) { + oldTaxonNode = (TaxonNode)obj; + } else { + return new Status(IStatus.ERROR, + "unknown", + TaxonNavigatorLabels.SELECTED_OBJECT_NOT_TREE_NODE_MESSAGE); + } + return Status.OK_STATUS; + } + + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#prepareOperation(org.eclipse.core.commands.ExecutionEvent) + */ + @Override + public AbstractOperation prepareOperation(ExecutionEvent event) { + Shell activeShell = HandlerUtil.getActiveShell(event); + TaxonNode parentTaxonNode; + + List excludeTaxa = new ArrayList(); + excludeTaxa.add(oldTaxonNode.getTaxon().getUuid()); + + boolean moveToNewParent = true; + + if (PreferencesUtil.getSortNodesNaturally()){ + if(!MessageDialog.openQuestion(activeShell, "Target node", "Should the choosen target node be the parent of this taxon node?")){ + moveToNewParent = false; + } + parentTaxonNode = TaxonNodeSelectionDialog.select(activeShell, + new ConversationHolderMock(), + "Choose the taxon above the moved taxon.", + excludeTaxa, + null, + oldTaxonNode.getClassification()); + } else { + parentTaxonNode = TaxonNodeSelectionDialog.select(activeShell, + new ConversationHolderMock(), + "Choose new parent", + excludeTaxa, + null, + oldTaxonNode.getClassification()); + } + + + if(parentTaxonNode != null){ + if(NavigationUtil.isDirty(parentTaxonNode)){ + MessageDialog.openWarning(activeShell, + "Unsaved Parent Taxon", + "There are unsaved changes in the parent taxon. Please save first."); + return null; + } + + return new RemotingMoveTaxonOperation(event.getTrigger(), + false, + oldTaxonNode.getUuid(), + parentTaxonNode.getUuid(), + moveToNewParent); + } + + return null; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmHandler#onComplete() + */ + @Override + public void onComplete() { + // TODO Auto-generated method stub + + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java index b9c5e9dd3..6d9d0f091 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java @@ -16,11 +16,10 @@ import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; -import org.eclipse.jface.dialogs.MessageDialog; import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; -import eu.etaxonomy.cdm.api.service.DeleteResult; import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.UpdateResult; import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; @@ -29,6 +28,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -42,6 +42,8 @@ public class ChangeAcceptedTaxonToSynonymOperation extends DeleteOperation { private final TaxonNode newAcceptedTaxonNode; + private final ICdmEntitySessionEnabled cdmEntitySessionEnabled; + //private TaxonNode oldTaxonNode; @@ -56,10 +58,15 @@ public class ChangeAcceptedTaxonToSynonymOperation extends * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. */ public ChangeAcceptedTaxonToSynonymOperation(String label, - IUndoContext undoContext, ITaxonTreeNode oldTaxonNode, TaxonNode newAcceptedTaxonNode, - IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) { - super(label, undoContext, oldTaxonNode, new TaxonDeletionConfigurator(),postOperationEnabled, conversationEnabled); + IUndoContext undoContext, + ITaxonTreeNode oldTaxonNode, + TaxonNode newAcceptedTaxonNode, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, oldTaxonNode, new TaxonDeletionConfigurator(),postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.newAcceptedTaxonNode = newAcceptedTaxonNode; + this.cdmEntitySessionEnabled = cdmEntitySessionEnabled; } @@ -73,26 +80,36 @@ public class ChangeAcceptedTaxonToSynonymOperation extends monitor.worked(20); bind(); - Taxon oldTaxon = (Taxon) HibernateProxyHelper.deproxy(((TaxonNode) taxonNode).getTaxon()); + + Taxon oldTaxon = HibernateProxyHelper.deproxy(((TaxonNode) taxonNode).getTaxon(), Taxon.class); + Taxon newAcceptedTaxon = HibernateProxyHelper.deproxy(newAcceptedTaxonNode.getTaxon(), Taxon.class); + try { - DeleteResult result = CdmStore.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode((TaxonNode) taxonNode, newAcceptedTaxonNode, null, null, null); - + UpdateResult result = CdmStore.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode(taxonNode.getUuid(), newAcceptedTaxonNode.getUuid(), null, null, null); + + if (!result.getExceptions().isEmpty() && result.isOk()){ String separator = ", "; String exceptionString = ""; + int count = result.getExceptions().size(); + int n = 0; for (Exception exception : result.getExceptions()) { - exceptionString += exception.getLocalizedMessage()+separator; + n++; + exceptionString += exception.getLocalizedMessage(); + if (n treeNodes; - protected final TaxonDeletionConfigurator config; + private Set treeNodes; + protected final TaxonDeletionConfigurator config; + private final ICdmEntitySessionEnabled cdmEntitySessionEnabled; + + /** + *

Constructor for DeleteTreeNodeOperation.

+ * + * @param label a {@link java.lang.String} object. + * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. + * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. + * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. + * @param treeNodes a {@link java.util.Set} object. + */ + public DeleteOperation(String label, IUndoContext undoContext, + ITaxonTreeNode taxonNode, TaxonDeletionConfigurator config, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); + this.taxonNode = (ITaxonTreeNode)CdmBase.deproxy(taxonNode, CdmBase.class); + this.config = config; + this.cdmEntitySessionEnabled = cdmEntitySessionEnabled; + } + + /** + *

Constructor for DeleteTreeNodeOperation.

+ * + * @param label a {@link java.lang.String} object. + * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. + * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. + * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. + * @param treeNodes a {@link java.util.Set} object. + */ + public DeleteOperation(String label, IUndoContext undoContext, + Set treeNodes, TaxonDeletionConfigurator config, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); + this.treeNodes = treeNodes; + this.config = config; + this.cdmEntitySessionEnabled = cdmEntitySessionEnabled; + } - /** - *

Constructor for DeleteTreeNodeOperation.

- * - * @param label a {@link java.lang.String} object. - * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. - * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. - * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. - * @param treeNodes a {@link java.util.Set} object. - */ - public DeleteOperation(String label, IUndoContext undoContext, - ITaxonTreeNode taxonNode, TaxonDeletionConfigurator config, - IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); - this.taxonNode = (ITaxonTreeNode)CdmBase.deproxy(taxonNode, CdmBase.class); - this.config = config; - } - - /** - *

Constructor for DeleteTreeNodeOperation.

- * - * @param label a {@link java.lang.String} object. - * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object. - * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object. - * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. - * @param treeNodes a {@link java.util.Set} object. - */ - public DeleteOperation(String label, IUndoContext undoContext, - Set treeNodes, TaxonDeletionConfigurator config, - IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); - this.treeNodes = treeNodes; - this.config = config; - } /* (non-Javadoc) @@ -96,88 +105,73 @@ public class DeleteOperation extends AbstractPersistentPostOperation{ monitor.worked(20); ICdmApplicationConfiguration controller = CdmStore.getCurrentApplicationConfiguration(); ITaxonNodeService service = controller.getTaxonNodeService(); - if(taxonNode != null && taxonNode instanceof TaxonNode){ - //((TaxonNode) treeNode).delete(); - - element = ((TaxonNode)taxonNode).getTaxon(); - - DeleteResult result = service.deleteTaxonNode((TaxonNode)taxonNode, config); - if (result.isError() && !result.getExceptions().isEmpty()){ - //TODO:Error message! - MessageDialog.openError(null, "Delete failed", result.getExceptions().iterator().next().getMessage()); - } else if (!result.getExceptions().isEmpty()){ - String separator = ", "; - String exceptionString = ""; - int count = 1; - for (Exception exception : result.getExceptions()) { - exceptionString += exception.getLocalizedMessage(); - if (count < result.getExceptions().size()){ - exceptionString += separator; - } - } - MessagingUtils.informationDialog("Delete of the node was successful but the taxon could not be deleted.", exceptionString); - } - - - }else if(taxonNode != null && taxonNode instanceof Classification){ - Classification taxonomicTree = (Classification) taxonNode; - /*if(taxonomicTree.hasChildNodes()){ - if(! MessageDialog.openConfirm(null, "Confirm Deletion", "The selected tree has children, do yu realy want to delete the whole tree with its children?")){ - return null; - } - }*/ - - DeleteResult result = CdmStore.getService(IClassificationService.class).delete(taxonomicTree); - if (result.isError() && !result.getExceptions().isEmpty()){ - String separator = ", "; - String exceptionString = ""; - for (Exception exception : result.getExceptions()) { - exceptionString += exception.getLocalizedMessage()+separator; - } - MessagingUtils.error(null, exceptionString, result.getExceptions().iterator().next()); - } - - /*}else{ - try{ - CdmStore.getService(IClassificationService.class).delete(taxonomicTree); - }catch(ReferencedObjectUndeletableException e){ - throw new ExecutionException(e.getMessage()); - } - }*/ - } else { - - DeleteResult result =service.deleteTaxonNodes(treeNodes, config); - if (result.isError() && !result.getExceptions().isEmpty()){ - String separator = ", "; - String exceptionString = ""; - for (Exception exception : result.getExceptions()) { - exceptionString += exception.getLocalizedMessage()+separator; - } - MessagingUtils.error(null, exceptionString, result.getExceptions().iterator().next()); - } + if(taxonNode != null && taxonNode instanceof TaxonNode){ + //((TaxonNode) treeNode).delete(); + + element = ((TaxonNode)taxonNode).getTaxon(); + + DeleteResult result = service.deleteTaxonNode((TaxonNode)taxonNode, config); + if (result.isError() && !result.getExceptions().isEmpty()){ + + DeleteResultMessagingUtils.messageDialogWithDetails(result, "TaxonNode could not be deleted.", TaxeditorNavigationPlugin.PLUGIN_ID); + } else if (!result.getExceptions().isEmpty()){ + String separator = ", "; + String exceptionString = ""; + for (Exception exception : result.getExceptions()) { + exceptionString += exception.getLocalizedMessage()+separator; + } + DeleteResultMessagingUtils.messageDialogWithDetails(result, "TaxonNode was successfully deleted, but related object(s) could not be deleted", TaxeditorNavigationPlugin.PLUGIN_ID); } - monitor.worked(40); - return postExecute(null); - } - /* (non-Javadoc) - * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) - */ - /** {@inheritDoc} */ - @Override - public IStatus redo(IProgressMonitor monitor, IAdaptable info) - throws ExecutionException { - return null; - } + }else if(taxonNode != null && taxonNode instanceof Classification){ + Classification taxonomicTree = (Classification) taxonNode; + + DeleteResult result = CdmStore.getService(IClassificationService.class).delete(taxonomicTree.getUuid()); + if (result.isError() && !result.getExceptions().isEmpty()){ + //TODO:Error message! + DeleteResultMessagingUtils.messageDialogWithDetails(result, "TaxonNode could not be deleted.", TaxeditorNavigationPlugin.PLUGIN_ID); + } + } else { + Set treeNodeUuids = new HashSet(); + ITaxonTreeNode entity = null; + for(ITaxonTreeNode treeNode : treeNodes) { + if(entity == null) { + entity = treeNode; + } + treeNodeUuids.add(treeNode.getUuid()); + } + + DeleteResult result = service.deleteTaxonNodes(treeNodeUuids, config); + if (result.isError() && !result.getExceptions().isEmpty()){ + //TODO:Error message! + DeleteResultMessagingUtils.messageDialogWithDetails(result, "TaxonNode could not be deleted.", TaxeditorNavigationPlugin.PLUGIN_ID); + } - /* (non-Javadoc) - * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) - */ - /** {@inheritDoc} */ - @Override - public IStatus undo(IProgressMonitor monitor, IAdaptable info) - throws ExecutionException { - return null; - } + } + + monitor.worked(40); + + return postExecute(null); + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + /** {@inheritDoc} */ + @Override + public IStatus redo(IProgressMonitor monitor, IAdaptable info) + throws ExecutionException { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.operations.AbstractOperation#undo(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + /** {@inheritDoc} */ + @Override + public IStatus undo(IProgressMonitor monitor, IAdaptable info) + throws ExecutionException { + return null; + } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/EditClassificationOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/EditClassificationOperation.java index 072fc2fb5..f8ee6d9f1 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/EditClassificationOperation.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/EditClassificationOperation.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -21,6 +21,7 @@ import eu.etaxonomy.cdm.api.service.IClassificationService; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -31,7 +32,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; * @version 1.0 */ public class EditClassificationOperation extends AbstractPersistentPostOperation { - private Classification classification; + private final Classification classification; /** *

Constructor for EditTaxonomicTreeOperation.

@@ -44,12 +45,13 @@ public class EditClassificationOperation extends AbstractPersistentPostOperation */ public EditClassificationOperation(String label, IUndoContext undoContext, Classification classification, IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); - + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); + this.classification = classification; } - + /* (non-Javadoc) * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) */ @@ -58,13 +60,13 @@ public class EditClassificationOperation extends AbstractPersistentPostOperation public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { bind(); - + CdmStore.getService(IClassificationService.class).save(classification); - + monitor.worked(40); return postExecute(classification); - + } /* (non-Javadoc) diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java index 830d572a4..eef8af10c 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java @@ -84,7 +84,7 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation { bind(); monitor.worked(20); - UpdateResult result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid()); + UpdateResult result = CdmStore.getService(ITaxonNodeService.class).moveTaxonNodes(this.taxonNodesUuid,newParentTreeNode.getUuid(), moveToParentNode); // try { // for (TaxonNode taxonNode : taxonNodes){ // TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode, diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingChangeAcceptedTaxonToSynonymOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingChangeAcceptedTaxonToSynonymOperation.java new file mode 100644 index 000000000..ac34629dc --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingChangeAcceptedTaxonToSynonymOperation.java @@ -0,0 +1,61 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.operation; + +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; + + +/** + * @author cmathew + * @date 17 Jun 2015 + * + */ +public class RemotingChangeAcceptedTaxonToSynonymOperation extends RemotingCdmUpdateOperation { + + private final UUID oldTaxonNodeUuid; + private final UUID newAcceptedTaxonNodeUuid; + + + private final static String LABEL = "Change Accepted Taxon to Synonym operation"; + + /** + * @param label + */ + public RemotingChangeAcceptedTaxonToSynonymOperation(Object source, + boolean async, + UUID oldTaxonNodeUuid, + UUID newAcceptedTaxonNodeUuid) { + super(LABEL, Action.Update, source, async); + this.oldTaxonNodeUuid = oldTaxonNodeUuid; + this.newAcceptedTaxonNodeUuid = newAcceptedTaxonNodeUuid; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + return CdmApplicationState.getService(ITaxonNodeService.class).makeTaxonNodeASynonymOfAnotherTaxonNode(oldTaxonNodeUuid, + newAcceptedTaxonNodeUuid, + null, + null, + null); + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingDeleteTaxonNodeOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingDeleteTaxonNodeOperation.java new file mode 100644 index 000000000..4fefa62a9 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingDeleteTaxonNodeOperation.java @@ -0,0 +1,87 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.operation; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; +import eu.etaxonomy.cdm.model.taxon.Classification; +import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; + +/** + * @author cmathew + * @date 22 Jun 2015 + * + */ +public class RemotingDeleteTaxonNodeOperation extends RemotingCdmUpdateOperation { + + private final static String LABEL = "Delete Taxon Node operation"; + + private final Set treeNodes; + private final TaxonDeletionConfigurator config; + + /** + * @param label + * @param action + * @param source + * @param async + */ + public RemotingDeleteTaxonNodeOperation(Object source, + boolean async, + Set treeNodes, + TaxonDeletionConfigurator config) { + super(LABEL, Action.Delete, source, async); + this.treeNodes = treeNodes; + this.config = config; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + + + if(treeNodes.size() == 1) { + // when single node this is either a taxon or a classification + ITaxonTreeNode node = treeNodes.iterator().next(); + if(node instanceof TaxonNode) { + return CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().deleteTaxonNode(((TaxonNode)node).getUuid(), config); + } else if(node instanceof Classification) { + entityType = Classification.class; + return CdmApplicationState.getCurrentAppConfig().getClassificationService().delete(((Classification)node).getUuid()); + } + } else { + // when list we assume all are taxon nodes + Set treeNodeUuids = new HashSet(); + ITaxonTreeNode entity = null; + for(ITaxonTreeNode treeNode : treeNodes) { + if(entity == null) { + entity = treeNode; + } + treeNodeUuids.add(treeNode.getUuid()); + } + + return CdmApplicationState.getCurrentAppConfig().getTaxonNodeService().deleteTaxonNodes(treeNodeUuids, new TaxonDeletionConfigurator()); + } + return null; + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveFactualDataOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveFactualDataOperation.java new file mode 100644 index 000000000..15351e96d --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveFactualDataOperation.java @@ -0,0 +1,59 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.operation; + +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.IDescriptionService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; + +/** + * @author cmathew + * @date 19 Jun 2015 + * + */ +public class RemotingMoveFactualDataOperation extends RemotingCdmUpdateOperation { + + private final static String LABEL = "Move Factual Data operation"; + + private final UUID sourceTaxonUuid; + private final UUID targetParentTaxonUuid; + + /** + * @param label + * @param action + * @param source + * @param async + */ + public RemotingMoveFactualDataOperation(Object source, + boolean async, + UUID sourceTaxonUuid, + UUID targetParentTaxonUuid) { + super(LABEL, Action.Update, source, async); + this.sourceTaxonUuid = sourceTaxonUuid; + this.targetParentTaxonUuid = targetParentTaxonUuid; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + return CdmApplicationState.getService(IDescriptionService.class).moveTaxonDescriptions(sourceTaxonUuid, + targetParentTaxonUuid); + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveTaxonOperation.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveTaxonOperation.java new file mode 100644 index 000000000..fca68db76 --- /dev/null +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/RemotingMoveTaxonOperation.java @@ -0,0 +1,83 @@ +// $Id$ +/** +* Copyright (C) 2015 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.navigation.navigator.operation; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmChangeEvent.Action; +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; + +/** + * @author cmathew + * @date 19 Jun 2015 + * + */ +public class RemotingMoveTaxonOperation extends RemotingCdmUpdateOperation { + + private final static String LABEL = "Move Taxon operation"; + + private final Set taxonNodesToMoveUuid; + private final UUID newParentTreeNodeUuid; + private final boolean moveToParentNode; + + public RemotingMoveTaxonOperation(Object source, + boolean async, + UUID taxonNodeToMoveUuid, + UUID newParentTreeNodeUuid, + boolean moveToParentNode) { + super(LABEL, Action.Update, source,async); + taxonNodesToMoveUuid = new HashSet(); + taxonNodesToMoveUuid.add(taxonNodeToMoveUuid); + this.newParentTreeNodeUuid = newParentTreeNodeUuid; + this.moveToParentNode = moveToParentNode; + } + + public RemotingMoveTaxonOperation(Object source, + boolean async, + TaxonNode taxonNodeToMove, + TaxonNode newParentTreeNode, + boolean moveToParentNode) { + super(LABEL, Action.Update, source,async); + taxonNodesToMoveUuid = new HashSet(); + taxonNodesToMoveUuid.add(taxonNodeToMove.getUuid()); + this.newParentTreeNodeUuid = newParentTreeNode.getUuid(); + this.moveToParentNode = moveToParentNode; + } + + public RemotingMoveTaxonOperation(Object source, + boolean async, + Set taxonNodesToMoveUuid, + TaxonNode newParentTreeNode, + boolean moveToParentNode) { + super(LABEL, Action.Update, source,async); + this.taxonNodesToMoveUuid = taxonNodesToMoveUuid; + this.newParentTreeNodeUuid = newParentTreeNode.getUuid(); + this.moveToParentNode = moveToParentNode; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation#doUpdateExecute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) + */ + @Override + protected UpdateResult doUpdateExecute(IProgressMonitor monitor, IAdaptable info) throws Exception { + return CdmApplicationState.getService(ITaxonNodeService.class).moveTaxonNodes(taxonNodesToMoveUuid, + newParentTreeNodeUuid, moveToParentNode); + } + +} diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateClassification.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateClassification.java index 12c9d5548..ea53a0139 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateClassification.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateClassification.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -23,6 +23,7 @@ import eu.etaxonomy.cdm.model.reference.ReferenceFactory; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -35,8 +36,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore; @Deprecated // we do not undo creation of elements public class CreateClassification extends AbstractPersistentPostOperation { - private Classification classification; - + private final Classification classification; + /** *

Constructor for SaveClassificationOperation.

* @@ -48,13 +49,14 @@ public class CreateClassification extends AbstractPersistentPostOperation { */ public CreateClassification(String label, IUndoContext undoContext, Classification classification, IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); - + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitiySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitiySessionEnabled); + this.classification = classification; - + } - + /* (non-Javadoc) * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable) */ @@ -64,15 +66,15 @@ public class CreateClassification extends AbstractPersistentPostOperation { throws ExecutionException { bind(); monitor.worked(20); - + if(classification.getReference() == null){ Reference reference = ReferenceFactory.newGeneric(); reference.setTitleCache(classification.getTitleCache()); classification.setReference(reference); } - + CdmStore.getService(IClassificationService.class).saveOrUpdate(classification); - + monitor.worked(40); return postExecute(classification); diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreatePolytomousKey.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreatePolytomousKey.java index 293811bd1..051f408b4 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreatePolytomousKey.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreatePolytomousKey.java @@ -1,9 +1,9 @@ // $Id$ /** * Copyright (C) 2007 EDIT -* European Distributed Institute of Taxonomy +* 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. */ @@ -21,6 +21,7 @@ import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; import eu.etaxonomy.cdm.model.description.PolytomousKey; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -31,7 +32,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; @Deprecated // we do not undo creation of elements public class CreatePolytomousKey extends AbstractPersistentPostOperation { - private PolytomousKey key; + private final PolytomousKey key; /** * @param label @@ -43,8 +44,9 @@ public class CreatePolytomousKey extends AbstractPersistentPostOperation { IUndoContext undoContext, PolytomousKey key, IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, postOperationEnabled, conversationEnabled); + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.key = key; } @@ -58,7 +60,7 @@ public class CreatePolytomousKey extends AbstractPersistentPostOperation { monitor.worked(20); CdmStore.getService(IPolytomousKeyService.class).saveOrUpdate(key); monitor.worked(40); - + return postExecute(key); } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java index 8b391876f..495f009dc 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java @@ -26,6 +26,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode; import eu.etaxonomy.taxeditor.model.MessagingUtils; import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation; import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; import eu.etaxonomy.taxeditor.store.CdmStore; /** @@ -38,7 +39,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore; @Deprecated // we do not undo creation of elements public class CreateTaxonNode extends AbstractPersistentPostOperation { - private Taxon newTaxon; + private final Taxon newTaxon; private TaxonNode childTaxonNode; @@ -52,10 +53,13 @@ public class CreateTaxonNode extends AbstractPersistentPostOperation { * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object. * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. */ - public CreateTaxonNode(String label, IUndoContext undoContext, - ITaxonTreeNode parentNode, TaxonNameBase name, IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled); + public CreateTaxonNode(String label, + IUndoContext undoContext, + ITaxonTreeNode parentNode, TaxonNameBase name, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); newTaxon = Taxon.NewInstance(name, null); } @@ -70,10 +74,14 @@ public class CreateTaxonNode extends AbstractPersistentPostOperation { * @param parentNode a {@link eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode} object. * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object. */ - public CreateTaxonNode(String label, IUndoContext undoContext, - ITaxonTreeNode parentNode, Taxon taxon, IPostOperationEnabled postOperationEnabled, - IConversationEnabled conversationEnabled) { - super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled); + public CreateTaxonNode(String label, + IUndoContext undoContext, + ITaxonTreeNode parentNode, + Taxon taxon, + IPostOperationEnabled postOperationEnabled, + IConversationEnabled conversationEnabled, + ICdmEntitySessionEnabled cdmEntitySessionEnabled) { + super(label, undoContext, parentNode, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled); this.newTaxon = taxon; } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java index bd04a0feb..dbfa16e5e 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchBar.java @@ -10,6 +10,7 @@ package eu.etaxonomy.taxeditor.navigation.search; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; @@ -27,6 +28,7 @@ import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; +import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; @@ -35,24 +37,25 @@ import org.eclipse.ui.menus.WorkbenchWindowControlContribution; import org.eclipse.ui.swt.IFocusService; import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator; +import eu.etaxonomy.taxeditor.model.AbstractUtility; +import eu.etaxonomy.taxeditor.model.IContextListener; import eu.etaxonomy.taxeditor.model.MessagingUtils; -import eu.etaxonomy.taxeditor.navigation.NavigationUtil; import eu.etaxonomy.taxeditor.navigation.internal.TaxeditorNavigationPlugin; import eu.etaxonomy.taxeditor.preference.IPreferenceKeys; import eu.etaxonomy.taxeditor.preference.PreferencesUtil; import eu.etaxonomy.taxeditor.preference.Resources; +import eu.etaxonomy.taxeditor.store.CdmStore; /** - *

SearchBar class.

- * * @author n.hoffmann * @author e.-m.lee * @created 15.04.2009 * @version 1.0 */ -public class SearchBar extends WorkbenchWindowControlContribution{ +public class SearchBar extends WorkbenchWindowControlContribution implements IContextListener{ private Text text_search; private String secondaryId; + private ToolBar toolBar; private final String defaultText = Messages.SearchBar_0; @@ -67,6 +70,8 @@ public class SearchBar extends WorkbenchWindowControlContribution{ createSearchTextField(composite); createToolBar(composite); registerAtFocusService(); + //register for context refreshes + CdmStore.getContextManager().addContextListener(this); return composite; } @@ -87,10 +92,11 @@ public class SearchBar extends WorkbenchWindowControlContribution{ * @param composite */ private void createToolBar(Composite composite) { - final ToolBar toolBar = new ToolBar(composite, SWT.NULL); + toolBar = new ToolBar(composite, SWT.NULL); ToolItem toolItem = new ToolItem(toolBar, SWT.DROP_DOWN | SWT.BORDER); toolItem.setText(Messages.SearchBar_1); + toolBar.setEnabled(false); DropdownSelectionListener dropdownListener = new DropdownSelectionListener( toolItem); @@ -112,8 +118,9 @@ public class SearchBar extends WorkbenchWindowControlContribution{ // is applied. I am not sure how to get rid of this. text_search = new Text(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); - text_search.setForeground(NavigationUtil.getColor(Resources.SEARCH_VIEW_FOREGROUND)); + text_search.setForeground(AbstractUtility.getColor(Resources.SEARCH_VIEW_FOREGROUND)); text_search.setText(defaultText); + text_search.setEnabled(false); addTextListeners(); } @@ -126,7 +133,7 @@ public class SearchBar extends WorkbenchWindowControlContribution{ @Override public void focusGained(FocusEvent e) { - text_search.setForeground(NavigationUtil.getColor(Resources.SEARCH_VIEW_FOCUS)); + text_search.setForeground(AbstractUtility.getColor(Resources.SEARCH_VIEW_FOCUS)); if (defaultText.equals(text_search.getText())) { text_search.setText(""); } @@ -135,17 +142,13 @@ public class SearchBar extends WorkbenchWindowControlContribution{ @Override public void focusLost(FocusEvent e) { if (text_search.getText() == "") { - text_search.setForeground(NavigationUtil.getColor(Resources.SEARCH_VIEW_FOREGROUND)); + text_search.setForeground(AbstractUtility.getColor(Resources.SEARCH_VIEW_FOREGROUND)); text_search.setText(defaultText); } } }); text_search.addKeyListener(new KeyAdapter() { - /* - * (non-Javadoc) - * @see org.eclipse.swt.events.KeyAdapter#keyPressed(org.eclipse.swt.events.KeyEvent) - */ @Override public void keyPressed(KeyEvent e) { if (e.keyCode == SWT.CR) { @@ -179,7 +182,7 @@ public class SearchBar extends WorkbenchWindowControlContribution{ return; } - if("*".equals(searchString.trim())){ + if(!searchString.trim().matches(".*\\p{L}+.*")){ MessagingUtils.warningDialog(Messages.SearchBar_2, this, Messages.SearchBar_3); return; } @@ -270,13 +273,6 @@ public class SearchBar extends WorkbenchWindowControlContribution{ private IFindTaxaAndNamesConfigurator configurator = PreferencesUtil.getSearchConfigurator(); - /* - * (non-Javadoc) - * - * @see - * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse - * .swt.events.SelectionEvent) - */ @Override public void widgetSelected(SelectionEvent e) { SearchOption option = (SearchOption) e.widget.getData(); @@ -334,7 +330,7 @@ public class SearchBar extends WorkbenchWindowControlContribution{ public boolean getPreference() { if (!PreferencesUtil.getPreferenceStore().contains( - PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_TAXA)) { + IPreferenceKeys.TAXON_SERVICE_CONFIGURATOR_TAXA)) { // initializes the search configurator PreferencesUtil.initializeSearchConfigurator(); } @@ -342,21 +338,49 @@ public class SearchBar extends WorkbenchWindowControlContribution{ switch (this) { case TAXON: boolean result = PreferencesUtil.getPreferenceStore().getBoolean( - PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_TAXA); + IPreferenceKeys.TAXON_SERVICE_CONFIGURATOR_TAXA); return result; case SYNONYM: return PreferencesUtil.getPreferenceStore().getBoolean( - PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_SYNONYMS); + IPreferenceKeys.TAXON_SERVICE_CONFIGURATOR_SYNONYMS); case NAME: return PreferencesUtil.getPreferenceStore().getBoolean( - PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_NAMES); + IPreferenceKeys.TAXON_SERVICE_CONFIGURATOR_NAMES); case COMMON_NAME: return PreferencesUtil.getPreferenceStore().getBoolean( - PreferencesUtil.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES); + IPreferenceKeys.TAXON_SERVICE_CONFIGURATOR_COMMON_NAMES); } return true; } } + + @Override + public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) { + } + + @Override + public void contextStop(IMemento memento, IProgressMonitor monitor) { + if(!text_search.isDisposed()){ + text_search.setEnabled(false); + } + if(!toolBar.isDisposed()){ + toolBar.setEnabled(false); + } + } + + @Override + public void contextStart(IMemento memento, IProgressMonitor monitor) { + text_search.setEnabled(true); + toolBar.setEnabled(true); + } + + @Override + public void contextRefresh(IProgressMonitor monitor) { + } + + @Override + public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) { + } } diff --git a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java index 9e8d5e40d..74fdee6b0 100644 --- a/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java +++ b/eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/search/SearchResultView.java @@ -41,6 +41,7 @@ import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator; import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache; import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; +import eu.etaxonomy.cdm.persistence.query.MatchMode; import eu.etaxonomy.taxeditor.model.AbstractUtility; import eu.etaxonomy.taxeditor.model.ContextListenerAdapter; import eu.etaxonomy.taxeditor.model.IContextListener; @@ -186,6 +187,7 @@ public class SearchResultView extends ViewPart implements IConversationEnabled{ if(configurator.isDoTaxaByCommonNames()){ includedEntities.add(SearchOption.COMMON_NAME.getLabel()); } + configurator.setMatchMode(MatchMode.LIKE); String includedEntitiesString = ""; for (int i = 0; i < includedEntities.size(); i++){ diff --git a/eu.etaxonomy.taxeditor.navigation/src/test/resources/log4j.properties b/eu.etaxonomy.taxeditor.navigation/src/test/resources/log4j.properties deleted file mode 100644 index 10ed8e487..000000000 --- a/eu.etaxonomy.taxeditor.navigation/src/test/resources/log4j.properties +++ /dev/null @@ -1,29 +0,0 @@ -### ************ APPENDER ***********************************### - -### direct log messages to stdout ### -log4j.appender.stdout=org.apache.log4j.ConsoleAppender -log4j.appender.stdout.Target=System.out -log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### direct messages to file hibernate.log ### -log4j.appender.file=org.apache.log4j.FileAppender -log4j.appender.file.File=taxeditor.log -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -### ************* LOG LEVELS *********************************### - -### set log levels - for more verbose logging change 'info' to 'debug' ### -### levels: error, warn, debug, info -log4j.rootLogger=WARN, stdout - -### set directory-specific levels below - -### basic level for editor directory -log4j.logger.eu.etaxonomy.taxeditor.editor = INFO, stdout - -log4j.logger.eu.etaxonomy.taxeditor.editor.handler = INFO, stdout - -### log level for conversation handler -#log4j.logger.eu.etaxonomy.cdm.api.application = DEBUG, stdout diff --git a/eu.etaxonomy.taxeditor.printpublisher/.classpath b/eu.etaxonomy.taxeditor.printpublisher/.classpath index f14ba2c2e..60dea2f68 100644 --- a/eu.etaxonomy.taxeditor.printpublisher/.classpath +++ b/eu.etaxonomy.taxeditor.printpublisher/.classpath @@ -1,6 +1,6 @@ - + diff --git a/eu.etaxonomy.taxeditor.printpublisher/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.printpublisher/META-INF/MANIFEST.MF index f98714c98..64e11394a 100644 --- a/eu.etaxonomy.taxeditor.printpublisher/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.printpublisher/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Printpublisher Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.printpublisher;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Require-Bundle: org.eclipse.osgi, org.eclipse.ui, eu.etaxonomy.taxeditor.cdmlib, @@ -15,7 +15,7 @@ Import-Package: org.apache.log4j, Bundle-ActivationPolicy: lazy Bundle-Vendor: EDIT Bundle-Activator: eu.etaxonomy.taxeditor.printpublisher.internal.PrintpublisherPlugin -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: ., activation-1.1.jar, antlr-2.7.6.jar, diff --git a/eu.etaxonomy.taxeditor.printpublisher/pom.xml b/eu.etaxonomy.taxeditor.printpublisher/pom.xml index d5e1e5486..6396b7e8d 100644 --- a/eu.etaxonomy.taxeditor.printpublisher/pom.xml +++ b/eu.etaxonomy.taxeditor.printpublisher/pom.xml @@ -3,7 +3,7 @@ taxeditor-parent eu.etaxonomy - 3.8.1 + 3.12.0 4.0.0 diff --git a/eu.etaxonomy.taxeditor.store/.classpath b/eu.etaxonomy.taxeditor.store/.classpath index acbc97488..db46751e9 100644 --- a/eu.etaxonomy.taxeditor.store/.classpath +++ b/eu.etaxonomy.taxeditor.store/.classpath @@ -1,10 +1,10 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF index 6d29cc35f..dfdc76aab 100644 --- a/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF +++ b/eu.etaxonomy.taxeditor.store/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: DataStore Bundle Bundle-SymbolicName: eu.etaxonomy.taxeditor.store;singleton:=true -Bundle-Version: 3.8.1 +Bundle-Version: 3.12.0 Bundle-Activator: eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin Bundle-Vendor: EDIT Export-Package: eu.etaxonomy.cdm, @@ -12,6 +12,7 @@ Export-Package: eu.etaxonomy.cdm, eu.etaxonomy.taxeditor.dnd.transfer, eu.etaxonomy.taxeditor.editor, eu.etaxonomy.taxeditor.editor.definedterm, + eu.etaxonomy.taxeditor.editor.definedterm.input, eu.etaxonomy.taxeditor.featuretree, eu.etaxonomy.taxeditor.handler, eu.etaxonomy.taxeditor.io, @@ -36,6 +37,7 @@ Export-Package: eu.etaxonomy.cdm, eu.etaxonomy.taxeditor.ui.dialog.selection, eu.etaxonomy.taxeditor.ui.element, eu.etaxonomy.taxeditor.ui.group.grantedauthority, + eu.etaxonomy.taxeditor.ui.mvc.combo, eu.etaxonomy.taxeditor.ui.section, eu.etaxonomy.taxeditor.ui.section.agent, eu.etaxonomy.taxeditor.ui.section.classification, @@ -47,13 +49,15 @@ Export-Package: eu.etaxonomy.cdm, eu.etaxonomy.taxeditor.ui.section.supplemental, eu.etaxonomy.taxeditor.ui.section.taxon, eu.etaxonomy.taxeditor.ui.selection, + eu.etaxonomy.taxeditor.util, eu.etaxonomy.taxeditor.view, eu.etaxonomy.taxeditor.view.datasource, eu.etaxonomy.taxeditor.view.datasource.handler, eu.etaxonomy.taxeditor.view.derivateSearch, eu.etaxonomy.taxeditor.view.detail, eu.etaxonomy.taxeditor.view.specimenSearch, - eu.etaxonomy.taxeditor.view.supplementaldata + eu.etaxonomy.taxeditor.view.supplementaldata, + org.eclipse.wb.swt Require-Bundle: org.eclipse.osgi, org.eclipse.ui, org.eclipse.jface.text, @@ -65,7 +69,8 @@ Require-Bundle: org.eclipse.osgi, org.eclipse.core.databinding.observable, org.eclipse.core.databinding.property, org.eclipse.jface.databinding -Import-Package: org.eclipse.core.commands, +Import-Package: eu.etaxonomy.taxeditor.webapp, + org.eclipse.core.commands, org.eclipse.core.commands.operations, org.eclipse.core.expressions, org.eclipse.core.runtime, @@ -84,9 +89,10 @@ Import-Package: org.eclipse.core.commands, org.eclipse.ui.editors.text, org.eclipse.ui.forms.widgets, org.eclipse.ui.ide.undo, - org.osgi.framework + org.osgi.framework, + org.osgi.service.prefs;version="1.1.1" Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: ., activation-1.1.1.jar, antlr-2.7.7.jar, diff --git a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties index 14ce99859..c2c090a7a 100644 --- a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties +++ b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle.properties @@ -156,6 +156,6 @@ Bundle-Vendor = EDIT Bundle-Name = DataStore Bundle command.name.13 = delete command.name.14 = delete -page.name.32 = TaxonNavigator +page.name.32 = Taxon Navigator page.name.33 = Sort of Taxonnodes command.name.15 = Open \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties index fdc32d069..8f10c0d1b 100644 --- a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties +++ b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/bundle_de.properties @@ -129,7 +129,7 @@ page.name.27 = Media page.name.28 = Checklisten Editor page.name.29 = Editor Profil page.name.30 = Sprache -page.name.32 = TaxonNavigator +page.name.32 = Taxon Navigator page.name.33 = Sortierung im TaxonNavigator command.label.clone = Klonen command.label.openInSpecimenEditor = \u00d6ffnen im Specimen-Editor \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages.properties b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages.properties index 282c00b7f..f88d6402c 100644 --- a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages.properties +++ b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages.properties @@ -16,7 +16,21 @@ LanguageEditorPreferencePage_PleaseRestart=Please Restart LanguageEditorPreferencePage_RestartRequired=After changing the default language, a restart is required,\nin order for the new settings to take effect. OrderPreferencePage_NewNavigatorWindowRequired=After changing the order of the taxon nodes, closing and reopen of the taxon navigator is required. OrderPreferencePage_PleaseReopenNavigator=Please close and reopen the taxon navigator. -UriWithLabelElement_URL_NOT_SAVED=URL won't be saved\! +UriWithLabelElement_URL_NOT_SAVED=URI won't be saved\! UriWithLabelElement_COULD_NOT_OPEN_BROWSER=Could not open external browser. URI is invalid. UriWithLabelElement_INVALID_URL=Invalid URI UriWithLabelElement_OPEN_EXTERNAL_BROWSER=Open in external browser + +ChangeConnectionHandler_ALREADY_CONNECTING=Already connecting +ChangeConnectionHandler_CONFIRM_DATASOURCE=Confirm Datasource Connection +ChangeConnectionHandler_CURRENTLY_CONNECTING_ALREADY=You are currently connecting to a different datasource already. +ChangeConnectionHandler_DATASOURCE_NOT_AVAILABLE=Chosen datasource is not available +ChangeConnectionHandler_REALLY_WANT_TO_CONNECT=Do you really want to connect to this datasource?\n\n +ChangeConnectionHandler_NOT_AVAILABLE_REASONS=This could mean that either the database server is not running or the machine is not reachable.\n\n Please also make sure that you are connected to the network when trying to connect to a remote datasource. + +LoginDialog_CANCEL_MESSAGE=Aborting the login procedure will close the database. +LoginDialog_LOGIN=Login +LoginDialog_PASSWORD=Password +LoginDialog_REALLY_CANCEL=Do you really want to cancel? +LoginDialog_USER_LOGIN=User Login +LoginDialog_USER_NAME=Username diff --git a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages_de.properties b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages_de.properties index f60b1dc30..ca0430e50 100644 --- a/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages_de.properties +++ b/eu.etaxonomy.taxeditor.store/OSGI-INF/l10n/messages_de.properties @@ -15,7 +15,21 @@ LanguageEditorPreferencePage_EditorHasToRestart=Der Anwendung muss neu gestartet LanguageEditorPreferencePage_PleaseRestart=Bitte neu starten LanguageEditorPreferencePage_RestartRequired=Nach dem Wechsel der Standardsprache ist ein Neustart erforderlich. OrderPreferencePage_NewNavigatorWindowRequired=Nach dem Ändern der Taxon Sortierung, ist das Schließen und erneute Öffnen des taxon Navigators erforderlich. -UriWithLabelElement_URL_NOT_SAVED=URL wird nicht gespeichert\! +UriWithLabelElement_URL_NOT_SAVED=URI wird nicht gespeichert\! UriWithLabelElement_COULD_NOT_OPEN_BROWSER=Externer Browser konnte nicht geöffnet werden. URI ist ung\u00FCtlig. UriWithLabelElement_INVALID_URL=Ung\u00FCltige URI -UriWithLabelElement_OPEN_EXTERNAL_BROWSER=Im Browser öffnen \ No newline at end of file +UriWithLabelElement_OPEN_EXTERNAL_BROWSER=Im Browser öffnen + +ChangeConnectionHandler_ALREADY_CONNECTING=Verbindung wird aufgebaut +ChangeConnectionHandler_CONFIRM_DATASOURCE=Verbindung bestätigen +ChangeConnectionHandler_CURRENTLY_CONNECTING_ALREADY=Es wird schon eine Verbindung zu einer Datenquelle aufgebaut +ChangeConnectionHandler_DATASOURCE_NOT_AVAILABLE=Gewählte Datenquelle nicht verfügbar +ChangeConnectionHandler_REALLY_WANT_TO_CONNECT=Wollen Sie sich wirklich mit dieser Datenquelle verbinden?\n\n +ChangeConnectionHandler_NOT_AVAILABLE_REASONS=Eventuell ist der Server nicht verfügbar oder erreichbar.\n\nStellen Sie bitte auch sicher, dass sie Netzzugang haben, wenn sie sich zu einer Remote-Datenquelle verbinden. + +LoginDialog_CANCEL_MESSAGE=Ein Abbruch wird die Verbindung zur Datenquelle schließen. +LoginDialog_LOGIN=Login +LoginDialog_PASSWORD=Passwort +LoginDialog_REALLY_CANCEL=Wollen Sie wirklich abbrechen? +LoginDialog_USER_LOGIN=Benutzer Login +LoginDialog_USER_NAME=Benutzername diff --git a/eu.etaxonomy.taxeditor.store/icons/specimen_derivate_type-16x16-32.png b/eu.etaxonomy.taxeditor.store/icons/specimen_derivate_type-16x16-32.png new file mode 100644 index 000000000..e5f6fafb6 Binary files /dev/null and b/eu.etaxonomy.taxeditor.store/icons/specimen_derivate_type-16x16-32.png differ diff --git a/eu.etaxonomy.taxeditor.store/plugin.xml b/eu.etaxonomy.taxeditor.store/plugin.xml index 320968a8b..8e7a4532b 100644 --- a/eu.etaxonomy.taxeditor.store/plugin.xml +++ b/eu.etaxonomy.taxeditor.store/plugin.xml @@ -265,11 +265,11 @@ restorable="true"> + allowMultiple="false" + class="eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart" + id="eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart" + name="Sessions" + restorable="false">
- - - - - - + + + + + + + + - - - - - - - - - - - - - - - - org.eclipse.tycho - tycho-maven-plugin - ${tycho.version} - true - - - org.eclipse.tycho - target-platform-configuration - ${tycho.version} - - p2 - - - - org.eclipse.tycho - tycho-surefire-plugin - ${tycho.version} - - true - false - - **/*Test.java - - eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product - eu.etaxonomy.taxeditor.application.application - - - - - - + + eu.etaxonomy + taxeditor-parent + 3.12.0-SNAPSHOT + + 4.0.0 + eu.etaxonomy.taxeditor.test + eclipse-test-plugin + UI Test Bundle + Holds all Tests for the Taxonomic Editor + + + + org.eclipse.tycho + target-platform-configuration + ${tycho.version} + + + + + + p2-installable-unit + org.eclipse.equinox.servletbridge.extensionbundle + + + + + + + org.eclipse.tycho + tycho-surefire-plugin + ${tycho.version} + + + + + + + eclipse-feature + eu.etaxonomy.taxeditor.feature + + 1.0.0 + + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.2.9.v20150224 + + -Xmx512m -XX:MaxPermSize=512m + + + spring.profiles.active + remoting + + + cdm.beanDefinitionFile + ${basedir}/src/test/resources/datasources.xml + + + cdm.datasource + cdmTest + + + 9191 + jetty-cdm-server + 10 + + 9090 + + ${project.parent.basedir}/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war + true + + + + start-jetty + pre-integration-test + + deploy-war + + + 0 + + + + stop-jetty + post-integration-test + + stop + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/log4j.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/log4j.xml deleted file mode 100644 index ea16d1383..000000000 --- a/eu.etaxonomy.taxeditor.test/src/main/resources/log4j.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.java new file mode 100644 index 000000000..db2f094f8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.java @@ -0,0 +1,415 @@ +// $Id$ +/** +* Copyright (C) 2014 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.cdm.api.cache; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.ICommonService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.LanguageString; +import eu.etaxonomy.cdm.model.description.KeyStatement; +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; +import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; + +/** + * @author cmathew + * @date 7 Oct 2014 + * + */ +@DataSet +public class CdmClientCachingTest extends RemotingSessionAwareTest { + + private static final Logger logger = Logger.getLogger(CdmClientCachingTest.class); + + private final UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66"); + private final UUID taxon1Uuid = UUID.fromString("2b336df7-29e8-4f79-985f-66502739d22f"); + private final UUID polytomousKeyNodeUuid1 = UUID.fromString("75e4c924-ff58-4ee7-a59d-fd9173517d08"); + private final UUID polytomousKeyNodeUuid2 = UUID.fromString("b775c027-13c0-4b87-8aa9-712faeaafbdc"); + + + private final IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService(); + private final IPolytomousKeyNodeService polytomousKeyNodeService = getRemoteApplicationController().getPolytomousKeyNodeService(); + private final ICommonService commonService = getRemoteApplicationController().getCommonService(); + private final ITaxonService taxonService = getRemoteApplicationController().getTaxonService(); + + + private static final List PKEY_DEPTH1_INIT_STRATEGY = Arrays.asList(new String[] { + }); + + private static final List PKEY_DEPTH2_INIT_STRATEGY = Arrays.asList(new String[] { + "root"}); + + private static final List PKEY_DEPTH3_INIT_STRATEGY = Arrays.asList(new String[] { + "root.statement"}); + + + @BeforeClass + public static void initializePolytomousKeyTest() { + + } + + + + + @Test + public void recursiveLoadSubGraphDepth1Test() { + + // this call will load into the session cache the graph + // polytomous key + // |- root : polytomous key node + // in a recursive call + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH1_INIT_STRATEGY),PolytomousKey.class); + + // checking to make sure the root object is in the session cache + Assert.assertSame(CdmBase.deproxy(pkey1.getRoot(),PolytomousKeyNode.class), cacher.getFromCache(pkey1.getRoot())); + + } + + + @Test + public void recursiveLoadSubGraphDepth2Test() { + + // this call will load into the session cache the graph + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + // in a recursive call + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + CdmTransientEntityCacher cacher = getCacher(sessionOwner); + // checking to make sure the root object is in the session cache + Assert.assertSame(CdmBase.deproxy(pkey.getRoot(),PolytomousKeyNode.class), cacher.getFromCache(pkey.getRoot())); + Assert.assertSame(CdmBase.deproxy(pkey.getRoot().getStatement(),KeyStatement.class), cacher.getFromCache(pkey.getRoot().getStatement())); + Assert.assertSame(CdmBase.deproxy(pkey.getRoot().getQuestion(),KeyStatement.class), cacher.getFromCache(pkey.getRoot().getQuestion())); + + } + + /** + * when : retrieving objects using recursive caching of object graphs with different depths + * then : the objects in the sub-graph having the same persistence id should be the same + */ + @Test + public void lazyLoadRecursiveTest() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + CdmTransientEntityCacher cacher = getCacher(sessionOwner); + + } + + + /** + * when : retrieving objects using recursive caching of object graphs with different depths + * then : the objects in the sub-graph having the same persistence id should be the same + */ + @Test + public void differentSubGraphDepthTest1() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // in a recursive call + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH1_INIT_STRATEGY),PolytomousKey.class); + KeyStatement ks1 = CdmBase.deproxy(pkey1.getRoot().getStatement(), KeyStatement.class); + + CdmTransientEntityCacher cacher = getCacher(sessionOwner); + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + PolytomousKey pkey2 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH3_INIT_STRATEGY),PolytomousKey.class); + + KeyStatement ks2 = CdmBase.deproxy(pkey2.getRoot().getStatement(), KeyStatement.class); + + Assert.assertSame(ks2, cacher.getFromCache(ks2)); + Assert.assertSame(cacher.getFromCache(KeyStatement.class, ks1.getId()), cacher.getFromCache(ks2)); + + } + + /** + * when : retrieving objects using recursive caching of object graphs with different depths + * then : the objects in the sub-graph having the same persistence id should be the same + */ + @Test + public void differentSubGraphDepthTest2() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + KeyStatement ks1 = pkey1.getRoot().getStatement(); + Assert.assertSame(ks1, pkey1.getRoot().getStatement()); + CdmTransientEntityCacher cacher = getCacher(sessionOwner); + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + PolytomousKey pkey2 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH1_INIT_STRATEGY),PolytomousKey.class); + + Assert.assertSame(pkey1.getRoot().getStatement(), pkey2.getRoot().getStatement()); + pkey2.getRoot().getStatement().getCreatedBy(); + Assert.assertSame(cacher.getFromCache(ks1), cacher.getFromCache(pkey2.getRoot().getStatement())); + } + + /** + * when : retrieving objects using (first) recursive load directly and (second) lazy loading in the same session + * then : the objects in the sub-graph having the same persistence id should be the same + */ + @Test + public void recursiveLoadAndLazyLoadTest() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + + + CdmTransientEntityCacher cacher = getCacher(sessionOwner); + + // checking that the root is not null and + // that it exists in the cache and + // that both the original object and the + // cached object are the same + Assert.assertNotNull(CdmBase.deproxy(pkey1.getRoot().getStatement(), KeyStatement.class)); + Assert.assertNotNull(cacher.getFromCache(pkey1.getRoot().getStatement())); + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + PolytomousKey pkey2 = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + KeyStatement ks2 = CdmBase.deproxy(pkey2.getRoot().getStatement(), KeyStatement.class); + Assert.assertSame(ks2, cacher.getFromCache(pkey2.getRoot().getStatement())); + + Assert.assertSame(pkey1.getRoot().getStatement(), pkey2.getRoot().getStatement()); + Assert.assertSame(cacher.getFromCache(pkey1.getRoot().getStatement()), cacher.getFromCache(pkey2.getRoot().getStatement())); + } + + /** + * when : retrieving objects using (first) lazy loading and (second) recursive load directly in the same session + * then : the objects in the sub-graph having the same persistence id should be the same + */ + @Test + public void lazyLoadAndRecursiveLoadTest() { + + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + + PolytomousKey pkey1 = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + // lazy initialising root.statement + KeyStatement st = CdmBase.deproxy(pkey1.getRoot().getStatement(), KeyStatement.class); + st.getLabel(); + + // checking that the root is not null and + // that it exists in the cache and + // that both the original object and the + // cached object are the same + Assert.assertNotNull(pkey1.getRoot().getStatement()); + Assert.assertSame(CdmBase.deproxy(pkey1.getRoot().getStatement(), KeyStatement.class), + cacher.getFromCache(pkey1.getRoot().getStatement(), KeyStatement.class)); + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + + PolytomousKey pkey2 = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + + + Assert.assertSame(CdmBase.deproxy(pkey2.getRoot().getStatement(), KeyStatement.class), cacher.getFromCache(pkey2.getRoot().getStatement(), KeyStatement.class)); + Assert.assertSame(st, CdmBase.deproxy(pkey2.getRoot().getStatement(), KeyStatement.class)); + Assert.assertSame(cacher.getFromCache(st), cacher.getFromCache(pkey2.getRoot().getStatement(), KeyStatement.class)); + } + + + + + + /** + * when : loading an object (first) and then (second) loading a graph the object is contained in, in the same session + * then : the object should be the same + */ + @Test + public void subGraphObjectLoadTest1() { + + // this call will load into the session cache a polytomous key node object + PolytomousKeyNode rootPKNode = CdmBase.deproxy(polytomousKeyNodeService.find(polytomousKeyNodeUuid1),PolytomousKeyNode.class); + + + Assert.assertNotNull(rootPKNode); + Assert.assertSame(rootPKNode, cacher.getFromCache(rootPKNode)); + + PolytomousKeyNode childOfRootPKNode = CdmBase.deproxy(polytomousKeyNodeService.find(polytomousKeyNodeUuid2),PolytomousKeyNode.class); + + + Assert.assertNotNull(childOfRootPKNode); + Assert.assertSame(childOfRootPKNode, cacher.getFromCache(childOfRootPKNode)); + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + + + Assert.assertSame(childOfRootPKNode, cacher.getFromCache(childOfRootPKNode)); + Assert.assertSame(pkey.getRoot().getChildAt(1), childOfRootPKNode); + } + + /** + * when : loading a graph (first) and then (second) loading an object contained in in the graph, in the same session + * then : the object should be the same + */ + @Test + public void subGraphObjectLoadTest2() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + + + // this call will load into the session cache a polytomous key node object + PolytomousKeyNode rootPKNode = CdmBase.deproxy(polytomousKeyNodeService.find(polytomousKeyNodeUuid1),PolytomousKeyNode.class); + + + Assert.assertNotNull(rootPKNode); + Assert.assertSame(rootPKNode, cacher.getFromCache(rootPKNode)); + + PolytomousKeyNode childOfRootPKNode = CdmBase.deproxy(polytomousKeyNodeService.find(polytomousKeyNodeUuid2),PolytomousKeyNode.class); + + + Assert.assertNotNull(childOfRootPKNode); + Assert.assertSame(childOfRootPKNode, cacher.getFromCache(childOfRootPKNode)); + + Assert.assertSame(childOfRootPKNode, cacher.getFromCache(childOfRootPKNode)); + Assert.assertSame(pkey.getRoot().getChildAt(1), childOfRootPKNode); + } + + + /** + * when : loading objects from a collection + * then : the object stored in the cache should be the same + */ + @Test + public void subGraphCollectionLoadTest() { + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH2_INIT_STRATEGY),PolytomousKey.class); + + + PolytomousKeyNode childOfRootPKNode = pkey.getRoot().getChildAt(1); + + Assert.assertSame(childOfRootPKNode, cacher.getFromCache(childOfRootPKNode)); + Assert.assertSame(pkey.getRoot().getChildAt(1), childOfRootPKNode); + + } + + /** + * when : loading a non-lazy collection in a subgraph and loading the collection directly + * then : the object stored in the cache should be the same as the object in the sub-graph collection and + * the object in the directly loaded collection + */ + @Test + public void nonLazyCollectionLoadTest() { + // need to find an example of this + } + + /** + * when : loading objects from a map + * then : the object stored in the cache should be the same + */ + @Test + public void subGraphMapLoadTest() { + + Language english = Language.getLanguageFromUuid(Language.uuidEnglish); + Language hindi = Language.getLanguageFromUuid(UUID.fromString("0a1d9d1d-135d-4575-b172-669b51673c39")); + + + // this call will load into the session cache the graph and update the objects in the sub-graph for a + // polytomous key + // |- root : polytomous key node + // |- question : KeyStatement + // |- statement : KeyStatement + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.load(polytomousKeyUuid, PKEY_DEPTH3_INIT_STRATEGY),PolytomousKey.class); + + + Map labelMap = pkey.getRoot().getStatement().getLabel(); + Set languages = labelMap.keySet(); + Iterator languagesItr = languages.iterator(); + while(languagesItr.hasNext()) { + Language lang = languagesItr.next(); + if(lang.equals(english)) { + Assert.assertSame(lang, english); + } + if(lang.equals(hindi)) { + Assert.assertSame(lang, hindi); + } + Assert.assertSame(lang, cacher.getFromCache(lang)); + } + } + + /** + * when : loading a non-lazy map in a subgraph and loading the map directly + * then : the object stored in the cache should be the same as the object in the sub-graph map and + * the object in the directly loaded map + */ + @Test + public void nonLazyMapLoadTest() { + // need to find an example of this + } + + + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/application/menu/general/NewMenuTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/application/menu/general/NewMenuTest.java index 0dc906526..982e8cee3 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/application/menu/general/NewMenuTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/application/menu/general/NewMenuTest.java @@ -1,16 +1,18 @@ package eu.etaxonomy.taxeditor.application.menu.general; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; import eu.etaxonomy.taxeditor.test.AbstractEditorTest; /** * Open all "General -> New" menus - * + * * @author n.hoffmann * */ +@Ignore public class NewMenuTest extends AbstractEditorTest { @Test @@ -18,42 +20,42 @@ public class NewMenuTest extends AbstractEditorTest { openNewWizardFor("Taxon"); utils.cancel(); } - + @Test public void canOpenNewWizardForReference(){ openNewWizardFor("Reference"); utils.cancel(); } - - + + @Test public void canOpenNewWizardForName(){ openNewWizardFor("Name"); utils.cancel(); } - - + + @Test public void canOpenNewWizardForTeam(){ openNewWizardFor("Team"); utils.cancel(); } - - + + @Test public void canOpenNewWizardForPerson(){ openNewWizardFor("Person"); utils.cancel(); } - + @Test public void canOpenNewWizardForSpecimen(){ openNewWizardFor("Specimen"); utils.cancel(); } - - + + @Test public void canOpenNewWizardForClassification(){ openNewWizardFor("Classification"); diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java new file mode 100644 index 000000000..99396b4c8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java @@ -0,0 +1,184 @@ +/** + * Copyright (C) 2014 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.httpinvoker; + +import java.lang.reflect.Field; +import java.util.Map; + +import net.sf.ehcache.CacheManager; + +import org.apache.log4j.Logger; +import org.junit.BeforeClass; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.context.SecurityContextImpl; +import org.unitils.database.DatabaseUnitils; +import org.unitils.database.annotations.Transactional; +import org.unitils.database.util.TransactionMode; +import org.unitils.spring.annotation.SpringApplicationContext; + +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmDataChangeService; +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.model.name.NomenclaturalCode; +import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager; +import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; +import eu.etaxonomy.taxeditor.remoting.source.CdmPersistentRemoteSource; +import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource; +import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; +import eu.etaxonomy.taxeditor.session.CdmEntitySession; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; + + +/** + * Base class for remoting tests, responsible for + * - starting / stop the cdm server + * - running some basic connection tests + * - setting up the remote configuration. + * + */ +@Transactional(TransactionMode.DISABLED) +@SpringApplicationContext("file:./target/classes/eu/etaxonomy/cdm/testRemotingApplicationContext.xml") +public abstract class BaseRemotingTest extends ThreadedTest { + private static final Logger logger = Logger.getLogger(BaseRemotingTest.class); + + private static ICdmRemoteSource cdmRemoteSource; + private static CdmPersistentRemoteSource remotePersistentSource; + protected static ICdmEntitySessionManager cdmEntitySessionManager; + + @BeforeClass + public static void initializeBaseRemotingTest() { + + DatabaseUnitils.disableConstraints(); + + try { + initializeController(sourceName, + host, + httpPort, + contextPath, + NomenclaturalCode.ICNAFP, + user, + password); + } catch (Exception e) { + e.printStackTrace(); + // Assert.fail("Server failed to start. Reason : " + e.getMessage()); + } + + + } + + public static void emptyAllCachesExceptModelCache() { + CacheManager cm = CacheManager.create(); + String[] cacheNames = CacheManager.create().getCacheNames(); + for(String cacheName : cacheNames) { + if(!cacheName.equals(CdmRemoteCacheManager.CDM_MODEL_CACHE_NAME)) { + cm.removeCache(cacheName); + } + } + } + + + public static void initializeController(String sourceName, String host, int port, String contextPath, NomenclaturalCode ncode, String username, String password) { + + if(CdmApplicationState.getCurrentAppConfig() != null) { + return; + } + cdmRemoteSource = CdmRemoteSource.NewInstance(sourceName, host, port, contextPath, ncode); + CdmApplicationRemoteController remoteApplicationController = + CdmApplicationRemoteController.NewInstance(cdmRemoteSource, + null, + null); + CdmApplicationState.setCurrentAppConfig(remoteApplicationController); + CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher()); + + cdmEntitySessionManager = getRemoteApplicationController().getCdmEntitySessionManager(); + + CdmApplicationState.setCurrentDataChangeService(new CdmDataChangeService()); + + authenticate(username, password); + + } + + protected static void authenticate(String username, String password) { + + //FIXME:Remoting the authentication code should be replaced by a method call which actually + // does the authentication in the editor code so that the 'real' authentication can be tested + SecurityContextHolder.clearContext(); + SecurityContextImpl sc = new SecurityContextImpl(); + Authentication token = new UsernamePasswordAuthenticationToken(username,password); + Authentication authentication = getRemoteApplicationController().getAuthenticationManager().authenticate(token); + authentication = new UsernamePasswordAuthenticationToken(username,password, authentication.getAuthorities()); + sc.setAuthentication(authentication); + + SecurityContextHolder.setContext(sc); + CdmApplicationState.setCurrentSecurityContext(SecurityContextHolder.getContext()); + + } + + + protected static CdmApplicationRemoteController getRemoteApplicationController() { + return (CdmApplicationRemoteController) CdmApplicationState.getCurrentAppConfig(); + } + + protected static ICdmRemoteSource getCdmRemoteSource() { + return cdmRemoteSource; + } + + protected static CdmPersistentRemoteSource getCdmPersistentRemoteSource() { + return remotePersistentSource; + } + + protected static ICdmEntitySessionManager getCdmEntitySessionManager() { + return cdmEntitySessionManager; + } + + + protected static CdmEntitySession getSession(ICdmEntitySessionEnabled sessionOwner) { + Map ownerSessionMap = + (Map) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap"); + return ownerSessionMap.get(sessionOwner); + } + + protected static CdmEntitySession getActiveSession() { + return ((InheritableThreadLocal) getFieldValueViaReflection(cdmEntitySessionManager, "tlActiveSession")).get(); + } + + protected static CdmTransientEntityCacher getCacher(ICdmEntitySessionEnabled sessionOwner) { + return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher"); + } + + + protected static Object getFieldValueViaReflection(Object object, String fieldName) { + Class clazz = object.getClass(); + try { + Field field = clazz.getDeclaredField(fieldName); + field.setAccessible(true); + return field.get(object); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (SecurityException e) { + e.printStackTrace(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + + protected static void authenticateDefaultUser() { + authenticate(user, password); + } + + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmRemoteSourceTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmRemoteSourceTest.java new file mode 100644 index 000000000..945d5c648 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmRemoteSourceTest.java @@ -0,0 +1,99 @@ +/** +* Copyright (C) 2014 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.httpinvoker; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.Test; +import org.springframework.remoting.RemoteAccessException; + +import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.model.name.NomenclaturalCode; +import eu.etaxonomy.taxeditor.lazyloading.RemotePersistentCollectionTest; +import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource; + +public class CdmRemoteSourceTest extends BaseRemotingTest { + private static final Logger logger = Logger.getLogger(RemotePersistentCollectionTest.class); + + + @Test + public void whenConnectingToInactiveServerThenFailToConnect() { + + // check if non-active server throws the right exception + CdmRemoteSource inactiveCrs = CdmRemoteSource.NewInstance(sourceName, + host, + 808080, + contextPath, + NomenclaturalCode.ICNAFP); + try { + String dbSchemaVersion = inactiveCrs.getDbSchemaVersion(); + Assert.fail("getDbSchemaVersion() on inactive cdm server should have thrown RemoteAccessException"); + } catch(CdmSourceException cse) { + Assert.fail("getDbSchemaVersion() on inactive cdm server should have thrown RemoteAccessException and not CdmSourceException"); + } catch(RemoteAccessException rae){ + + } + + try { + inactiveCrs.isDbEmpty(); + Assert.fail("isDbEmpty() on inactive cdm server should have thrown RemoteAccessException"); + } catch(CdmSourceException cse) { + Assert.fail("isDbEmpty() on inactive cdm server should have thrown RemoteAccessException and not CdmSourceException"); + } catch(RemoteAccessException rae){ + + } + + try { + inactiveCrs.checkConnection(); + Assert.fail("checkConnection() on inactive cdm server should have thrown RemoteAccessException"); + } catch(CdmSourceException cse) { + Assert.fail("checkConnection() on inactive cdm server should have thrown RemoteAccessException and not CdmSourceException"); + } catch(RemoteAccessException rae){ + + } + + } + + @Test + public void whenConnectingToAnActiveServerThenConnectSuccessfully() { + // check if active server throws the right exception + CdmRemoteSource activeCrs = CdmRemoteSource.NewInstance(sourceName, + host, + httpPort, + contextPath, + NomenclaturalCode.ICNAFP); + String dbSchemaVersion = ""; + try { + dbSchemaVersion = activeCrs.getDbSchemaVersion(); + } catch (CdmSourceException e) { + Assert.fail("getDbSchemaVersion() on active cdm server should not have thrown CdmSourceException"); + } + logger.info("dbSchemaVersion is " + dbSchemaVersion); + + + boolean isDbEmpty = false; + try { + isDbEmpty = activeCrs.isDbEmpty(); + } catch (CdmSourceException e) { + Assert.fail("isDbEmpty() on active cdm server should not have thrown CdmSourceException"); + } + Assert.assertFalse(isDbEmpty); + + + boolean check = true; + try { + isDbEmpty = activeCrs.checkConnection(); + } catch (CdmSourceException e) { + Assert.fail("checkConnection() on active cdm server should not have thrown CdmSourceException"); + } + Assert.assertTrue(check); + + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTest.java new file mode 100644 index 000000000..e78d31d48 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTest.java @@ -0,0 +1,66 @@ +// $Id$ +/** +* Copyright (C) 2014 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.httpinvoker; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.junit.Assert; +import org.junit.Test; +import org.osgi.framework.Bundle; + +import eu.etaxonomy.taxeditor.remoting.server.CDMServerUtils; +import eu.etaxonomy.taxeditor.webapp.CDMEmbeddedServerException; +import eu.etaxonomy.taxeditor.webapp.CDMServer; +import eu.etaxonomy.taxeditor.webapp.ICDMServerError; + + +/** + * @author cmathew + * @date 6 Oct 2014 + * + */ +public class CdmServerTest extends TestConfig { + private static final Logger logger = Logger.getLogger(CdmServerTest.class); + + + + @Test + public void generateConfigFile() throws IOException { + String mgdServerConfigFileName = "test.mgd.datasources.xml"; + String config = CDMServerUtils.convertEditorToServerConfig(); + CDMServerUtils.writeManagedServerConfig(config, mgdServerConfigFileName); + } + + @Test + public void manageCdmServer() throws IOException, URISyntaxException, CDMEmbeddedServerException { + Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.test"); + URL mgdDatasourcesConfigURL = bundle.getEntry("src/test/resources/.cdmLibrary/writableResources/mgd.datasources.xml"); + File mgdDatasourcesConfigFile = new File(FileLocator.resolve(mgdDatasourcesConfigURL).toURI()); + CDMServer cdmServer = new CDMServer("cdmTest", mgdDatasourcesConfigFile); + cdmServer.start(new ICDMServerError() { + @Override + public void handleError(Throwable t) { + Assert.fail("Error starting server. Reason : " + t.getMessage()); + } + }); + try { + cdmServer.stop(); + } catch (Exception e) { + e.printStackTrace(); + Assert.fail("Error stopping server. Reason : " + e.getMessage()); + } + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/HttpInvokerServicesTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/HttpInvokerServicesTest.java new file mode 100644 index 000000000..f1a6c57a0 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/HttpInvokerServicesTest.java @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2014 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.httpinvoker; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.springframework.remoting.RemoteAccessException; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.ITestService; +import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.cdm.model.description.PolytomousKey; + +/** + * Class to test the HttpInvoker services exposed by the CDM Sever + * + */ +public class HttpInvokerServicesTest extends BaseRemotingTest { + private static final Logger logger = Logger.getLogger(HttpInvokerServicesTest.class); + + ITestService testService = getRemoteApplicationController().getTestService(); + + @Test + public void whenCallingMethodsOnRemoteServicesThenSucceed() { + try { + + //getRemoteApplicationController().getDatabaseService(); + String dbSchemaVersion = getRemoteApplicationController().getDatabaseService().getDbSchemaVersion(); + logger.info("dbSchemaVersion is " + dbSchemaVersion); + + + } catch (CdmSourceException e) { + Assert.fail("pinging database service on active cdm server should not have thrown CdmSourceException"); + } + + getRemoteApplicationController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null); + + } + + @Ignore + @Test + public void whenCallingMethodsOnRemoteServicesThenFailIfNotAuthenticated() { + + SecurityContext context = SecurityContextHolder.getContext(); + + CdmApplicationState.setCurrentSecurityContext(null); + try { + getRemoteApplicationController().getPolytomousKeyService().list(PolytomousKey.class, null, null, null, null); + Assert.fail("service call should fail as it is not authenticated"); + }catch (RemoteAccessException rae) { + + } + + CdmApplicationState.setCurrentSecurityContext(context); + + } + + // should be kept at ignore and only used for manual testing + // otherwise tests will take too much time + @Ignore + @Test + public void testDisableReadTimeout() throws InterruptedException { + testService.waitFor((long) 120000.0); + } + + + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/RemotingSessionAwareTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/RemotingSessionAwareTest.java new file mode 100644 index 000000000..1949ce3b8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/RemotingSessionAwareTest.java @@ -0,0 +1,77 @@ +// $Id$ +/** +* Copyright (C) 2015 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.httpinvoker; + +import org.apache.log4j.Logger; +import org.junit.After; +import org.junit.Before; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.IUserService; +import eu.etaxonomy.cdm.model.common.User; +import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; +import eu.etaxonomy.taxeditor.session.ICdmEntitySession; +import eu.etaxonomy.taxeditor.session.MockSessionOwner; + +/** + * @author cmathew + * @date 12 Jun 2015 + * + */ +public abstract class RemotingSessionAwareTest extends BaseRemotingTest { + + private static final Logger logger = Logger.getLogger(RemotingSessionAwareTest.class); + + protected CdmTransientEntityCacher cacher; + protected MockSessionOwner sessionOwner; + + private static String extraUsername = "Someone"; + private static String extraPassword = "Password"; + + + private IUserService userService = getRemoteApplicationController().getUserService(); + + @Before + public void initializeSession() { + + sessionOwner = new MockSessionOwner(); + logger.info("created mock session owner : " + sessionOwner); + ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true); + CdmApplicationState.getCurrentDataChangeService().register(sessionOwner); + sessionOwner.setCdmEntitySession(cdmEntitySession); + cacher = getCacher(sessionOwner); + + UserDetails extraUser = null; + + try { + extraUser = userService.loadUserByUsername(extraUsername); + } catch (UsernameNotFoundException unfe) { + User user = User.NewInstance(extraUsername, extraPassword); + userService.createUser(user); + } + + + } + + @After + public void postSessionAwareTest() { + sessionOwner.dispose(); + CdmApplicationState.getCurrentDataChangeService().unregister(sessionOwner); + logger.info("disposed of mock session owner : " + sessionOwner); + } + + + protected static void authenticateExtraUser() { + authenticate(extraUsername, extraPassword); + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestConfig.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestConfig.java new file mode 100644 index 000000000..4f6598de4 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestConfig.java @@ -0,0 +1,96 @@ +// $Id$ +/** +* Copyright (C) 2015 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.httpinvoker; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.Properties; + +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.junit.BeforeClass; +import org.osgi.framework.Bundle; +import org.unitils.UnitilsJUnit4; + +/** + * @author cmathew + * @date 11 Nov 2015 + * + */ +public abstract class TestConfig extends UnitilsJUnit4 { + + private static final Logger logger = Logger.getLogger(TestConfig.class); + + private final static String DEFAULT_USER = "admin"; + private final static String DEFAULT_PASSWORD = "00000"; + private final static int DEFAULT_HTTP_PORT = 9090; + private final static String DEFAULT_CONTEXT_PATH = ""; + private final static String DEFAULT_SOURCE_NAME = "default"; + private final static String DEFAULT_HOST = "localhost"; + + private static String userHomeKey = "user.home"; + + protected static String user = DEFAULT_USER; + protected static String password = DEFAULT_PASSWORD; + protected static int httpPort = DEFAULT_HTTP_PORT; + protected static String contextPath = DEFAULT_CONTEXT_PATH; + protected static String sourceName = DEFAULT_SOURCE_NAME; + protected static String host = DEFAULT_HOST; + + @BeforeClass + public static void initializeTestConfig() { + try { + String userHomeDirPath; + Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.test"); + + URL userHomeDirURL = bundle.getEntry("src/test/resources"); + File userHomeDir = new File(FileLocator.resolve(userHomeDirURL).toURI()); + userHomeDirPath = userHomeDir.getAbsolutePath(); + + URL serverPropertiesURL = bundle.getEntry("src/test/resources/server.properties"); + File serverPropertiesFile = new File(FileLocator.resolve(serverPropertiesURL).toURI()); + InputStream inputStream = new FileInputStream(serverPropertiesFile); + + Properties prop = new Properties(); + + prop.load(inputStream); + inputStream.close(); + + + logger.warn("Setting user.home to " + userHomeDirPath); + System.setProperty(userHomeKey, userHomeDirPath); + + + if(prop.getProperty("user") != null) { + user = prop.getProperty("user"); + } + + if(prop.getProperty("password") != null) { + password = prop.getProperty("password"); + } + + if(prop.getProperty("httpPort") != null) { + httpPort = Integer.valueOf(prop.getProperty("httpPort")); + } + + if(prop.getProperty("contextPath") != null) { + contextPath = prop.getProperty("contextPath"); + } + + } catch (Exception e) { + e.printStackTrace(); + // Assert.fail("Server failed to start. Reason : " + e.getMessage()); + } + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestThread.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestThread.java new file mode 100644 index 000000000..b70f80293 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/TestThread.java @@ -0,0 +1,60 @@ +// $Id$ +/** + * Copyright (C) 2015 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.httpinvoker; + +/** + * @author cmathew + * @date 16 Oct 2015 + * + */ +public abstract class TestThread extends Thread { + Throwable throwable; + boolean isBlocked = false; + + public TestThread() { + + } + + public TestThread(boolean blocking) { + isBlocked = blocking; + } + /** + * @return the throwable + */ + public Throwable getThrowable() { + return throwable; + } + + /** + * @param throwable the throwable to set + */ + public void setThrowable(Throwable throwable) { + this.throwable = throwable; + } + + public void unblock() { + isBlocked = false; + } + + @Override + public final void run() { + try { + while(isBlocked) {}; + doRun(); + } catch(Exception ex) { + throwable = ex; + } catch(AssertionError ae) { + throwable = ae; + } + } + + public abstract void doRun() throws Exception, AssertionError; + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/ThreadedTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/ThreadedTest.java new file mode 100644 index 000000000..43e99701f --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/ThreadedTest.java @@ -0,0 +1,49 @@ +// $Id$ +/** +* Copyright (C) 2015 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.httpinvoker; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.After; + +/** + * @author cmathew + * @date 16 Oct 2015 + * + */ +public abstract class ThreadedTest extends TestConfig { + + private Set threadPool = new HashSet(); + + protected void invokeThread(TestThread thread) { + threadPool.add(thread); + thread.start(); + } + + @After + public void cleanup() throws Throwable { + try { + for(TestThread thread : threadPool) { + if(thread.isAlive()) { + thread.join(); + } + } + + for(TestThread thread : threadPool) { + if(thread.getThrowable() != null) { + throw thread.getThrowable(); + } + } + } finally { + threadPool.clear(); + } + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.java new file mode 100644 index 000000000..ee948eef5 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.java @@ -0,0 +1,215 @@ +/** + * Copyright (C) 2014 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.lazyloading; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.agent.Person; +import eu.etaxonomy.cdm.model.agent.Team; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.name.BotanicalName; +import eu.etaxonomy.cdm.model.name.NonViralName; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Classification; +import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; + + + + +/** + * Class to test the {@link CdmApplicationRemoteController} + * + */ +// FIXME:Remoting need to create a proper dataset for this test +// Could be combined with RemotePersistentCollectionTest +@Ignore +@DataSet +public class AbstractLazyInitializerTest extends BaseRemotingTest { + private static final Logger logger = Logger.getLogger(AbstractLazyInitializerTest.class); + + private static IClassificationService classificationService; + private static ITaxonService taxonService; + + private static List taxonNodes; + + private final UUID taxonUuid1 = UUID.fromString("8217ef77-2ab1-4318-bd67-ccd0cdef07c4"); + private final UUID taxonUuid2 = UUID.fromString("ef96fafa-7750-4141-b31b-1ad1daab3e76"); + + + @BeforeClass + public static void initializeRemoteLazyLoading() { + + taxonService = getRemoteApplicationController().getTaxonService(); + classificationService= getRemoteApplicationController().getClassificationService(); + List classifications = classificationService.listClassifications(1,0,null,null); + Assert.assertFalse(classifications.isEmpty()); + + Classification classification = classifications.get(0); + Assert.assertNotNull(classification); + taxonNodes = classificationService.getAllNodes(); + Assert.assertFalse(taxonNodes.isEmpty()); + + } + + + + @Test + public void testCDMEntityGet() { + //ITaxonService taxonService = getRemoteApplicationController().getTaxonService(); + Iterator taxonNodeItr = taxonNodes.iterator(); + int maxcount = 30; + int count = 0; + while(taxonNodeItr.hasNext() && count <= maxcount) { + TaxonNode taxonNode = taxonNodeItr.next(); + Assert.assertNotNull(taxonNode); + + Taxon taxon = taxonNode.getTaxon(); + Assert.assertNotNull(taxon); + + String taxonTitle = taxon.getTitleCache(); + logger.info("Taxon : " + taxonTitle); + + TaxonNameBase name = taxon.getName(); + Assert.assertNotNull(name); + + String nameTitle = name.getTitleCache(); + logger.info("Taxon Name : " + nameTitle); + + count++; + } + } + + @Test + public void taxonReadTest() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + } + + + @Test + public void testCDMEntitySave() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + String oldTitleCache = taxon.getTitleCache(); + + System.out.println("Taxon title : " + oldTitleCache); + + taxon.setTitleCache(oldTitleCache + ":updated", true); + taxonService.merge(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + System.out.println("New Taxon Title : " + taxonNew.getTitleCache()); + + Assert.assertTrue("Title caches should not be equal",oldTitleCache.equals(taxonNew.getTitleCache())); + + + taxonNew.setTitleCache(oldTitleCache, true); + taxonService.merge(taxonNew); + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + System.out.println("Old Taxon Title : " + taxonOld.getTitleCache()); + + Assert.assertEquals("Title caches should be equal",oldTitleCache,taxonOld.getTitleCache()); + + } + + + @Test + public void testCDMEntitySaveLazyNew() { + Team combAuthor = Team.NewInstance(); + combAuthor.addTeamMember(Person.NewTitledInstance("test member")); + BotanicalName name = BotanicalName.NewInstance(null, "Test1", null, null, null, null, null, null, null); + name.setCombinationAuthorship(combAuthor); + Taxon tax1 = Taxon.NewInstance(name, null); + UUID taxonUuid1 = taxonService.save(tax1).getUuid(); + + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + NonViralName nvn = CdmBase.deproxy(taxon.getName(),NonViralName.class); + String oldTitleCache = nvn.getTitleCache(); + logger.info("Taxon Name Title : " + oldTitleCache); + nvn.setTitleCache(oldTitleCache + ":updated",false); + taxonService.update(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + NonViralName nvnNew = CdmBase.deproxy(taxon.getName(),NonViralName.class); + logger.info("New Taxon Name Title : " + nvnNew.getTitleCache()); + + Assert.assertTrue("Title caches should not be equal",oldTitleCache.equals(nvnNew.getTitleCache())); + + nvnNew.setTitleCache(oldTitleCache, true); + taxonService.update(taxon); + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + NonViralName nvnOld = CdmBase.deproxy(taxon.getName(),NonViralName.class); + logger.info("Old Taxon Name Title : " + nvnNew.getTitleCache()); + + Assert.assertEquals("Title caches should be equal",oldTitleCache,nvnOld.getTitleCache()); + } + + @Ignore + @Test + public void testCDMEntitySaveCollection() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + Set synRelations = taxon.getSynonymRelations(); + Set relToTitles = new HashSet(); + Iterator srItr = synRelations.iterator(); + while(srItr.hasNext()) { + SynonymRelationship sr = srItr.next(); + System.out.println("Synonym Title Cache : " + sr.getSynonym().getTitleCache()); + relToTitles.add(sr.getSynonym().getTitleCache()); + sr.getSynonym().setTitleCache(sr.getSynonym().getTitleCache() + ":updated"); + + } + taxonService.merge(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + Set synRelationsNew = taxonNew.getSynonymRelations(); + + Iterator srItrNew = synRelationsNew.iterator(); + Iterator relToTitlesItr = relToTitles.iterator(); + while(srItrNew.hasNext() && relToTitlesItr.hasNext()) { + SynonymRelationship srNew = srItrNew.next(); + String relToTitle = relToTitlesItr.next(); + System.out.println("New Synonym Title Cache: " + srNew.getSynonym().getTitleCache()); + Assert.assertTrue("Synonym Title caches should not be equal", srNew.getSynonym().getTitleCache().equals(relToTitle)); + srNew.getSynonym().setTitleCache(relToTitle); + } + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + + Set synRelationsOld = taxonNew.getSynonymRelations(); + Iterator srItrOld = synRelationsOld.iterator(); + relToTitlesItr = relToTitles.iterator(); + while(srItrOld.hasNext() && relToTitlesItr.hasNext()) { + SynonymRelationship srOld = srItrOld.next(); + String relToTitle = relToTitlesItr.next(); + System.out.println("New Synonym Title Cache: " + srOld.getSynonym().getTitleCache()); + Assert.assertEquals("Synonym Title caches should be equal", srOld.getSynonym().getTitleCache(), relToTitle); + + } + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmServiceCacherTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmServiceCacherTest.java new file mode 100644 index 000000000..b81692e27 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmServiceCacherTest.java @@ -0,0 +1,32 @@ +package eu.etaxonomy.taxeditor.lazyloading; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; + + +public class CdmServiceCacherTest extends RemotingSessionAwareTest { + private static final Logger logger = Logger.getLogger(CdmServiceCacherTest.class); + + + private static CdmServiceCacher cdmServiceCacher = CdmApplicationState.getCdmServiceCacher(); + + @Test + public void testLanguageCache() { + Language defaultLanguage = Language.getDefaultLanguage(); + + Language defaultLanguageInCache = (Language)cdmServiceCacher.getFromCache(defaultLanguage.getUuid()); + Assert.assertEquals("Loaded Language Term should match Language Term in Cache",defaultLanguage,defaultLanguageInCache); + + Language language = Language.getLanguageFromUuid(Language.uuidFrench); + Language languageInCache = (Language)cdmServiceCacher.getFromCache(language.getUuid()); + Assert.assertEquals("Loaded Language Term should match Language Term in Cache",language,languageInCache); + + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/PropertyPathsTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/PropertyPathsTest.java new file mode 100644 index 000000000..6cdb5c326 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/PropertyPathsTest.java @@ -0,0 +1,78 @@ +// $Id$ +/** +* Copyright (C) 2015 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.lazyloading; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.junit.Ignore; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Synonym; +import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonBase; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * This test class is primarily for performance testing. + * It should be used to make read-only calls to the target cdm-server. + * + * @author cmathew + * @date 26 Aug 2015 + * + */ +//FIXME:Remoting ignoring until we can target integration servers +@Ignore +public class PropertyPathsTest extends BaseRemotingTest { + + @Test + public void taxonLoadTest() { + // load taxon Crepis from cichorieae + UUID taxonBaseUuid = UUID.fromString("d0ae2121-1c32-4737-8c49-f871d429fd90"); + List taxonBasePropertyPaths = Arrays.asList(new String[] { + "synonymRelations.synonym.name.status.type", + "name.homotypicalGroup.typifiedNames.taxonBases.synonymRelations.relatedFrom.name.status" + }); + TaxonBase taxonBase = CdmStore.getService(ITaxonService.class).load(taxonBaseUuid, taxonBasePropertyPaths); + Taxon taxon = CdmBase.deproxy(taxonBase, Taxon.class); + Set synonymRelations = taxon.getSynonymRelations(); + for(SynonymRelationship rel : synonymRelations) { + rel.getSynonym().getName().getStatus().size(); + } + Set typifiedNames = taxon.getName().getHomotypicalGroup().getTypifiedNames(); + for(TaxonNameBase name : typifiedNames) { + Set taxonBases = name.getTaxonBases(); + for(TaxonBase tb : taxonBases) { + if(tb instanceof Synonym) { + Synonym syn = CdmBase.deproxy(tb, Synonym.class); + Set rels = syn.getSynonymRelations(); + for(SynonymRelationship rel : rels) { + rel.getSynonym().getName().getStatus().size(); + } + } + if(tb instanceof Taxon) { + Taxon syn = CdmBase.deproxy(tb, Taxon.class); + Set rels = syn.getSynonymRelations(); + for(SynonymRelationship rel : rels) { + rel.getSynonym().getName().getStatus().size(); + } + } + } + } + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java new file mode 100644 index 000000000..5a6368050 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java @@ -0,0 +1,276 @@ +/** + * Copyright (C) 2014 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.lazyloading; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.agent.Person; +import eu.etaxonomy.cdm.model.agent.Team; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.name.BotanicalName; +import eu.etaxonomy.cdm.model.name.NonViralName; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.SynonymRelationship; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; + + + +/** + * Test class which tests remoting for persistent cdm entities. + * + * FIXME:Remoting saving tests are ignored until the merge development is underway + * @author c.mathew + * + */ +//FIXME:Remoting need to create a proper dataset for this test +//Could be combined with AbstractLazyInitializerTest +@Ignore +public class RemoteLazyLoadingTest extends BaseRemotingTest { + + private static final Logger logger = Logger.getLogger(RemoteLazyLoadingTest.class); + + private static IClassificationService classificationService; + private static ITaxonService taxonService; + + private static List taxonNodes; + + private final UUID taxonUuid1 = UUID.fromString("8217ef77-2ab1-4318-bd67-ccd0cdef07c4"); + private final UUID taxonUuid2 = UUID.fromString("ef96fafa-7750-4141-b31b-1ad1daab3e76"); + + + @BeforeClass + public static void initializeRemoteLazyLoading() { + taxonService = getRemoteApplicationController().getTaxonService(); + + classificationService= getRemoteApplicationController().getClassificationService(); + //List classifications = classificationService.listClassifications(1,0,null,null); +// Assert.assertFalse(classifications.isEmpty()); +// +// Classification classification = classifications.get(0); +// Assert.assertNotNull(classification); + taxonNodes = classificationService.getAllNodes(); + Assert.assertFalse(taxonNodes.isEmpty()); + + } + + + + @Test + public void testCDMEntityGet() { + Iterator taxonNodeItr = taxonNodes.iterator(); + int maxcount = 30; + int count = 0; + while(taxonNodeItr.hasNext() && count <= maxcount) { + TaxonNode taxonNode = taxonNodeItr.next(); + Assert.assertNotNull(taxonNode); + + Taxon taxon = taxonNode.getTaxon(); + Assert.assertNotNull(taxon); + + String taxonTitle = taxon.getTitleCache(); + logger.info("Taxon : " + taxonTitle); + + TaxonNameBase name = taxon.getName(); + Assert.assertNotNull(name); + + String nameTitle = name.getTitleCache(); + logger.info("Taxon Name : " + nameTitle); + + count++; + } + + + } + + @Test + public void test() { + + } + + @Test + public void testCDMEntitySaveEager() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + String oldTitleCache = taxon.getTitleCache(); + + System.out.println("Taxon title : " + oldTitleCache); + + taxon.setTitleCache(oldTitleCache + ":updated"); + taxonService.merge(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + System.out.println("New Taxon Title : " + taxonNew.getTitleCache()); + + Assert.assertTrue("Title caches should not be equal",oldTitleCache.equals(taxonNew.getTitleCache())); + + taxonNew.setTitleCache(oldTitleCache); + taxonService.merge(taxonNew); + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + System.out.println("Old Taxon Title : " + taxonOld.getTitleCache()); + + Assert.assertEquals("Title caches should be equal",oldTitleCache,taxonOld.getTitleCache()); + + } + + + @Test + public void testCDMEntityUpdate() { + + Team combAuthor = Team.NewInstance(); + combAuthor.addTeamMember(Person.NewTitledInstance("test member")); + BotanicalName name = BotanicalName.NewInstance(null, "Test1", null, null, null, null, null, null, null); + name.setCombinationAuthorship(combAuthor); + Taxon taxon = Taxon.NewInstance(name, null); + UUID taxonUuid = taxonService.save(taxon).getUuid(); + + // Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + // NonViralName nvn = CdmBase.deproxy(taxon.getName(),NonViralName.class); + // String oldTitleCache = nvn.getTitleCache(); + // System.out.println("Taxon Name Title : " + oldTitleCache); + // nvn.setTitleCache(oldTitleCache + ":updated", true); + // + // taxon.setTitleCache(oldTitleCache + ":updated",true); + // try { + // taxonService.update(taxon); + // } catch (LazyInitializationException lie) { + // lie.printStackTrace(); + // } + + List TAXON_INIT_STRATEGY = Arrays.asList(new String[] { + "name" + }); + Taxon taxonNew = (Taxon)taxonService.findTaxonByUuid(taxonUuid,TAXON_INIT_STRATEGY); + NonViralName nvn = CdmBase.deproxy(taxonNew.getName(),NonViralName.class); + Team team = CdmBase.deproxy(nvn.getCombinationAuthorship(),Team.class); + String oldTitleCache = nvn.getTitleCache(); + System.out.println("Taxon Name Title : " + oldTitleCache); + nvn.setTitleCache(oldTitleCache + ":updated", true); + taxonService.update(taxonNew); + + } + + + @Test + public void testCDMEntitySaveLazy() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + NonViralName nvn = CdmBase.deproxy(taxon.getName(),NonViralName.class); + String oldTitleCache = nvn.getTitleCache(); + System.out.println("Taxon Name Title : " + oldTitleCache); + nvn.setTitleCache(oldTitleCache + ":updated", true); + taxonService.update(taxon); + + // Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + // NonViralName nvnNew = CdmBase.deproxy(taxon.getName(),NonViralName.class); + // System.out.println("New Taxon Name Title : " + nvnNew.getTitleCache()); + // + // Assert.assertNotEquals("Title caches should not be equal",oldTitleCache,nvnNew.getTitleCache()); + // + // nvnNew.setTitleCache(oldTitleCache, true); + // taxonService.update(taxon); + // + // Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + // NonViralName nvnOld = CdmBase.deproxy(taxon.getName(),NonViralName.class); + // System.out.println("Old Taxon Name Title : " + nvnNew.getTitleCache()); + // + // Assert.assertEquals("Title caches should be equal",oldTitleCache,nvnOld.getTitleCache()); + } + + @Test + public void testCDMEntitySaveLazyNew() { + Team combAuthor = Team.NewInstance(); + combAuthor.addTeamMember(Person.NewTitledInstance("test member")); + BotanicalName name = BotanicalName.NewInstance(null, "Test1", null, null, null, null, null, null, null); + name.setCombinationAuthorship(combAuthor); + Taxon tax1 = Taxon.NewInstance(name, null); + UUID taxonUuid1 = taxonService.save(tax1).getUuid(); + + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + NonViralName nvn = CdmBase.deproxy(taxon.getName(),NonViralName.class); + String oldTitleCache = nvn.getTitleCache(); + logger.info("Taxon Name Title : " + oldTitleCache); + nvn.setTitleCache(oldTitleCache + ":updated",false); + taxonService.update(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + NonViralName nvnNew = CdmBase.deproxy(taxon.getName(),NonViralName.class); + logger.info("New Taxon Name Title : " + nvnNew.getTitleCache()); + + Assert.assertTrue("Title caches should not be equal",oldTitleCache.equals(nvnNew.getTitleCache())); + + nvnNew.setTitleCache(oldTitleCache, true); + taxonService.update(taxon); + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + NonViralName nvnOld = CdmBase.deproxy(taxon.getName(),NonViralName.class); + logger.info("Old Taxon Name Title : " + nvnNew.getTitleCache()); + + Assert.assertEquals("Title caches should be equal",oldTitleCache,nvnOld.getTitleCache()); + } + @Ignore + @Test + public void testCDMEntitySaveCollection() { + Taxon taxon = (Taxon)taxonService.find(taxonUuid1); + + Set synRelations = taxon.getSynonymRelations(); + Set relToTitles = new HashSet(); + Iterator srItr = synRelations.iterator(); + while(srItr.hasNext()) { + SynonymRelationship sr = srItr.next(); + System.out.println("Synonym Title Cache : " + sr.getSynonym().getTitleCache()); + relToTitles.add(sr.getSynonym().getTitleCache()); + sr.getSynonym().setTitleCache(sr.getSynonym().getTitleCache() + ":updated"); + + } + taxonService.merge(taxon); + + Taxon taxonNew = (Taxon)taxonService.find(taxonUuid1); + Set synRelationsNew = taxonNew.getSynonymRelations(); + + Iterator srItrNew = synRelationsNew.iterator(); + Iterator relToTitlesItr = relToTitles.iterator(); + while(srItrNew.hasNext() && relToTitlesItr.hasNext()) { + SynonymRelationship srNew = srItrNew.next(); + String relToTitle = relToTitlesItr.next(); + System.out.println("New Synonym Title Cache: " + srNew.getSynonym().getTitleCache()); + Assert.assertTrue("Synonym Title caches should not be equal", srNew.getSynonym().getTitleCache().equals(relToTitle)); + srNew.getSynonym().setTitleCache(relToTitle); + } + + Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1); + + Set synRelationsOld = taxonNew.getSynonymRelations(); + Iterator srItrOld = synRelationsOld.iterator(); + relToTitlesItr = relToTitles.iterator(); + while(srItrOld.hasNext() && relToTitlesItr.hasNext()) { + SynonymRelationship srOld = srItrOld.next(); + String relToTitle = relToTitlesItr.next(); + System.out.println("New Synonym Title Cache: " + srOld.getSynonym().getTitleCache()); + Assert.assertEquals("Synonym Title caches should be equal", srOld.getSynonym().getTitleCache(), relToTitle); + + } + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemotePersistentCollectionTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemotePersistentCollectionTest.java new file mode 100644 index 000000000..d1871f099 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemotePersistentCollectionTest.java @@ -0,0 +1,224 @@ +/** +* Copyright (C) 2014 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.lazyloading; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ICommonService; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.LanguageString; +import eu.etaxonomy.cdm.model.description.DescriptionElementBase; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.description.TextData; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; + +/** + * Test class which tests remoting for persistent collections. + * + * @author c.mathew + * @created 13.03.2014 + */ +//FIXME:Remoting need to create a proper dataset for this test +//Could be combined with AbstractLazyInitializerTest +@Ignore +public class RemotePersistentCollectionTest extends BaseRemotingTest { + private static final Logger logger = Logger.getLogger(RemotePersistentCollectionTest.class); + + private static IClassificationService classificationService; + private static ICommonService commonService; + + @BeforeClass + public static void initializeServices() { + classificationService = getRemoteApplicationController().getClassificationService(); + commonService = getRemoteApplicationController().getCommonService(); + } + + /** + * Test method which checks remoting for persistent lists. + * + */ + @Test + public void persistentListTest() { + + List taxonNodes = classificationService.getAllNodes(); + int size = taxonNodes.size(); + logger.debug("classificationService.getAllNodes() size : " + size); + TaxonNode taxonNode = null; + if(size > 0) { + Assert.assertFalse(taxonNodes.isEmpty()); + + taxonNode = taxonNodes.get(0); + Assert.assertNotNull(taxonNode); + Assert.assertTrue(taxonNodes.contains(taxonNode)); + + // get the list of child nodes, which will give a + // proxy list which is not yet initialised + List childNodes = taxonNode.getChildNodes(); + // this size call will first initialise the list locally by internally + // calling the ICommonService.initializeCollection method and then + // call size on the initialised list + int childCount = childNodes.size(); + + // this size call will initialise the list remotely and only return the + // size of the list + int remoteChildCount = commonService.size(taxonNode.getUuid(), "childNodes"); + Assert.assertEquals(childCount, remoteChildCount); + + String firstNodeTaxonTitle = taxonNode.getTaxon().getTitleCache(); + Assert.assertNotNull(firstNodeTaxonTitle); + + if(childCount > 0) { + Assert.assertFalse(childNodes.isEmpty()); + // this get call will use the already initialised list to get the + // 0th element + TaxonNode localTaxonNode = childNodes.get(0); + + // this get call will initialise the list remotely and only return the + // 0th element from the list + TaxonNode remoteTaxonNode = (TaxonNode)commonService.get(taxonNode.getUuid(), "childNodes",0); + + // the locally and remotely retrieved taxon node should exist in the + // (local and remote) child nodes list, should be not-null and should be equal to each other + Assert.assertTrue(taxonNode.getChildNodes().contains(localTaxonNode)); + Assert.assertTrue(taxonNode.getChildNodes().contains(remoteTaxonNode)); + Assert.assertTrue(commonService.contains(taxonNode.getUuid(), "childNodes", localTaxonNode)); + Assert.assertTrue(commonService.contains(taxonNode.getUuid(), "childNodes", remoteTaxonNode)); + Assert.assertNotNull(remoteTaxonNode); + Assert.assertNotNull(localTaxonNode); + Assert.assertEquals(remoteTaxonNode,localTaxonNode); + } + } + } + +// @Test +// public void persistentSetTest() { +// List classifications = classificationService.listClassifications(1,0,null,null); +// int size = classifications.size(); +// if(size > 0) { +// Assert.assertFalse(classifications.isEmpty()); +// +// Classification classification = classifications.get(0); +// Assert.assertNotNull(classification); +// Assert.assertTrue(classifications.contains(classification)); +// +// TaxonNode rootTaxonNode = classification.getRootNode(); +// // get the list of child nodes, which will give a +// // proxy list which is not yet initialised +// List childNodes = rootTaxonNode.getChildNodes(); +// +// // this size call will initialise the list locally by internally +// // calling the ICommonService.initializeCollection method +// int childCount = childNodes.size(); +// +// if(childCount > 0) { +// Assert.assertFalse(childNodes.isEmpty()); +// +// // this get call will use the already initialised list to get the +// // 0th element +// Taxon localTaxon = childNodes.get(0).getTaxon(); +// Assert.assertNotNull(localTaxon); +// +// TaxonNameBase taxonName = localTaxon.getName(); +// Assert.assertNotNull(taxonName); +// +// // get the list of taxa, which will give a +// // proxy set which is not yet initialised +// Set taxa = taxonName.getTaxonBases(); +// +// // this size call will initialise the list locally by internally +// // calling the ICommonService.initializeCollection method +// int taxaCount = taxa.size(); +// Assert.assertNotEquals(taxaCount,-1); +// +// if(taxaCount > 0) { +// Assert.assertFalse(taxa.isEmpty()); +// // the locally retrieved taxon should exist in the +// // (local and remote) taxon list and should be not-null +// Assert.assertTrue(taxa.contains(localTaxon)); +// Assert.assertNotNull(localTaxon); +// Assert.assertTrue(commonService.contains((PersistentCollection)taxa, localTaxon)); +// } +// } +// } +// } + + @Test + public void persistentMapTest() { + List taxonNodes = classificationService.getAllNodes(); + // calling iterator will initialise the collection + Iterator taxonNodesItr = taxonNodes.iterator(); + while(taxonNodesItr.hasNext()) { + TaxonNode taxonNode = taxonNodesItr.next(); + Taxon taxon = taxonNode.getTaxon(); + + if(taxon != null) { + Set descriptions = taxon.getDescriptions(); + Iterator descriptionsItr = descriptions.iterator(); + while(descriptionsItr.hasNext()) { + TaxonDescription desc = descriptionsItr.next(); + if(desc != null) { + for (DescriptionElementBase element : desc.getElements()){ + if (element.isInstanceOf(TextData.class)){ + // usually a call to 'get' collections should not initialise the collection, + // but the 'getMultilanguageText' call internally calls readSize on the collection + // which triggers the initialisation + Map multilanguagetextMap = ((TextData)element).getMultilanguageText(); + //boolean init = AbstractPersistentCollection.isInitialized(multilanguagetextMap); + //Assert.assertTrue(init); + + if(!multilanguagetextMap.isEmpty()) { + // found a map whcih we can test! + logger.info("Found Non-empty multilanguagetextMap"); + boolean empty = commonService.isEmpty(element.getUuid(), "multilanguageText"); + Assert.assertFalse(empty); + // test retrieval of key set, which should already by initialised + Set langKeySet = multilanguagetextMap.keySet(); + Iterator langKeySetItr = langKeySet.iterator(); + while(langKeySetItr.hasNext()) { + Language key = langKeySetItr.next(); + // testing 'containsKey' on locally initialised collection + boolean localContainsKey = multilanguagetextMap.containsKey(key); + Assert.assertTrue(localContainsKey); + // testing 'containsKey' on remotely initialised collection + boolean remoteContainsKey = + commonService.containsKey(element.getUuid(), "multilanguageText", key); + Assert.assertTrue(remoteContainsKey); + + LanguageString value = multilanguagetextMap.get(key); + // testing 'containsValue' on locally initialised collection + boolean localContainsValue = multilanguagetextMap.containsValue(value); + Assert.assertTrue(localContainsValue); + // testing 'containsValue' on remotely initialised collection + boolean remoteContainsValue = + commonService.containsValue(element.getUuid(), "multilanguageText", value); + Assert.assertTrue(remoteContainsValue); + + } + return; + } + } + } + } + } + } + } + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/navigation/navigator/contextmenu/ClassificationTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/navigation/navigator/contextmenu/ClassificationTest.java index 6d4dac58c..308946886 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/navigation/navigator/contextmenu/ClassificationTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/navigation/navigator/contextmenu/ClassificationTest.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.navigation.navigator.contextmenu; @@ -7,6 +7,7 @@ import org.eclipse.swtbot.eclipse.finder.waits.Conditions; import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import eu.etaxonomy.taxeditor.test.AbstractEditorTest; @@ -16,18 +17,20 @@ import eu.etaxonomy.taxeditor.test.ContextMenuHelper; * @author n.hoffmann * */ +@Ignore public class ClassificationTest extends AbstractEditorTest { private SWTBotView navigatorView; private SWTBotTree tree; - @Before + @Override + @Before public void setup() { super.setup(); navigatorView = utils.view("Taxon Navigator"); tree = utils.tree(navigatorView.getWidget()); } - + @Test public void canDeleteClassification() throws Exception { tree.select(0); @@ -35,7 +38,7 @@ public class ClassificationTest extends AbstractEditorTest { bot.waitUntil(Conditions.shellIsActive("Confirm Deletion")); utils.ok(); } - + @Test public void canCreateClassification() throws Exception { tree.setFocus(); diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizardTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizardTest.java index 1c09585e5..a1ac7615f 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizardTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonWizardTest.java @@ -1,5 +1,5 @@ /** - * + * */ package eu.etaxonomy.taxeditor.newWizard; @@ -7,6 +7,7 @@ import junit.framework.Assert; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; import org.eclipse.swtbot.swt.finder.widgets.SWTBotButton; +import org.junit.Ignore; import org.junit.Test; import eu.etaxonomy.taxeditor.test.AbstractEditorTest; @@ -15,6 +16,7 @@ import eu.etaxonomy.taxeditor.test.AbstractEditorTest; * @author n.hoffmann * */ +@Ignore public class NewTaxonWizardTest extends AbstractEditorTest { @Override @@ -23,14 +25,14 @@ public class NewTaxonWizardTest extends AbstractEditorTest { bot.menu("General").menu("New").menu("Taxon").click(); bot.waitUntil(Conditions.shellIsActive("New Entity")); } - + @Test public void unalteredDialogCanNotBefinished() { boolean finishIsEnabled = bot.button("Finish").isEnabled(); Assert.assertEquals(false, finishIsEnabled); utils.cancel(); } - + @Test public void canCreateNewTaxonMinimal(){ utils.openFilteredSelection(0, "Choose a Classification"); @@ -44,12 +46,12 @@ public class NewTaxonWizardTest extends AbstractEditorTest { bot.textWithLabel("New Taxon").setText(newTaxonName); bot.waitUntil(Conditions.widgetIsEnabled(bot.button("Finish"))); utils.finish(); - + // bot.waitUntil(Conditions.waitForEditor(WithPartId.withPartId(MultiPageTaxonEditor.ID))); // Assert.assertEquals(newTaxonName, bot.activeEditor().getTitle()); } - - - + + + } diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/BaseOperationTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/BaseOperationTest.java new file mode 100644 index 000000000..ed284ab1b --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/BaseOperationTest.java @@ -0,0 +1,49 @@ +// $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.operation; + +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.commands.operations.IUndoContext; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.junit.Before; + +import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; +import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled; +import eu.etaxonomy.taxeditor.operation.RemotingCdmUpdateOperation; +import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; +import eu.etaxonomy.taxeditor.test.MockConversationEnabled; + +/** + * @author n.hoffmann + * @created 15.04.2009 + * @version 1.0 + */ +public abstract class BaseOperationTest extends RemotingSessionAwareTest { + + public static final IUndoContext undoContext = null; + + public static final IProgressMonitor monitor = new NullProgressMonitor(); + public static final IAdaptable info = null; + public static final IPostOperationEnabled postOperation = null; + public static final IConversationEnabled conversationEnabled = new MockConversationEnabled(); + public static final ICdmEntitySessionEnabled cdmEntitySessionEnabled = null; + + protected static AbstractOperation operation; + + @Before + public void initializeOperations() { + RemotingCdmUpdateOperation.throwExceptions = true; + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.java new file mode 100644 index 000000000..a44f3ab55 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.java @@ -0,0 +1,78 @@ +// $Id$ +/** +* Copyright (C) 2015 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.operation; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import org.eclipse.core.commands.ExecutionException; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.operation.RemotingDeletePolytomousKeyOperation; +import eu.etaxonomy.taxeditor.navigation.key.polytomous.operation.RemotingUpdatePolytomousKeyAllNodesOperation; + +/** + * @author cmathew + * @date 25 Jun 2015 + * + */ +@DataSet +public class PolytomousKeyViewPartTest extends BaseOperationTest { + + IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService(); + private static UUID pkey1Uuid = UUID.fromString("f82cef88-5a9e-4917-9938-d08bda40836f"); + private static UUID pkey2Uuid = UUID.fromString("a00ca7ec-b660-433c-bd14-596826ab2243"); + private static UUID pkey3Uuid = UUID.fromString("197bc542-bf5b-4a52-aa66-c65df32c196b"); + + @Ignore // waiting for #3998 to be fixed + @Test + public void testDeletePolytomousKey() throws ExecutionException { + List pKeysBeforeDelete = polytomousKeyService.list(PolytomousKey.class, null, null, null, null); + int initialCount = pKeysBeforeDelete.size(); + + List keysToDelete = new ArrayList(); + keysToDelete.add(polytomousKeyService.load(pkey1Uuid)); + keysToDelete.add(polytomousKeyService.load(pkey2Uuid)); + keysToDelete.add(polytomousKeyService.load(pkey3Uuid)); + + List uuids = new ArrayList(); + uuids.add(pkey1Uuid); + uuids.add(pkey2Uuid); + uuids.add(pkey3Uuid); + + int keysToDeleteCount = keysToDelete.size(); + operation = new RemotingDeletePolytomousKeyOperation(sessionOwner, + false, + uuids); + operation.execute(monitor, info); + + List pKeysAfterDelete = polytomousKeyService.list(PolytomousKey.class, null, null, null, null); + Assert.assertEquals(initialCount - keysToDeleteCount, pKeysAfterDelete.size()); + for(PolytomousKey key : keysToDelete) { + Assert.assertFalse(pKeysAfterDelete.contains(key)); + } + + } + + @Test + public void testUpdateAllNodes() throws ExecutionException { + operation = new RemotingUpdatePolytomousKeyAllNodesOperation(sessionOwner, + false, + pkey1Uuid); + operation.execute(monitor, info); + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.java new file mode 100644 index 000000000..b583aa059 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.java @@ -0,0 +1,177 @@ +// $Id$ +/** +* Copyright (C) 2015 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.operation; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.eclipse.core.commands.ExecutionException; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.UpdateResult; +import eu.etaxonomy.cdm.api.service.UpdateResult.Status; +import eu.etaxonomy.cdm.api.service.dto.CdmEntityIdentifier; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils; +import eu.etaxonomy.taxeditor.store.operations.RemotingTestUpdateOperation; + +/** + * @author cmathew + * @date 26 Jun 2015 + * + */ +@DataSet +public class RemotingCdmUpdateOperationTest extends BaseOperationTest { + + private static final Logger logger = Logger.getLogger(RemotingCdmUpdateOperationTest.class); + + private static ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService(); + + private static UUID taxonNodeUuid1; + private static UUID taxonNodeUuid2; + private static UUID taxonNodeUuid3; + private static UUID taxonNodeUuid4; + private static UUID taxonNodeUuid5; + + + private static Set taxonNodes; + private static Set ceis; + + @BeforeClass + public static void initializeUpdatedObjects() { + taxonNodeUuid1 = UUID.fromString("b85b5b78-6760-409f-ac91-bb89e95ff2a1"); + taxonNodeUuid2 = UUID.fromString("6ad8e9e2-f5f6-41ad-aa30-f62a903650db"); + taxonNodeUuid3 = UUID.fromString("91698cec-615f-4472-9002-feda1a6acded"); + taxonNodeUuid4 = UUID.fromString("b8439f51-6b96-445a-b401-7a836ba1cf58"); + taxonNodeUuid5 = UUID.fromString("629b3fd3f-29b4-4011-ab12-9c1ad1607dbd"); + + } + + @Test + public void testUpdateResultWithCdmEntities() throws ExecutionException { + TaxonNode taxonNode1 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid1)); + TaxonNode taxonNode2 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid2)); + TaxonNode taxonNode3 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid3)); + TaxonNode taxonNode4 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid4)); + TaxonNode taxonNode5 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid5)); + + taxonNodes = new HashSet(); + taxonNodes.add(taxonNode1); + taxonNodes.add(taxonNode2); + taxonNodes.add(taxonNode3); + taxonNodes.add(taxonNode4); + taxonNodes.add(taxonNode5); + + UpdateResult result = new UpdateResult(); + result.addUpdatedObjects(taxonNodes); + result.setStatus(Status.OK); + + sessionOwner.setExpectedUpdatedObjects(taxonNodes); + + operation = new RemotingTestUpdateOperation(result, sessionOwner, false); + operation.execute(monitor, info); + + Assert.assertEquals(taxonNodes, sessionOwner.getEventUpdatedObjects()); + } + + @Test + public void testUpdateResultWithCdmIdentities() throws ExecutionException { + TaxonNode taxonNode1 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid1)); + TaxonNode taxonNode2 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid2)); + TaxonNode taxonNode3 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid3)); + TaxonNode taxonNode4 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid4)); + TaxonNode taxonNode5 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid5)); + + taxonNodes = new HashSet(); + taxonNodes.add(taxonNode1); + taxonNodes.add(taxonNode2); + taxonNodes.add(taxonNode3); + taxonNodes.add(taxonNode4); + taxonNodes.add(taxonNode5); + + ceis = new HashSet(); + ceis.add(new CdmEntityIdentifier(taxonNode3.getId(),TaxonNode.class)); + ceis.add(new CdmEntityIdentifier(taxonNode4.getId(),TaxonNode.class)); + ceis.add(new CdmEntityIdentifier(taxonNode5.getId(),TaxonNode.class)); + + UpdateResult result = new UpdateResult(); + result.addUpdatedObject(taxonNode1); + result.addUpdatedObject(taxonNode2); + result.addUpdatedCdmIds(ceis); + + result.setStatus(Status.OK); + sessionOwner.setExpectedUpdatedObjects(taxonNodes); + operation = new RemotingTestUpdateOperation(result, sessionOwner, false); + operation.execute(monitor, info); + + Assert.assertEquals(taxonNodes, sessionOwner.getEventUpdatedObjects()); + } + + @Test + public void testUpdateResultWithLoadedCdmIdentities() throws ExecutionException { + TaxonNode taxonNode1 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid1)); + TaxonNode taxonNode2 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid2)); + TaxonNode taxonNode3 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid3)); + TaxonNode taxonNode4 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid4)); + TaxonNode taxonNode5 = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid5)); + + taxonNodes = new HashSet(); + taxonNodes.add(taxonNode1); + taxonNodes.add(taxonNode2); + taxonNodes.add(taxonNode3); + taxonNodes.add(taxonNode4); + taxonNodes.add(taxonNode5); + + ceis = new HashSet(); + ceis.add(new CdmEntityIdentifier(taxonNode3.getId(),TaxonNode.class)); + ceis.add(new CdmEntityIdentifier(taxonNode4.getId(),TaxonNode.class)); + ceis.add(new CdmEntityIdentifier(taxonNode5.getId(),TaxonNode.class)); + + + UpdateResult result = new UpdateResult(); + result.addUpdatedObject(taxonNode1); + result.addUpdatedObject(taxonNode2); + result.addUpdatedCdmIds(ceis); + result.addUpdatedCdmId(new CdmEntityIdentifier(46,TaxonNode.class)); + + result.setStatus(Status.OK); + sessionOwner.setExpectedUpdatedObjects(taxonNodes); + operation = new RemotingTestUpdateOperation(result, sessionOwner, false); + operation.execute(monitor, info); + + Assert.assertEquals(taxonNodes, sessionOwner.getEventUpdatedObjects()); + } + + @Test + public void testDataChange() throws ExecutionException { + TaxonNode taxonNode = (TaxonNode) ProxyUtils.deproxy(taxonNodeService.load(taxonNodeUuid1)); + CdmEntityIdentifier cei = new CdmEntityIdentifier(taxonNode.getId(), TaxonNode.class); + + taxonNodes = new HashSet(); + taxonNodes.add(taxonNode); + + int taxonNodeCountChildren = taxonNode.getCountChildren(); + sessionOwner.setExpectedUpdatedObjects(taxonNodes); + + operation = new RemotingTestUpdateOperation(cei, sessionOwner, false); + operation.execute(monitor, info); + + Set eventUpdatedObjects = sessionOwner.getEventUpdatedObjects(); + Assert.assertEquals(taxonNodes, eventUpdatedObjects); + Assert.assertEquals(taxonNodeCountChildren + 1, ((TaxonNode)eventUpdatedObjects.iterator().next()).getCountChildren()); + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.java new file mode 100644 index 000000000..77fc90f0c --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.java @@ -0,0 +1,212 @@ +// $Id$ +/** +* Copyright (C) 2015 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.operation; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.eclipse.core.commands.ExecutionException; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.OriginalSourceType; +import eu.etaxonomy.cdm.model.description.DescriptionElementSource; +import eu.etaxonomy.cdm.model.description.Feature; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.description.TextData; +import eu.etaxonomy.cdm.model.name.BotanicalName; +import eu.etaxonomy.cdm.model.name.HomotypicalGroup; +import eu.etaxonomy.cdm.model.name.NonViralName; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Synonym; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.editor.name.operation.CreateSynonymInExistingHomotypicalGroupOperation; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * @author cmathew + * @date 3 Feb 2015 + * + */ + +@DataSet +public class TaxonNameEditorTest extends BaseOperationTest { + + private static final Logger logger = Logger.getLogger(TaxonNameEditorTest.class); + + ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService(); + ITaxonService taxonService = getRemoteApplicationController().getTaxonService(); + IClassificationService classificationService = getRemoteApplicationController().getClassificationService(); + + Language english = Language.getLanguageFromUuid(Language.uuidEnglish); + + + @Test + public void testAddHomotypicSynonym() throws ExecutionException { + UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985"); + + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + Taxon taxon = taxonNode.getTaxon(); + HomotypicalGroup group = taxon.getHomotypicGroup(); + BotanicalName newSynonymName = BotanicalName.NewInstance(null); + newSynonymName.setTitleCache("New Synonym", true); + operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group", + undoContext, taxon, group, newSynonymName, postOperation); + + operation.execute(monitor, info); + taxonNodeService.merge(taxonNode); + Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2); + Assert.assertEquals(taxon.getSynonyms().size(), 1); + Iterator synonymItr = taxon.getSynonyms().iterator(); + Synonym synonym = synonymItr.next(); + Assert.assertTrue(taxon.getHomotypicGroup().getTypifiedNames().contains(synonym.getName())); + } + + @Test + public void addHeterotypicSynonym() throws ExecutionException { + UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985"); + + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + Taxon taxon = taxonNode.getTaxon(); + HomotypicalGroup group = taxon.getHomotypicGroup(); + BotanicalName newSynonymName = BotanicalName.NewInstance(null); + newSynonymName.setTitleCache("New Synonym", true); + operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group", + undoContext, taxon, group, newSynonymName, postOperation); + + operation.execute(monitor, info); + taxonNodeService.merge(taxonNode); + + + } + + @Test + public void addDeleteAddHomotypicSynonym() throws ExecutionException { + UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985"); + + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + Taxon taxon = taxonNode.getTaxon(); + HomotypicalGroup group = taxon.getHomotypicGroup(); + BotanicalName newSynonymName = BotanicalName.NewInstance(null); + newSynonymName.setTitleCache("New Synonym", true); + operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group", + undoContext, taxon, group, newSynonymName, postOperation); + + operation.execute(monitor, info); + taxonNodeService.merge(taxonNode); + Assert.assertEquals(taxon.getHomotypicGroup().getTypifiedNames().size(), 2); + + Set synonyms = taxon.getSynonyms(); + for(Synonym synonym : synonyms) { + taxonService.deleteSynonym(synonym.getUuid(), taxon.getUuid(), null); + } + + taxonNodeService.merge(taxonNode); + + newSynonymName = BotanicalName.NewInstance(null); + newSynonymName.setTitleCache("Another New Synonym", true); + operation = new CreateSynonymInExistingHomotypicalGroupOperation("Create Synonym In Existing Homotypical Group", + undoContext, taxon, group, newSynonymName, postOperation); + + operation.execute(monitor, info); + taxonNodeService.merge(taxonNode); + } + + @Test + public void swapSynonymWithAcceptedTaxon() throws ExecutionException { + List rootEntities = new ArrayList(); + UUID taxonNodeUuid = UUID.fromString("d425a971-1abe-4895-9e1f-1e5c8ff1c84c"); + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + rootEntities.add(taxonNode); + + UUID taxonUuid = UUID.fromString("9763e5f0-6cd4-4d96-b8a4-4420854f7727"); + Taxon taxon = (Taxon)taxonService.load(taxonUuid); + TaxonNameBase taxonName = taxon.getName(); + + UUID synonymUuid = UUID.fromString("1eb173bd-b174-4162-8ff5-5136d8f1e746"); + Synonym synonym = (Synonym)taxonService.load(synonymUuid); + TaxonNameBase synonymName = synonym.getName(); + + taxonService.swapSynonymAndAcceptedTaxon(synonym.getUuid(), taxon.getUuid()); + + Assert.assertEquals(taxonName, synonym.getName()); + Assert.assertEquals(synonymName, taxon.getName()); + } + + @Test + public void addTaxon() { + NonViralName taxonName = NonViralName.NewInstance(null); + Taxon taxon = Taxon.NewInstance(taxonName, null); + taxonService.merge(taxon); + } + + @Ignore + @Test + public void addDescription() { + UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985"); + + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + Taxon taxon = taxonNode.getTaxon(); + TaxonDescription description = TaxonDescription.NewInstance(taxon); + + + TextData textData = TextData.NewInstance(); + + textData.setFeature(Feature.ECOLOGY()); + description.addElement(textData); + + DescriptionElementSource descriptionElementSource = DescriptionElementSource.NewInstance(OriginalSourceType.PrimaryTaxonomicSource); + textData.addSource(descriptionElementSource); + + + CdmStore.getService(ITaxonNodeService.class).merge(taxonNode); + + description.getId(); + } + + + @Test + public void addTaxonNodeCascadeProblem() { + UUID taxonNodeUuid = UUID.fromString("ce54c396-3694-47f2-abb0-1d7b7e057985"); + + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + Taxon childTaxon = Taxon.NewInstance(null, null); + TaxonNode childTaxonNode = taxonNode.addChildTaxon(childTaxon, null, null); + Taxon grandChildTaxon = Taxon.NewInstance(null, null); + TaxonNode grandChildTaxonNode = childTaxonNode.addChildTaxon(grandChildTaxon, null, null); + + CdmStore.getService(ITaxonNodeService.class).merge(taxonNode,true); + + Assert.assertEquals(taxonNode.getChildNodes().get(0).getId(), childTaxonNode.getId()); + + Assert.assertTrue(childTaxonNode.treeIndex() != null); + Assert.assertEquals(taxonNode.getChildNodes().get(0).treeIndex(), childTaxonNode.treeIndex()); + Assert.assertFalse(childTaxon.getId() == 0); + Assert.assertEquals(taxonNode.getChildNodes().get(0).getTaxon().getId(), childTaxon.getId()); + + Assert.assertTrue(grandChildTaxonNode.treeIndex() != null); + Assert.assertEquals(taxonNode.getChildNodes().get(0).getChildNodes().get(0).getId(), grandChildTaxonNode.getId()); + Assert.assertFalse(grandChildTaxon.getId() == 0); + Assert.assertEquals(taxonNode.getChildNodes().get(0).getChildNodes().get(0).getTaxon().getId(), grandChildTaxon.getId()); + } + +} + diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.java new file mode 100644 index 000000000..3b99b77b0 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.java @@ -0,0 +1,272 @@ +// $Id$ +/** + * Copyright (C) 2015 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.operation; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.eclipse.core.commands.ExecutionException; +import org.junit.Assert; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.IClassificationService; +import eu.etaxonomy.cdm.api.service.ITaxonNodeService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.TaxonNodeDeletionConfigurator; +import eu.etaxonomy.cdm.api.service.config.NodeDeletionConfigurator.ChildHandling; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.description.TaxonDescription; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Classification; +import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.cdm.model.taxon.TaxonNode; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingChangeAcceptedTaxonToSynonymOperation; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingDeleteTaxonNodeOperation; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveFactualDataOperation; +import eu.etaxonomy.taxeditor.navigation.navigator.operation.RemotingMoveTaxonOperation; + +/** + * @author cmathew + * @date 9 Mar 2015 + * + */ +@DataSet +public class TaxonNavigatorTest extends BaseOperationTest { + + private static final Logger logger = Logger.getLogger(TaxonNameEditorTest.class); + + ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService(); + ITaxonService taxonService = getRemoteApplicationController().getTaxonService(); + IClassificationService classificationService = getRemoteApplicationController().getClassificationService(); + + Language english = Language.getLanguageFromUuid(Language.uuidEnglish); + + + + @Test + public void testChangeAcceptedTaxonToSynonym() throws ExecutionException { + + + UUID oldTaxonNodeNodeUuid = UUID.fromString("b85b5b78-6760-409f-ac91-bb89e95ff2a1"); + UUID newAcceptedTaxonNodeUuid = UUID.fromString("6ad8e9e2-f5f6-41ad-aa30-f62a903650db"); + + TaxonNode oldTaxonNode = taxonNodeService.load(oldTaxonNodeNodeUuid); + TaxonNameBase name = oldTaxonNode.getTaxon().getName(); + + + TaxonNode newAcceptedTaxonNode = taxonNodeService.load(newAcceptedTaxonNodeUuid); + int countTargetSynonyms = newAcceptedTaxonNode.getTaxon().getSynonyms().size(); + sessionOwner.addExpectedUpdatedObject(oldTaxonNode.getParent()); + sessionOwner.addExpectedUpdatedObject(newAcceptedTaxonNode); + + operation = new RemotingChangeAcceptedTaxonToSynonymOperation(sessionOwner, + false, + oldTaxonNode.getUuid(), + newAcceptedTaxonNode.getUuid()); + operation.execute(monitor, info); + newAcceptedTaxonNode = taxonNodeService.load(newAcceptedTaxonNodeUuid); + oldTaxonNode = taxonNodeService.load(oldTaxonNodeNodeUuid); + Assert.assertNull(oldTaxonNode); + Assert.assertEquals(countTargetSynonyms + 1,newAcceptedTaxonNode.getTaxon().getSynonyms().size()); + Assert.assertEquals(name, newAcceptedTaxonNode.getTaxon().getSynonyms().iterator().next().getName()); + + + } + + @Test + public void testMoveTaxon() throws ExecutionException { + + UUID taxonNodeToMoveUuid = UUID.fromString("b8439f51-6b96-445a-b401-7a836ba1cf58"); + UUID newParentTreeNodeUuid = UUID.fromString("2f05d429-632d-4230-b9cb-70299360b470"); + boolean moveToParentNode = true; + + TaxonNode taxonNodeToMove = taxonNodeService.load(taxonNodeToMoveUuid); + TaxonNode oldParent = taxonNodeToMove.getParent(); + sessionOwner.addExpectedUpdatedObject(oldParent); + int childCount = oldParent.getCountChildren(); + TaxonNode newParentTreeNode = taxonNodeService.load(newParentTreeNodeUuid); + sessionOwner.addExpectedUpdatedObject(newParentTreeNode); + operation = new RemotingMoveTaxonOperation(sessionOwner, + false, + taxonNodeToMove.getUuid(), + newParentTreeNode.getUuid(), + moveToParentNode); + operation.execute(monitor, info); + Assert.assertEquals(childCount-1, oldParent.getCountChildren()); + Assert.assertTrue(!oldParent.getChildNodes().contains(taxonNodeToMove)); + Assert.assertTrue(newParentTreeNode.getChildNodes().contains(taxonNodeToMove)); + } + + @Test + public void testMoveFactualData() throws ExecutionException { + UUID sourceTaxonUuid = UUID.fromString("e40854d7-143f-4054-b229-6ed4cedb4bff"); + UUID targetTaxonUuid = UUID.fromString("b8402dc4-5050-4882-a147-01b71e0e47d6"); + + Taxon sourceTaxon = CdmBase.deproxy(taxonService.load(sourceTaxonUuid), Taxon.class); + Set sourceDescriptions = new HashSet(sourceTaxon.getDescriptions()); + sessionOwner.addExpectedUpdatedObject(sourceTaxon); + + Taxon targetTaxon = CdmBase.deproxy(taxonService.load(targetTaxonUuid), Taxon.class); + int countTargetDescriptions = targetTaxon.getDescriptions().size(); + sessionOwner.addExpectedUpdatedObject(targetTaxon); + + operation = new RemotingMoveFactualDataOperation(sessionOwner, + false, + sourceTaxonUuid, + targetTaxonUuid); + operation.execute(monitor, info); + Assert.assertEquals(0, sourceTaxon.getDescriptions().size()); + Assert.assertEquals(sourceDescriptions.size() + countTargetDescriptions, targetTaxon.getDescriptions().size()); + Assert.assertTrue(targetTaxon.getDescriptions().containsAll(sourceDescriptions)); + } + + @Test + public void testDeleteTaxonNodeWithDeleteChildren() throws ExecutionException { + UUID taxonNodeUuid = UUID.fromString("2f05d429-632d-4230-b9cb-70299360b470"); + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + List childNodes = taxonNode.getChildNodes(); + List childNodeUuids = new ArrayList(); + for(TaxonNode childNode : childNodes) { + childNodeUuids.add(childNode.getUuid()); + } + Assert.assertTrue(taxonNode.getCountChildren() > 0); + + Set nodes = new HashSet(); + nodes.add(taxonNode); + + TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); + configNodes.setChildHandling(ChildHandling.DELETE); + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setTaxonNodeConfig(configNodes); + + sessionOwner.addExpectedUpdatedObject(taxonNode.getParent()); + + operation = new RemotingDeleteTaxonNodeOperation(sessionOwner, + false, + nodes, + config); + operation.execute(monitor, info); + TaxonNode reloadedNode = taxonNodeService.load(taxonNode.getUuid()); + Assert.assertNull(reloadedNode); + for(UUID childNodeUuid : childNodeUuids) { + TaxonNode reloadedChildNode = taxonNodeService.load(childNodeUuid); + Assert.assertNull(reloadedChildNode); + } + } + + @Test + public void testDeleteTaxonNodes() throws ExecutionException { + UUID taxonNode1Uuid = UUID.fromString("99f03b56-67cd-4e01-9ceb-2362d48f9d07"); + UUID taxonNode2Uuid = UUID.fromString("91698cec-615f-4472-9002-feda1a6acded"); + UUID taxonNode3Uuid = UUID.fromString("4fe03763-b966-4361-8334-352f6f777588"); + + TaxonNode taxonNode1 = taxonNodeService.load(taxonNode1Uuid); + TaxonNode taxonNode2 = taxonNodeService.load(taxonNode2Uuid); + TaxonNode taxonNode3 = taxonNodeService.load(taxonNode3Uuid); + + Set nodes = new HashSet(); + nodes.add(taxonNode1); + nodes.add(taxonNode2); + nodes.add(taxonNode3); + + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + + + sessionOwner.addExpectedUpdatedObject(taxonNode1.getParent()); + sessionOwner.addExpectedUpdatedObject(taxonNode2.getParent()); + sessionOwner.addExpectedUpdatedObject(taxonNode3.getParent()); + operation = new RemotingDeleteTaxonNodeOperation(sessionOwner, + false, + nodes, + config); + operation.execute(monitor, info); + TaxonNode reloadedNode1 = taxonNodeService.load(taxonNode1.getUuid()); + TaxonNode reloadedNode2 = taxonNodeService.load(taxonNode2.getUuid()); + TaxonNode reloadedNode3 = taxonNodeService.load(taxonNode3.getUuid()); + Assert.assertNull(reloadedNode1); + Assert.assertNull(reloadedNode2); + Assert.assertNull(reloadedNode3); + + } + + @Test + public void testDeleteTaxonNodeWithMovingChildrenToParentNode() throws ExecutionException { + UUID taxonNodeUuid = UUID.fromString("2f05d429-632d-4230-b9cb-70299360b470"); + TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid); + TaxonNode parentTaxonNode = taxonNode.getParent(); + List childNodes = taxonNode.getChildNodes(); + List childNodeUuids = new ArrayList(); + for(TaxonNode childNode : childNodes) { + childNodeUuids.add(childNode.getUuid()); + } + Assert.assertTrue(taxonNode.getCountChildren() > 0); + + Set nodes = new HashSet(); + nodes.add(taxonNode); + + TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); + configNodes.setChildHandling(ChildHandling.MOVE_TO_PARENT); + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setTaxonNodeConfig(configNodes); + + sessionOwner.addExpectedUpdatedObject(taxonNode.getParent()); + operation = new RemotingDeleteTaxonNodeOperation(sessionOwner, + false, + nodes, + config); + operation.execute(monitor, info); + TaxonNode reloadedNode = taxonNodeService.load(taxonNode.getUuid()); + Assert.assertNull(reloadedNode); + List parentChildNodes = parentTaxonNode.getChildNodes(); + List parentChildNodeUuids = new ArrayList(); + for(TaxonNode parentChildNode : parentChildNodes) { + parentChildNodeUuids.add(parentChildNode.getUuid()); + } + parentChildNodeUuids.containsAll(childNodeUuids); + + } + + @Test + @DataSet("TaxonNavigatorTest.testDeleteClassificationWithDeleteChildren.xml") + public void testDeleteClassificationWithDeleteChildren() throws ExecutionException { + UUID classificationUuid = UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab"); + Classification classification = classificationService.load(classificationUuid); + TaxonNode rootNode = classification.getRootNode(); + Set nodes = new HashSet(); + nodes.add(classification); + + TaxonNodeDeletionConfigurator configNodes = new TaxonNodeDeletionConfigurator(); + configNodes.setChildHandling(ChildHandling.DELETE); + TaxonDeletionConfigurator config = new TaxonDeletionConfigurator(); + config.setTaxonNodeConfig(configNodes); + + operation = new RemotingDeleteTaxonNodeOperation(sessionOwner, + false, + nodes, + config); + operation.execute(monitor, info); + + Classification reloadedClassification = classificationService.load(classification.getUuid()); + Assert.assertNull(reloadedClassification); + TaxonNode reloadedRootNode = taxonNodeService.load(rootNode.getUuid()); + Assert.assertNull(reloadedRootNode); + + } + + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceExportTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceExportTest.java new file mode 100644 index 000000000..bf48ebddc --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceExportTest.java @@ -0,0 +1,126 @@ +// $Id$ +/** +* Copyright (C) 2015 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.service; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +import org.junit.Assert; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.INameService; +import eu.etaxonomy.cdm.io.common.ExportResult; +import eu.etaxonomy.cdm.io.csv.caryophyllales.out.CsvNameExportConfigurator; +import eu.etaxonomy.cdm.io.csv.redlist.demo.CsvDemoExportConfigurator; +import eu.etaxonomy.cdm.io.jaxb.JaxbExportConfigurator; +import eu.etaxonomy.cdm.io.sdd.out.SDDExportConfigurator; +import eu.etaxonomy.cdm.io.service.IIOService; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; + +/** + * @author cmathew + * @date 31 Jul 2015 + * + */ +@DataSet +public class IOServiceExportTest extends BaseRemotingTest { + + private final IIOService ioService = CdmApplicationState.getIOService(); + private final INameService nameService = CdmApplicationState.getCurrentAppConfig().getNameService(); + + @Test + public void exportJaxbTest() throws IOException { + JaxbExportConfigurator config = JaxbExportConfigurator.NewInstance(null, null); + ExportResult result = ioService.export(config); + List dataList = result.getExportData(); + Assert.assertEquals(1, dataList.size()); + byte[] exportData = dataList.get(0); + String savePath = "target/exportjaxb.xml"; + FileOutputStream stream = null; + + stream = new FileOutputStream(savePath); + stream.write(exportData); + stream.close(); + } + + @Test + public void exportSDDTest() throws IOException { + SDDExportConfigurator config = SDDExportConfigurator.NewInstance(null, null, null); + ExportResult result = ioService.export(config); + List dataList = result.getExportData(); + Assert.assertEquals(1, dataList.size()); + byte[] exportData = dataList.get(0); + String savePath = "target/exportsdd.xml"; + FileOutputStream stream = null; + + stream = new FileOutputStream(savePath); + stream.write(exportData); + stream.close(); + + } + + @Test + public void exportCSVTest() throws IOException { + HashSet set = new HashSet(); + set.add(UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab")); + CsvDemoExportConfigurator config = CsvDemoExportConfigurator.NewInstance(null, null); + config.setClassificationUuids(set); + config.setDoTaxa(true); + config.setHasHeaderLines(true); + config.setClassification(true); + config.setTaxonName(true); + config.setAuthor(true); + config.setRank(true); + config.setLastChange(true); + + ExportResult result = ioService.export(config); + List dataList = result.getExportData(); + Assert.assertEquals(1, dataList.size()); + byte[] exportData = dataList.get(0); + String savePath = "target/exportcsv.xml"; + saveToFile(savePath, exportData); + } + + @Test + public void exportCSVNameTest() throws IOException { + CsvNameExportConfigurator config = CsvNameExportConfigurator.NewInstance(null,null); + ExportResult result = ioService.export(config); + List dataList = result.getExportData(); + Assert.assertEquals(1, dataList.size()); + byte[] exportData = dataList.get(0); + String savePath = "target/exportcsvname.xml"; + saveToFile(savePath, exportData); + } + + @Test + public void exportCSVPrintTest() throws IOException { + CsvNameExportConfigurator config = CsvNameExportConfigurator.NewInstance(null,null); + config.setNamesOnly(false); + config.setClassificationUUID(UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab")); + ExportResult result = ioService.export(config); + List dataList = result.getExportData(); + Assert.assertEquals(1, dataList.size()); + byte[] exportData = dataList.get(0); + String savePath = "target/exportcsvprint.xml"; + saveToFile(savePath, exportData); + } + + private static void saveToFile(String filePath, byte[] data) throws IOException { + FileOutputStream stream = null; + stream = new FileOutputStream(filePath); + stream.write(data); + stream.close(); + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceImportTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceImportTest.java new file mode 100644 index 000000000..965304ba1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/IOServiceImportTest.java @@ -0,0 +1,149 @@ +// $Id$ +/** +* Copyright (C) 2015 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.service; + +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.INameService; +import eu.etaxonomy.cdm.api.service.IOccurrenceService; +import eu.etaxonomy.cdm.database.DbSchemaValidation; +import eu.etaxonomy.cdm.io.common.IImportConfigurator.SOURCE_TYPE; +import eu.etaxonomy.cdm.io.common.ImportResult; +import eu.etaxonomy.cdm.io.excel.taxa.NormalExplicitImportConfigurator; +import eu.etaxonomy.cdm.io.sdd.in.SDDImportConfigurator; +import eu.etaxonomy.cdm.io.service.IIOService; +import eu.etaxonomy.cdm.io.specimen.abcd206.in.Abcd206ImportConfigurator; +import eu.etaxonomy.cdm.io.specimen.excel.in.SpecimenCdmExcelImportConfigurator; +import eu.etaxonomy.cdm.io.tcsxml.in.TcsXmlImportConfigurator; +import eu.etaxonomy.cdm.model.name.NomenclaturalCode; +import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest; + +/** + * + * Note : One issue with this test class is that when the tests are run a second time + * against the same server there are errors due to the fact that not all the imported data is deleted. + * This needs to be fixed + * @author cmathew + * @date 5 Aug 2015 + * + */ +@Ignore // seems to cause problems with other tests due to data not deleted +@DataSet +public class IOServiceImportTest extends BaseRemotingTest { + + private final IIOService ioService = CdmApplicationState.getIOService(); + private final INameService nameService = CdmApplicationState.getCurrentAppConfig().getNameService(); + private final IOccurrenceService occurrenceService = CdmApplicationState.getCurrentAppConfig().getOccurrenceService(); + + @Test + public void importNormalExplicit() throws IOException { + String importFilePath = "src/test/resources/imports/NormalExplicitImport.xls"; + NormalExplicitImportConfigurator config = + NormalExplicitImportConfigurator.NewInstance(null, null, null, null); + config.setNomenclaturalCode(NomenclaturalCode.ICNB); + config.setDbSchemaValidation(DbSchemaValidation.CREATE); + ImportResult result = ioService.importData(config, fileToByteArray(importFilePath), SOURCE_TYPE.URI); + Assert.assertTrue(result.isSuccess()); + List list = nameService.list(TaxonNameBase.class, null, null, null, null); + Assert.assertEquals(9,list.size()); + } + + + @Test + public void importAbcd() throws IOException { + String importFilePath = "src/test/resources/imports/ABCDImport.xml"; + Abcd206ImportConfigurator config = + Abcd206ImportConfigurator.NewInstance(null, null); + config.setNomenclaturalCode(NomenclaturalCode.ICNB); + config.setDbSchemaValidation(DbSchemaValidation.CREATE); + ImportResult result = ioService.importData(config, fileToByteArray(importFilePath), SOURCE_TYPE.INPUTSTREAM); + Assert.assertTrue(result.isSuccess()); + Assert.assertTrue(!result.getReports().isEmpty()); + saveToFile("target/importAbcdReport.txt", result.getReports().get(0)); + List list = nameService.list(TaxonNameBase.class, null, null, null, null); + Assert.assertEquals(2,list.size()); + } + + @Test + public void importSDD() throws IOException { + String importFilePath = "src/test/resources/imports/SDD.xml"; + SDDImportConfigurator config = + SDDImportConfigurator.NewInstance(null, null); + config.setNomenclaturalCode(NomenclaturalCode.ICNB); + config.setDbSchemaValidation(DbSchemaValidation.CREATE); + ImportResult result = ioService.importData(config, fileToByteArray(importFilePath), SOURCE_TYPE.URI); + Assert.assertTrue(result.isSuccess()); + List list = nameService.list(TaxonNameBase.class, null, null, null, null); + Assert.assertEquals(9,list.size()); + } + + @Test + public void importSpecimenExcel() throws IOException { + String importFilePath = "src/test/resources/imports/SpecimenExcelImport.xls"; + SpecimenCdmExcelImportConfigurator config = SpecimenCdmExcelImportConfigurator.NewInstance(null, null); + config.setNomenclaturalCode(NomenclaturalCode.ICNB); + config.setDbSchemaValidation(DbSchemaValidation.CREATE); + ImportResult result = ioService.importData(config, fileToByteArray(importFilePath), SOURCE_TYPE.URI); + Assert.assertTrue(result.isSuccess()); +// List occurrences = occurrenceService.list(SpecimenOrObservationBase.class, null, null, null, null); +// Assert.assertEquals(3,occurrences.size()); + } + + @Test + public void importTCS() throws IOException { + String importFilePath = "src/test/resources/imports/TcsImport.xml"; + TcsXmlImportConfigurator config = TcsXmlImportConfigurator.NewInstance(null, null); + config.setNomenclaturalCode(NomenclaturalCode.ICNB); + config.setDbSchemaValidation(DbSchemaValidation.CREATE); + ImportResult result = ioService.importData(config, fileToByteArray(importFilePath), SOURCE_TYPE.URI); + Assert.assertTrue(result.isSuccess()); + List list = nameService.list(TaxonNameBase.class, null, null, null, null); + Assert.assertEquals(16,list.size()); + } + + private byte[] fileToByteArray(String filePath) throws IOException { + Path path = Paths.get(filePath); + return Files.readAllBytes(path); + } + + private static void saveToFile(String filePath, byte[] data) { + FileOutputStream stream = null; + try { + stream = new FileOutputStream(filePath); + stream.write(data); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if(stream != null) { + stream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ProgressMonitorServiceTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ProgressMonitorServiceTest.java new file mode 100644 index 000000000..76df490d2 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ProgressMonitorServiceTest.java @@ -0,0 +1,329 @@ +// $Id$ +/** + * Copyright (C) 2015 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.service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.IProgressMonitorService; +import eu.etaxonomy.cdm.api.service.ITestService; +import eu.etaxonomy.cdm.common.monitor.IRemotingProgressMonitor; +import eu.etaxonomy.cdm.common.monitor.RemotingProgressMonitor; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; +import eu.etaxonomy.taxeditor.operation.IFeedbackGenerator; +import eu.etaxonomy.taxeditor.operation.IPostMoniteredOperationEnabled; +import eu.etaxonomy.taxeditor.store.CdmStore; + +/** + * @author cmathew + * @date 22 Oct 2015 + * + */ +public class ProgressMonitorServiceTest extends RemotingSessionAwareTest { + + private static final Logger logger = Logger.getLogger(ProgressMonitorServiceTest.class); + + ITestService testService = getRemoteApplicationController().getTestService(); + + IProgressMonitorService progressMonitorService = getRemoteApplicationController().getProgressMonitorService(); + + + + @After + public void revertAuthentication() { + authenticateDefaultUser(); + } + + @Test + public void testMonitLongRunningMethod() throws InterruptedException { + UUID uuid = testService.monitLongRunningMethod(null, null, 0); + int pollInterval = 1000; + RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult("Success"); + expectedMonitor.addReport("Report"); + expectedMonitor.done(); + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid), + (IFeedbackGenerator)null, + new NullProgressMonitor()); + } + + @Test + public void testMonitLongRunningMethodByChangingUser() throws InterruptedException { + + IllegalStateException ise = new IllegalStateException("IllegalStateException"); + UUID uuid = testService.monitLongRunningMethod(ise, null, 0); + authenticateExtraUser(); + IRemotingProgressMonitor monitor = progressMonitorService.getRemotingMonitor(uuid); + Assert.assertNull(monitor); + + } + + @Test + public void testMonitLongRunningMethodWithException() throws InterruptedException { + IllegalStateException ise = new IllegalStateException("IllegalStateException"); + UUID uuid = testService.monitLongRunningMethod(ise, null, 0); + int pollInterval = 1000; + RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult(ise); + expectedMonitor.setIsFailed(true); + expectedMonitor.done(); + try { + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid), + (IFeedbackGenerator)null, + new NullProgressMonitor()); + Assert.fail("Exception due to inconsistent number of feedback generators not thrown"); + } catch(IllegalStateException e) { + + } + } + + @Test + public void testMonitLongRunningMethodWithInterrupt() { + IllegalStateException ise = new IllegalStateException("Interrupted Exception"); + final UUID uuid = testService.monitLongRunningMethod(ise, null, 0); + final int pollInterval = 1000; + final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult(ise); + expectedMonitor.setCanceled(true); + expectedMonitor.setIsFailed(true); + expectedMonitor.done(); + + Thread thread = new Thread() { + @Override + public void run() { + try { + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + null, + (IFeedbackGenerator)null, + new NullProgressMonitor()); + Assert.fail("InterruptedException wrapped in an IllegalStateException should be thrown"); + } catch (InterruptedException e) { + + } catch (IllegalStateException e) { + + } + } + }; + thread.start(); + while(!progressMonitorService.isMonitorThreadRunning(uuid)) {} + + progressMonitorService.interrupt(uuid); + + while(progressMonitorService.isMonitorThreadRunning(uuid)) {} + + IRemotingProgressMonitor remotingMonitor = progressMonitorService.getRemotingMonitor(uuid); + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid).postOperation(remotingMonitor); + + } + + @Test + public void testMonitLongRunningMethodWithCancellation() throws InterruptedException { + + final UUID uuid = testService.monitLongRunningMethod(null, null, 0); + final int pollInterval = 1000; + final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult("Cancelled"); + expectedMonitor.setCanceled(true); + expectedMonitor.done(); + + Thread thread = new Thread() { + @Override + public void run() { + try { + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + null, + (IFeedbackGenerator)null, + new NullProgressMonitor()); + } catch (InterruptedException e) { + + } + } + + }; + thread.start(); + while(!progressMonitorService.isMonitorThreadRunning(uuid)) {} + progressMonitorService.cancel(uuid); + while(progressMonitorService.isMonitorThreadRunning(uuid)) {} + IRemotingProgressMonitor remotingMonitor = progressMonitorService.getRemotingMonitor(uuid); + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid).postOperation(remotingMonitor); + + } + + @Test + public void testMonitLongRunningMethodWithWaitForFeedback() throws InterruptedException { + + List feedbacks = Arrays.asList("feedback1", "feedback2"); + List feebackGenerators = new ArrayList(); + final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult("Success"); + for(String feedback : feedbacks) { + feebackGenerators.add(new MockFeedbackGenerator(feedback, 0)); + expectedMonitor.addReport(feedback); + } + expectedMonitor.addReport("Report"); + expectedMonitor.done(); + + final UUID uuid = testService.monitLongRunningMethod(null, feedbacks, 0); + final int pollInterval = 1000; + + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid), + feebackGenerators, + new NullProgressMonitor()); + + } + + @Test + public void testMonitLongRunningMethodWithInconsistentWaitForFeedback() throws InterruptedException { + + List feedbacks = Arrays.asList("feedback1", "feedback2"); + List feebackGenerators = new ArrayList(); + final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult("Success"); + for(String feedback : feedbacks) { + feebackGenerators.add(new MockFeedbackGenerator(feedback, 0)); + expectedMonitor.addReport(feedback); + } + expectedMonitor.addReport("Report"); + expectedMonitor.done(); + + final UUID uuid = testService.monitLongRunningMethod(null, feedbacks, 0); + final int pollInterval = 1000; + + feebackGenerators.remove(1); + + final UUID newUuid = testService.monitLongRunningMethod(null, feedbacks, 0); + + try { + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + newUuid, + pollInterval, + new MockPostMoniteredOperationEnabled(expectedMonitor, newUuid), + feebackGenerators, + new NullProgressMonitor()); + Assert.fail("Exception due to inconsistent number of feedback generators not thrown"); + } catch(IllegalStateException ise) { + + } + } + + @Test + public void testMonitLongRunningMethodWithWaitForFeedbackTimeout() throws InterruptedException { + + List feedbacks = Arrays.asList("feedback1"); + List feebackGenerators = new ArrayList(); + final RemotingProgressMonitor expectedMonitor = new RemotingProgressMonitor(); + expectedMonitor.setResult(new IllegalStateException(new InterruptedException())); + for(String feedback : feedbacks) { + feebackGenerators.add(new MockFeedbackGenerator(feedback, 1000 * 15)); + + } + expectedMonitor.setCanceled(true); + expectedMonitor.setIsFailed(true); + expectedMonitor.done(); + + expectedMonitor.done(); + + final UUID uuid = testService.monitLongRunningMethod(null, feedbacks, 1000 * 5); + final int pollInterval = 1000; + + + try { + CdmStore.getProgressMonitorClientManager().pollMonitor("Testing Progress Monitor", + uuid, + pollInterval, + new MockPostMoniteredOperationEnabled(expectedMonitor, uuid), + feebackGenerators, + new NullProgressMonitor()); + Assert.fail("Exception due to inconsistent number of feedback generators not thrown"); + } catch(IllegalStateException ise) { + + } + } + + + class MockPostMoniteredOperationEnabled implements IPostMoniteredOperationEnabled { + + private RemotingProgressMonitor expectedMonitor; + private UUID monitorUuid; + + public MockPostMoniteredOperationEnabled(RemotingProgressMonitor expectedMonitor, UUID monitorUuid) { + this.expectedMonitor = expectedMonitor; + this.monitorUuid = monitorUuid; + } + /** + * {@inheritDoc} + */ + @Override + public void postOperation(IRemotingProgressMonitor monitor) { + if(expectedMonitor.getResult() instanceof Exception) { + Exception expectedException = (Exception) expectedMonitor.getResult(); + Exception exception = (Exception) monitor.getResult(); + Assert.assertEquals(expectedException.getClass(), expectedException.getClass()); + Assert.assertEquals(expectedException.getMessage(), expectedException.getMessage()); + } else { + Assert.assertEquals(expectedMonitor.getResult(), monitor.getResult()); + } + Assert.assertEquals(expectedMonitor.getReports(), monitor.getReports()); + Assert.assertEquals(expectedMonitor.isCanceled(), monitor.isCanceled()); + Assert.assertEquals(expectedMonitor.isFailed(), monitor.isFailed()); + Assert.assertEquals(expectedMonitor.isDone(), monitor.isDone()); + Assert.assertTrue(!progressMonitorService.isMonitorThreadRunning(monitorUuid)); + } + } + + class MockFeedbackGenerator implements IFeedbackGenerator { + + private String feedback; + private long waitTime; + + public MockFeedbackGenerator(String feedback, long waitTime) { + this.feedback = feedback; + this.waitTime = waitTime; + } + + /** + * {@inheritDoc} + */ + @Override + public void setFeedbackForMonitor(UUID uuid) { + if(waitTime > 0) { + try { + Thread.sleep(waitTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + CdmApplicationState.getCurrentAppConfig().getProgressMonitorService().setFeedback(uuid, feedback); + } + + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceInterceptorTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceInterceptorTest.java new file mode 100644 index 000000000..9eaee83c6 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceInterceptorTest.java @@ -0,0 +1,38 @@ +package eu.etaxonomy.taxeditor.service; + +import java.util.List; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.Test; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.cdm.api.service.ITermService; +import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.TermType; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; + +public class ServiceInterceptorTest extends RemotingSessionAwareTest { + + private static final Logger logger = Logger.getLogger(ServiceInterceptorTest.class); + private final ITermService termService = getRemoteApplicationController().getTermService(); + private static CdmServiceCacher cdmServiceCacher = CdmApplicationState.getCdmServiceCacher(); + + + @Test + public void termServiceInterceptorTest() { + List> terms = termService.listByTermType(TermType.Language, null, null, null, null); + int cacheLanguageSize = 0; + List keys = cdmServiceCacher.getDefaultCache().getKeys(); + for(UUID key : keys) { + if(cdmServiceCacher.getFromCache(key).getClass().equals(Language.class)) { + cacheLanguageSize++; + } + } + Assert.assertEquals(terms.size(), cacheLanguageSize); + // TO DO : get the static termTypeMap from TermServiceRequestExecutor and check the size + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmApplicationStateTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmApplicationStateTest.java new file mode 100644 index 000000000..f09d37a9b --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmApplicationStateTest.java @@ -0,0 +1,31 @@ +// $Id$ +/** +* Copyright (C) 2015 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.session; + +import org.junit.Test; +import org.springframework.util.Assert; +import org.unitils.UnitilsJUnit4; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; + +/** + * @author cmathew + * @date 5 Oct 2015 + * + */ +public class CdmApplicationStateTest extends UnitilsJUnit4 { + + @Test + public void testCdmlibManifestInfoUpdate() { + CdmApplicationState.updateCdmlibManifestInfo(); + Assert.notNull(CdmApplicationState.getCdmlibVersion()); + Assert.notNull(CdmApplicationState.getCdmlibLastModified()); + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.java new file mode 100644 index 000000000..88d5b24a7 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.java @@ -0,0 +1,519 @@ +// $Id$ +/** + * Copyright (C) 2014 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.session; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.hibernate.collection.spi.PersistentCollection; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.service.ICommonService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService; +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.api.service.ITaxonService; +import eu.etaxonomy.cdm.api.service.ITermService; +import eu.etaxonomy.cdm.api.service.IUserService; +import eu.etaxonomy.cdm.api.service.IVocabularyService; +import eu.etaxonomy.cdm.model.agent.AgentBase; +import eu.etaxonomy.cdm.model.agent.Person; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.Credit; +import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.cdm.model.common.Extension; +import eu.etaxonomy.cdm.model.common.IdentifiableSource; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.common.LanguageString; +import eu.etaxonomy.cdm.model.common.TermType; +import eu.etaxonomy.cdm.model.common.TermVocabulary; +import eu.etaxonomy.cdm.model.description.KeyStatement; +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.cdm.model.description.PolytomousKeyNode; +import eu.etaxonomy.cdm.model.media.Rights; +import eu.etaxonomy.cdm.model.taxon.Taxon; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; +import eu.etaxonomy.taxeditor.httpinvoker.TestThread; + +/** + * @author cmathew + * @date 7 Oct 2014 + * + */ +@DataSet +public class CdmEntitySessionAwareTest extends RemotingSessionAwareTest { + + private static final Logger logger = Logger.getLogger(CdmEntitySessionAwareTest.class); + + UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66"); + UUID subKeyUuid = UUID.fromString("9d8bf4f6-a70a-4b80-8556-2ccfb436ff01"); + //UUID polytomousKeyUuid = UUID.fromString("bab66772-2c83-428a-bb6d-655d12ac6097"); + UUID taxon1Uuid = UUID.fromString("2b336df7-29e8-4f79-985f-66502739d22f"); + UUID personUuid = UUID.fromString("945d08f2-eb92-45b6-9252-6275ea6d338b"); + + + + IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService(); + IPolytomousKeyNodeService polytomousKeyNodeService = getRemoteApplicationController().getPolytomousKeyNodeService(); + ICommonService commonService = getRemoteApplicationController().getCommonService(); + ITaxonService taxonService = getRemoteApplicationController().getTaxonService(); + IVocabularyService vocabularyService = getRemoteApplicationController().getVocabularyService(); + ITermService termService = getRemoteApplicationController().getTermService(); + IUserService userService = getRemoteApplicationController().getUserService(); + + //Language english = Language.getLanguageFromUuid(Language.uuidEnglish); + + + + @BeforeClass + public static void initializePolytomousKeyTest() { + } + + + @Test + public void readAllPolytomousKeys() { + List pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null); + Iterator pKeysItr = pKeys.iterator(); + Assert.assertEquals(pKeysItr.next().getUuid(),UUID.fromString("9d8bf4f6-a70a-4b80-8556-2ccfb436ff01")); + Assert.assertEquals(pKeysItr.next().getUuid(),UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66")); + } + + + @Test + //@DataSet("PolytomousKeyTest.readPolytmousKeyData.xml") + public void readPolytmousKeyData() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + Set taxonomicScope = pKey.getTaxonomicScope(); + Iterator tsItr = taxonomicScope.iterator(); + Taxon taxon = tsItr.next(); + + Assert.assertEquals("Achillea sec. Cyprus", taxon.getTitleCache()); + Assert.assertEquals(tsItr.hasNext(), false); + + List credits = pKey.getCredits(); + AgentBase agent = credits.get(0).getAgent(); + Assert.assertEquals(agent.getId(),4809); + Assert.assertEquals(agent.getTitleCache(),"R. A. Graham"); + Assert.assertEquals(credits.get(0).getText(),"Credits Text Test"); + + Set exts = pKey.getExtensions(); + Iterator extItr = exts.iterator(); + Extension ext = extItr.next(); + Assert.assertEquals(ext.getValue(), "http://test.com"); + + Set rights = pKey.getRights(); + Iterator rightsItr = rights.iterator(); + Rights right = rightsItr.next(); + Assert.assertEquals(right.getText(),"Rights Text Test"); + + Set sources = pKey.getSources(); + Iterator sourcesItr = sources.iterator(); + IdentifiableSource source = sourcesItr.next(); + Assert.assertEquals(source.getId(), 23710); + source = sourcesItr.next(); + Assert.assertEquals(source.getId(), 23711); + + // TO DO : Added tests for Annotations , Markers + } + + + + @Test + public void readPolytomousKeyDataFromNodes() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + PolytomousKeyNode rootNode = pKey.getRoot(); + + + Assert.assertEquals(rootNode.getId(), 2750); + + Assert.assertEquals(rootNode.getChildAt(0).getId(), 2751); + Assert.assertEquals(rootNode.getChildAt(0).getParent().getId(), rootNode.getId()); + Assert.assertEquals(rootNode.getKey().getId(), pKey.getId()); + Integer sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(0), "sortIndex"); + Assert.assertEquals(sortIndex, new Integer(0)); + String statement = "Capitula without ligulate ray-florets; leaves entire or subentire"; + Assert.assertEquals(rootNode.getChildAt(0).getStatement().getLabelText(Language.ENGLISH()), statement); + + Assert.assertEquals(rootNode.getChildAt(1).getId(), 2753); + Assert.assertEquals(rootNode.getChildAt(1).getParent().getId(), rootNode.getId()); + Assert.assertEquals(rootNode.getChildAt(1).getKey().getId(), pKey.getId()); + sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(1), "sortIndex"); + Assert.assertEquals(sortIndex, new Integer(1)); + statement = "Capitula with ligulate ray-florets; leaves pinnatisect"; + Assert.assertEquals(rootNode.getChildAt(1).getStatement().getLabelText(Language.ENGLISH()), statement); + + Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getId(), 2754); + Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getParent().getId(), rootNode.getChildAt(1).getId()); + Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getKey().getId(), pKey.getId()); + sortIndex = (Integer)getFieldValueViaReflection(rootNode.getChildAt(1).getChildAt(0), "sortIndex"); + Assert.assertEquals(sortIndex, new Integer(0)); + statement = "Ray-florets yellow"; + Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getStatement().getLabelText(Language.ENGLISH()), statement); + Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getChildAt(0).getTaxon().getTitleCache(), "Achillea arabica Kotschy sec. Cyprus"); + } + + @Test + public void addGrandChildPolytomousKeyNode() { + + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + PolytomousKeyNode rootChildNode = pKey.getRoot().getChildAt(0); + PolytomousKeyNode grandChildNode = PolytomousKeyNode.NewInstance(); + rootChildNode.addChild(grandChildNode); + + polytomousKeyService.merge(pKey, true); + grandChildNode = pKey.getRoot().getChildAt(0).getChildAt(0); + Assert.assertTrue(0 != grandChildNode.getId()); + KeyStatement ks = KeyStatement.NewInstance("test"); + grandChildNode.setStatement(ks); + polytomousKeyService.merge(pKey, true); + + //grandChildNode = pKey.getRoot().getChildAt(0).getChildAt(0); + //KeyStatement ks = grandChildNode.getStatement(); + Assert.assertTrue(0 != ks.getId()); + + } + + @Test + public void addGreatGrandChildPolytomousKeyNode() { + + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + PolytomousKeyNode rootChildNode = pKey.getRoot().getChildAt(0); + PolytomousKeyNode grandChildNode = PolytomousKeyNode.NewInstance(); + rootChildNode.addChild(grandChildNode); + + + polytomousKeyNodeService.merge(grandChildNode); + + + Assert.assertFalse(pKey.getRoot().getChildAt(0).getChildAt(0).getId() == 0); + } + + @Test + public void savePolytomousKeyNodeData() { + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + PolytomousKeyNode pkeynode = pkey.getRoot(); + String newQuestion = "New Question"; + String newStatement = "New Statement"; + + Assert.assertEquals("Question 1",pkeynode.getQuestion().getLabel().get(Language.ENGLISH()).getText()); + for(PolytomousKeyNode node : pkeynode.getChildren()) { + + node.setQuestion(null); + node.setStatement(null); + } + //FIXME:Remoting Add tests for feature after fixing problem + + //Feature feature = pkeynode.getFeature(); + //Assert.assertEquals(feature.getTitleCache(),"Systematics"); + //pkeynode.setFeature(null); + + Assert.assertEquals(pkeynode.getChildAt(0).getModifyingText().get(Language.ENGLISH()).getText(),"Modifying Text 1a"); + String modifyingText = "Modifying Text 1a updated"; + + //pkeynode.getChildAt(0).putModifyingText(Language.ENGLISH(), modifyingText); + + Assert.assertEquals(pkeynode.getChildAt(0).getSubkey().getId(),751); + Assert.assertEquals("Asphodeline", pkeynode.getChildAt(0).getSubkey().getTitleCache()); + Assert.assertNull(pkeynode.getChildAt(1).getTaxon()); + Taxon taxon = CdmBase.deproxy(taxonService.find(taxon1Uuid),Taxon.class); + pkeynode.getChildAt(1).setTaxon(taxon); + + polytomousKeyService.merge(pkey); + + pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + pkeynode = pkey.getRoot(); + for(PolytomousKeyNode node : pkeynode.getChildren()) { + Assert.assertNull(node.getQuestion()); + node.setQuestion(KeyStatement.NewInstance(Language.ENGLISH(),newQuestion)); + Assert.assertNull(node.getStatement()); + node.setStatement(KeyStatement.NewInstance(Language.ENGLISH(),newStatement)); + } + + Assert.assertEquals(pkeynode.getChildAt(1).getTaxon(), taxon); + + polytomousKeyService.merge(pkey); + + pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + pkeynode = pkey.getRoot(); + for(PolytomousKeyNode node : pkeynode.getChildren()) { + Assert.assertNotNull(node.getQuestion()); + Map label = node.getQuestion().getLabel(); + Assert.assertEquals(newQuestion, label.get(Language.ENGLISH()).getText()); + Assert.assertNotNull(node.getStatement()); + Assert.assertEquals(newStatement, node.getStatement().getLabel(Language.ENGLISH()).getText()); + } + //Assert.assertEquals(pkeynode.getFeature().getId(), feature.getId()); + + } + + + @Test + public void savePolytomousKeyNodeDataWithSameSubKey() { + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + PolytomousKeyNode pkeynode = pkey.getRoot(); + + PolytomousKey subkey1 = CdmBase.deproxy(pkeynode.getChildAt(0).getSubkey(), PolytomousKey.class); + String subkey1title = subkey1.getTitleCache(); + subkey1.setTitleCache(subkey1title + "test", true); + + + PolytomousKey subkey2 = CdmBase.deproxy(pkeynode.getChildAt(1).getChildAt(0).getSubkey(), PolytomousKey.class); + String subkey2title = subkey2.getTitleCache(); + subkey2.setTitleCache(subkey2title + "test", true); + + Assert.assertSame(subkey1, subkey2); + + polytomousKeyService.merge(pkey); + } + + @Test + public void savePolytomousKeyNodeDataWithSameSubKeyUsingService() { + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + PolytomousKeyNode pkeynode = pkey.getRoot(); + + PersistentCollection children = (PersistentCollection) pkeynode.getChildren(); + PolytomousKeyNode childNode0 = (PolytomousKeyNode)commonService.get(pkeynode.getUuid(), "children", 0); + PolytomousKey subkey1 = CdmBase.deproxy(childNode0.getSubkey(),PolytomousKey.class); + String subkey1title = subkey1.getTitleCache(); + subkey1.setTitleCache(subkey1title + "test", true); + + PolytomousKeyNode childNode1 = (PolytomousKeyNode)commonService.get(pkeynode.getUuid(), "children", 1); + PolytomousKey subkey2 = CdmBase.deproxy(childNode1.getSubkey(),PolytomousKey.class); + String subkey2title = subkey2.getTitleCache(); + subkey2.setTitleCache(subkey2title + "test", true); + + Assert.assertNotSame(childNode0, childNode1); + + Assert.assertSame(subkey1, subkey2); + + polytomousKeyService.merge(pkey); + } + + + + @Test + public void savePolytomousKeyNodeDataWithSameLanguageInLabel() { + + PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + PolytomousKeyNode pkeynode = pkey.getRoot(); + + Map label1 = pkeynode.getQuestion().getLabel(); + label1.size(); + + + Map label2 = pkeynode.getChildAt(0).getStatement().getLabel(); + label2.size(); + + + polytomousKeyService.merge(pkey); + } + + @Test + public void deleteSubKeyInPolytomousSubKeyWithoutInitializing() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + PolytomousKeyNode rootNode = pKey.getRoot(); + PolytomousKeyNode child = rootNode.getChildAt(0); + PolytomousKey subKey = child.getSubkey(); + + polytomousKeyService.delete(subKey.getUuid()); + + // retrieving subkey shows its null + subKey = CdmBase.deproxy(polytomousKeyService.find(subKeyUuid),PolytomousKey.class); + Assert.assertNull(subKey); + + pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + rootNode = pKey.getRoot(); + child = rootNode.getChildAt(0); + subKey = child.getSubkey(); + // subkey will not be null, because the delete functionality of the subkey + // does not currently delete it from a polytomous key node + + // FIXME: With the new delete functionality this should be null, shouldn't it ? + Assert.assertNotNull(subKey); + } + + + @Test + public void deleteSubKeyInPolytomousNode() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + PolytomousKeyNode rootNode = pKey.getRoot(); + List children = rootNode.getChildren(); + PolytomousKeyNode child = rootNode.getChildAt(0); + polytomousKeyNodeService.delete(child.getUuid(), true); + + pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + rootNode = pKey.getRoot(); + children = rootNode.getChildren(); + Assert.assertFalse(children.contains(child)); + } + + @Test + public void deleteSubKeyInPolytomousSubKeyAfterInitializing() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + PolytomousKeyNode rootNode = pKey.getRoot(); + PolytomousKeyNode child = rootNode.getChildAt(0); + PolytomousKey subKey = child.getSubkey(); + // this call initializes the subkey + subKey.getRoot(); + + polytomousKeyService.delete(subKey); + + // since subKey was initialized before the delete, it will be + // accesible even after the delete. This behaviour is similar + // to hibernate session delete where the deleted object is + // made transient, but not deleted from the object graph + + PolytomousKeyNode subKeyRootNode = subKey.getRoot(); + Assert.assertNotNull(subKey); + } + + @Test + public void saveNewTermVocabulary() { + TermVocabulary termVocabulary = + TermVocabulary.NewInstance(TermType.Feature, + null, + "Untitled", + null, + null); + try { + List> vocabularies = vocabularyService.findByTermType(TermType.Feature); + + for(TermVocabulary vocab : vocabularies) { + vocab.getTermsOrderedByLabels(Language.ENGLISH()); + } + + termVocabulary = vocabularyService.merge(termVocabulary); + vocabularies.add(termVocabulary); + termVocabulary.setLabel("Test"); + vocabularyService.merge(new ArrayList(vocabularies)); + } finally { + vocabularyService.delete(termVocabulary); + } + } + + @Test + public void saveNewTerm() { + UUID vocNameFeatureUuid = UUID.fromString("fa7ca3eef-4092-49e1-beec-ed5096193e5e"); + UUID vocFeatureUuid = UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"); + DefinedTermBase newTerm = TermType.Feature.getEmptyDefinedTermBase(); + newTerm.setLabel("CreateTest"); + + try { + + Assert.assertNotNull(newTerm); + TermVocabulary vocNameFeature = vocabularyService.find(vocNameFeatureUuid); + TermVocabulary vocFeature = vocabularyService.find(vocFeatureUuid); + + List vocs = new ArrayList(); + + vocs.add(vocNameFeature); + vocs.add(vocFeature); + + vocNameFeature.addTerm(newTerm); + + vocs = vocabularyService.merge(vocs); + for(TermVocabulary voc : vocs) { + if(voc.getUuid().equals(vocNameFeatureUuid)) { + vocNameFeature = voc; + } + } + + Assert.assertTrue(vocNameFeature.getTerms().contains(newTerm)); + + for(Object obj : vocNameFeature.getTerms()) { + DefinedTermBase dtb = (DefinedTermBase)obj; + if("CreateTest".equals(dtb.getLabel())) { + newTerm = dtb; + Assert.assertNotNull(dtb.getCreatedBy()); + Assert.assertNotNull(dtb.getCreated()); + } else { + Assert.assertNull(dtb.getCreatedBy()); + } + } + newTerm.setLabel("UpdateTest"); + newTerm = termService.merge(newTerm); + Assert.assertNotNull(newTerm.getUpdatedBy()); + Assert.assertNotNull(newTerm.getUpdated()); + + Assert.assertNull(vocNameFeature.getCreatedBy()); + Assert.assertNull(vocFeature.getCreatedBy()); + } finally { + if(termService.find(newTerm.getUuid()) != null) { + termService.delete(newTerm.getUuid()); + } + } + } + + + @Test + public void updatePerson() { + // Test for #5138 + Person person = (Person) CdmApplicationState.getCurrentAppConfig().getAgentService().load(personUuid); + person.setFirstname("Me"); + CdmApplicationState.getCurrentAppConfig().getAgentService().merge(person); + } + + + @Test + public void createPerson() { + // Test for #5138 + Person person = Person.NewInstance(); + person = (Person) CdmApplicationState.getCurrentAppConfig().getAgentService().merge(person); + person = (Person) CdmApplicationState.getCurrentAppConfig().getAgentService().load(person.getUuid()); + person.setFirstname("Some"); + CdmApplicationState.getCurrentAppConfig().getAgentService().merge(person); + } + + @Test + public void testThreadLocalActiveSession() throws InterruptedException { + MockSessionOwner so1 = new MockSessionOwner(); + final ICdmEntitySession activeSession = getCdmEntitySessionManager().newSession(so1, true); + TestThread thread = new TestThread(true) { + @Override + public void doRun() throws InterruptedException { + ICdmEntitySession threadLocalActiveSession = getCdmEntitySessionManager().getActiveSession(); + Assert.assertEquals(threadLocalActiveSession, activeSession); + } + }; + invokeThread(thread); + MockSessionOwner so2 = new MockSessionOwner(); + ICdmEntitySession newActiveSession = getCdmEntitySessionManager().newSession(so2, true); + Assert.assertFalse(activeSession.equals(newActiveSession)); + thread.unblock(); + + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.java new file mode 100644 index 000000000..06cf961fc --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.java @@ -0,0 +1,99 @@ +package eu.etaxonomy.taxeditor.session; + +import java.util.List; +import java.util.UUID; + +import org.apache.log4j.Logger; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.unitils.dbunit.annotation.DataSet; + +import eu.etaxonomy.cdm.api.service.IPolytomousKeyService; +import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.Language; +import eu.etaxonomy.cdm.model.description.PolytomousKey; +import eu.etaxonomy.taxeditor.httpinvoker.RemotingSessionAwareTest; + +//FIXME:Remoting fix data issue : User#30 +//@Ignore +@DataSet +public class CdmEntitySessionManagerTest extends RemotingSessionAwareTest { + + private static final Logger logger = Logger.getLogger(CdmEntitySessionManagerTest.class); + + + IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService(); + + private final UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66"); + private final Language english = Language.getLanguageFromUuid(Language.uuidEnglish); + + + @BeforeClass + public static void initializeCdmEntitySessionManagerTest() { + } + + + @Test + public void manageNullSessionTest() { + + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + cdmEntitySessionManager.bind(null); + Assert.assertSame(pKey, pKey); + Assert.assertNull(getActiveSession()); + } + + @Test + public void manageSessionWithObjectTest() { + PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + Assert.assertNotNull(getActiveSession()); + + + // FIXME:Remoting fix test of setting root entities + //Assert.assertEquals(rootEntities.size(),1); + //Assert.assertSame(rootEntities.get(0), pKey); + + String upTitleCache = "Updated Title Cache"; + String upStatement = "Updated Statement"; + pKey.setTitleCache(upTitleCache, true); + + pKey.getRoot().getChildAt(0).getStatement().getLabel(english).setText(upStatement); + polytomousKeyService.merge(pKey); + + pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class); + + + Assert.assertEquals(pKey.getTitleCache(), upTitleCache); + Assert.assertEquals(pKey.getRoot().getChildAt(0).getStatement().getLabel(english).getText(), upStatement); + } + + @Test + public void manageSessionWithListTest() { + List pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null); + Assert.assertNotNull(getActiveSession()); + + + // FIXME:Remoting fix test of setting root entities + //Assert.assertEquals(rootEntities.size(),2); + //Assert.assertSame(rootEntities.get(0),pKeys.get(0)); + //Assert.assertEquals(rootEntities.get(0).getUuid(),UUID.fromString("9d8bf4f6-a70a-4b80-8556-2ccfb436ff01")); + //Assert.assertSame(rootEntities.get(1),pKeys.get(1)); + //Assert.assertEquals(rootEntities.get(1).getUuid(),UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66")); + + String upTitleCache = "Updated Title Cache"; + String upStatement = "Updated Statement"; + pKeys.get(0).setTitleCache(upTitleCache, true); + polytomousKeyService.merge(pKeys.get(0)); + pKeys.get(1).getRoot().getChildAt(0).getStatement().getLabel(english).setText(upStatement); + polytomousKeyService.merge(pKeys.get(1)); + + + pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null); + + Assert.assertEquals(pKeys.get(0).getTitleCache(), upTitleCache); + Assert.assertEquals(pKeys.get(1).getRoot().getChildAt(0).getStatement().getLabel(english).getText(), upStatement); + + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/MockSessionOwner.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/MockSessionOwner.java new file mode 100644 index 000000000..d04c17fe4 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/MockSessionOwner.java @@ -0,0 +1,100 @@ +package eu.etaxonomy.taxeditor.session; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.junit.Assert; + +import eu.etaxonomy.cdm.api.application.CdmChangeEvent; +import eu.etaxonomy.cdm.api.application.ICdmChangeListener; +import eu.etaxonomy.cdm.model.common.CdmBase; + +public class MockSessionOwner implements ICdmEntitySessionEnabled, ICdmChangeListener { + + private static final Logger logger = Logger.getLogger(MockSessionOwner.class); + + private final List rootEntities; + private Set expectedUpdatedObjects; + private Set eventUpdatedObjects; + + private ICdmEntitySession session; + + public MockSessionOwner() { + this.rootEntities = null; + this.expectedUpdatedObjects = new HashSet(); + } + +// public MockSessionOwner(Set updatedObjects) { +// this.rootEntities = null; +// this.updatedObjects = updatedObjects; +// } +// +// public MockSessionOwner(List rootEntities) { +// this.rootEntities = rootEntities; +// } + + public void setExpectedUpdatedObjects(Set updatedObjects) { + this.expectedUpdatedObjects = updatedObjects; + } + + public void addExpectedUpdatedObject(T updatedObject) { + this.expectedUpdatedObjects.add(updatedObject); + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession() + */ + @Override + public ICdmEntitySession getCdmEntitySession() { + return session; + } + + public void setCdmEntitySession(ICdmEntitySession session) { + this.session = session;; + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities() + */ + @Override + public List getRootEntities() { + return rootEntities; + } + + public void dispose() { + if(session != null) { + session.dispose(); + logger.info("disposed of session from session owner : " + this); + } + } + + public Set getEventUpdatedObjects() { + return eventUpdatedObjects; + } + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent) + */ + @Override + public void onChange(CdmChangeEvent event) { + eventUpdatedObjects = event.getChangedObjects(); + if(expectedUpdatedObjects != null && !expectedUpdatedObjects.isEmpty()) { + for(CdmBase cb : expectedUpdatedObjects) { + Assert.assertTrue(event.getChangedObjects().contains(cb)); + } + } + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getPropertyPathsMap() + */ + @Override + public Map> getPropertyPathsMap() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/MockConversationEnabled.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/MockConversationEnabled.java new file mode 100644 index 000000000..089a3e04f --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/test/MockConversationEnabled.java @@ -0,0 +1,41 @@ +// $Id$ +/** +* Copyright (C) 2015 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.test; + +import eu.etaxonomy.cdm.api.conversation.ConversationHolder; +import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; +import eu.etaxonomy.cdm.api.conversation.IConversationEnabled; +import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; + +/** + * @author cmathew + * @date 15 Jun 2015 + * + */ +public class MockConversationEnabled implements IConversationEnabled { + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap) + */ + @Override + public void update(CdmDataChangeMap arg0) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder() + */ + @Override + public ConversationHolder getConversationHolder() { + return new ConversationHolderMock(); + } + +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/CdmServerInfoTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/CdmServerInfoTest.java new file mode 100644 index 000000000..d968fe564 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/CdmServerInfoTest.java @@ -0,0 +1,124 @@ +// $Id$ +/** + * Copyright (C) 2015 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.ui.dialogs; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; +import org.unitils.UnitilsJUnit4; + +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.config.CdmSourceException; +import eu.etaxonomy.taxeditor.remoting.server.CDMServerException; +import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo; +import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo.CdmInstanceInfo; + +/** + * @author cmathew + * @date 26 Jan 2015 + * + */ + +public class CdmServerInfoTest extends UnitilsJUnit4 { + + @Test + public void pingServersTest() { + List servers = CdmServerInfo.getCdmServers(); + for(CdmServerInfo server : servers) { + server.pingServer(); + } + } + + + @Ignore // this should be targetting integration or production + @Test + public void pingInstancesTest() { + CdmServerInfo csii = new CdmServerInfo("edit-test", "test.e-taxonomy.eu", 8080); + try { + csii.refreshInstances(); + List instances = csii.getInstances(); + for(CdmInstanceInfo instance : instances) { + Assert.assertTrue(csii.pingInstance(instance, 8080)); + } + } catch (CDMServerException e) { + Assert.fail("Execption should not be thrown here"); + } + } + + @Test + public void refreshWrongInstancesTest() { + CdmServerInfo wrongCsii = new CdmServerInfo("local", "local", 8080); + try { + wrongCsii.refreshInstances(); + List instances = wrongCsii.getInstances(); + Assert.fail("Execption should be thrown here"); + } catch (CDMServerException e) { + + } + } + + @Ignore // this should be targetting integration or production + @Test + public void refreshInstancesTest() throws CDMServerException { + CdmServerInfo cdmServerInfo = new CdmServerInfo("edit-test", "test.e-taxonomy.eu", 8080); + cdmServerInfo.refreshInstances(); + List instances = cdmServerInfo.getInstances(); + Assert.assertTrue(instances != null && !instances.isEmpty()); + } + + @Test + public void compareCdmlibServicesVersionTest() throws CdmSourceException { + String editorVersion = CdmApplicationState.getCdmlibVersion(); + String editorCdmlibLastModified = CdmApplicationState.getCdmlibLastModified(); + Long editorCdmlibLastModifiedLong = Long.valueOf(editorCdmlibLastModified); + + String[] editorVersionSplit = editorVersion.split("\\."); + + Assert.assertEquals(0, CdmServerInfo.compareCdmlibServicesVersion(editorVersion, editorCdmlibLastModified)); + + + int editorVersionMajor = Integer.valueOf(editorVersionSplit[0]); + int editorVersionMinor = Integer.valueOf(editorVersionSplit[1]); + int editorVersionPatch = Integer.valueOf(editorVersionSplit[2]); + + String serverVersionMajorNew = String.valueOf(editorVersionMajor+1) + "." + String.valueOf(editorVersionMinor) + "." + String.valueOf(editorVersionPatch); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionMajorNew, editorCdmlibLastModified) > 0); + + String serverVersionMinorNew = String.valueOf(editorVersionMajor) + "." + String.valueOf(editorVersionMinor+1) + "." + String.valueOf(editorVersionPatch); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionMinorNew, editorCdmlibLastModified) > 0); + + String serverVersionPatchNew = String.valueOf(editorVersionMajor) + "." + String.valueOf(editorVersionMinor) + "." + String.valueOf(editorVersionPatch+1); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionPatchNew, editorCdmlibLastModified) > 0); + + String serverVersionMajorOld = String.valueOf(editorVersionMajor-1) + "." + String.valueOf(editorVersionMinor) + "." + String.valueOf(editorVersionPatch); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionMajorOld, editorCdmlibLastModified) < 0); + + String serverVersionMinorOld = String.valueOf(editorVersionMajor) + "." + String.valueOf(editorVersionMinor-1) + "." + String.valueOf(editorVersionPatch); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionMinorOld, editorCdmlibLastModified) < 0); + + String serverVersionPatchOld = String.valueOf(editorVersionMajor) + "." + String.valueOf(editorVersionMinor) + "." + String.valueOf(editorVersionPatch-1); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(serverVersionPatchOld, editorCdmlibLastModified) < 0); + + String serverCdmlibLastModifiedNew = String.valueOf(editorCdmlibLastModifiedLong+1); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(editorVersion, serverCdmlibLastModifiedNew) > 0); + + String serverCdmlibLastModifiedOld = String.valueOf(editorCdmlibLastModifiedLong-1); + Assert.assertTrue(CdmServerInfo.compareCdmlibServicesVersion(editorVersion, serverCdmlibLastModifiedOld) < 0); + + } + + @Test + public void convertToServerConfigTest() { + + + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/LoginDialogTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/LoginDialogTest.java index 2905ba58b..786f1fd24 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/LoginDialogTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/LoginDialogTest.java @@ -1,13 +1,14 @@ package eu.etaxonomy.taxeditor.ui.dialogs; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; import eu.etaxonomy.taxeditor.test.AbstractEditorTest; - +@Ignore public class LoginDialogTest extends AbstractEditorTest{ - + @Test public void canLoginAsAdmin() throws Exception { bot.menu("General").menu("Login").click(); @@ -16,12 +17,12 @@ public class LoginDialogTest extends AbstractEditorTest{ bot.textWithLabel("Password").setText("00000"); utils.ok(); } - + @Test public void canCancelLogin() throws Exception { bot.menu("General").menu("Login").click(); bot.waitUntil(Conditions.shellIsActive("Login")); utils.cancel(); } - + } diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElementTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElementTest.java index 245f93498..233cd8127 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElementTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElementTest.java @@ -1,19 +1,21 @@ /** - * + * */ package eu.etaxonomy.taxeditor.ui.selection; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; /** - * This test will only test the selection element itself. The test may have to start other - * dialogs open windows before to get at the selection element. Any errors on the way + * This test will only test the selection element itself. The test may have to start other + * dialogs open windows before to get at the selection element. Any errors on the way * should be handled by different tests. - * + * * @author n.hoffmann * */ +@Ignore public class ClassificationSelectionElementTest extends AbstractSelectionElementTest{ @Override public void setup() { @@ -21,7 +23,7 @@ public class ClassificationSelectionElementTest extends AbstractSelectionElement bot.menu("General").menu("New").menu("Taxon").click(); bot.waitUntil(Conditions.shellIsActive("New Entity")); } - + @Test public void canSelectClassification() { utils.openFilteredSelection(0, "Choose a Classification"); diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/NameSelectionElementTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/NameSelectionElementTest.java index a8b653ca5..1f1badc2c 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/NameSelectionElementTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/NameSelectionElementTest.java @@ -1,15 +1,17 @@ /** - * + * */ package eu.etaxonomy.taxeditor.ui.selection; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; /** * @author n.hoffmann * */ +@Ignore public class NameSelectionElementTest extends AbstractSelectionElementTest { @Override public void setup() { @@ -17,7 +19,7 @@ public class NameSelectionElementTest extends AbstractSelectionElementTest { bot.menu("General").menu("New").menu("Taxon").click(); bot.waitUntil(Conditions.shellIsActive("New Entity")); } - + @Test public void canSelectName() { utils.openFilteredSelection(3, "Choose a name"); diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonNodeSelectionElementTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonNodeSelectionElementTest.java index 2b29c8739..16697a485 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonNodeSelectionElementTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonNodeSelectionElementTest.java @@ -1,15 +1,17 @@ /** - * + * */ package eu.etaxonomy.taxeditor.ui.selection; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; /** * @author n.hoffmann * */ +@Ignore public class TaxonNodeSelectionElementTest extends AbstractSelectionElementTest { @Override public void setup() { @@ -17,11 +19,11 @@ public class TaxonNodeSelectionElementTest extends AbstractSelectionElementTest bot.menu("General").menu("New").menu("Taxon").click(); bot.waitUntil(Conditions.shellIsActive("New Entity")); } - + @Test public void canSelectTaxon() { utils.openFilteredSelection(1, "Select parent taxon"); utils.cancel(); } - + } diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonSelectionElementTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonSelectionElementTest.java index af84076b8..fef3859f6 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonSelectionElementTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/selection/TaxonSelectionElementTest.java @@ -1,19 +1,21 @@ /** - * + * */ package eu.etaxonomy.taxeditor.ui.selection; import org.eclipse.swtbot.eclipse.finder.waits.Conditions; +import org.junit.Ignore; import org.junit.Test; /** - * This test will only test the selection element itself. The test may have to start other - * dialogs open windows before to get at the selection element. Any errors on the way + * This test will only test the selection element itself. The test may have to start other + * dialogs open windows before to get at the selection element. Any errors on the way * should be handled by different tests. - * + * * @author n.hoffmann * */ +@Ignore public class TaxonSelectionElementTest extends AbstractSelectionElementTest { @Override public void setup() { @@ -21,7 +23,7 @@ public class TaxonSelectionElementTest extends AbstractSelectionElementTest { bot.menu("General").menu("New").menu("Taxon").click(); bot.waitUntil(Conditions.shellIsActive("New Entity")); } - + @Test public void canSelectTaxon() { utils.openFilteredSelection(2, "Choose a taxon"); diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/util/H2DbSupport.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/util/H2DbSupport.java new file mode 100644 index 000000000..2dddbf52e --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/util/H2DbSupport.java @@ -0,0 +1,166 @@ +package eu.etaxonomy.taxeditor.util; + +/** + * based on from http://code.google.com/p/java-tester/source/browse/trunk/src/main/java/org/jtester/unitils/database/H2DbSupport.java + */ + + +import java.util.Set; + +import org.unitils.core.dbsupport.DbSupport; + +public class H2DbSupport extends DbSupport { + /** + * Creates support for HsqlDb databases. + */ + public H2DbSupport() { + super("h2"); + } + + @Override + public Set getColumnNames(String tableName) { + return getSQLHandler().getItemsAsStringSet( + "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '" + tableName + + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'"); + } + + @Override + public Set getTableNames() { + return getSQLHandler().getItemsAsStringSet( + "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'TABLE' AND TABLE_SCHEMA = '" + + getSchemaName() + "'"); + } + + @Override + public Set getViewNames() { + return getSQLHandler().getItemsAsStringSet( + "select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA = '" + + getSchemaName() + "'"); + } + + @Override + public Set getSequenceNames() { + return getSQLHandler().getItemsAsStringSet( + "select SEQUENCE_NAME from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '" + + getSchemaName() + "'"); + } + + @Override + public Set getTriggerNames() { + return getSQLHandler().getItemsAsStringSet( + "select TRIGGER_NAME from INFORMATION_SCHEMA.TRIGGERS where TRIGGER_SCHEMA = '" + getSchemaName() + + "'"); + } + + @Override + public long getSequenceValue(String sequenceName) { + return getSQLHandler().getItemAsLong( + "select CURRENT_VALUE from INFORMATION_SCHEMA.SEQUENCES where SEQUENCE_SCHEMA = '" + + getSchemaName() + "' and SEQUENCE_NAME = '" + sequenceName + "'"); + } + + @Override + public boolean supportsSequences() { + return true; + } + + @Override + public boolean supportsTriggers() { + return true; + } + + @Override + public boolean supportsIdentityColumns() { + return true; + } + + @Override + public void incrementSequenceToValue(String sequenceName, long newSequenceValue) { + getSQLHandler().executeUpdate( + "alter sequence " + qualified(sequenceName) + " restart with " + newSequenceValue); + } + + @Override + public void incrementIdentityColumnToValue(String tableName, String identityColumnName, long identityValue) { + getSQLHandler().executeUpdate( + "alter table " + qualified(tableName) + " alter column " + quoted(identityColumnName) + + " RESTART WITH " + identityValue); + } + + @Override + public void disableReferentialConstraints() { + Set tableNames = getTableNames(); + for (String tableName : tableNames) { + disableReferentialConstraints(tableName); + } + } + + @Override + public void disableValueConstraints() { + Set tableNames = getTableNames(); + for (String tableName : tableNames) { + disableValueConstraints(tableName); + } + } + + private void disableReferentialConstraints(String tableName) { + Set constraintNames = this.getForeignKeyConstraintNames(tableName); + for (String constraintName : constraintNames) { + this.removeForeignKeyConstraint(tableName, constraintName); + } + } + + private void disableValueConstraints(String tableName) { + Set primaryKeyColumnNames = this.getPrimaryKeyColumnNames(tableName); + + Set notNullColumnNames = this.getNotNullColummnNames(tableName); + for (String notNullColumnName : notNullColumnNames) { + if (primaryKeyColumnNames.contains(notNullColumnName)) { + continue; + } + this.removeNotNullConstraint(tableName, notNullColumnName); + } + } + + /** + * Gets the names of all identity columns of the given table. + *

+ * todo check, at this moment the PK columns are returned + * + * @param tableName The table, not null + * @return The names of the identity columns of the table with the given name + */ + @Override + public Set getIdentityColumnNames(String tableName) { + return getPrimaryKeyColumnNames(tableName); + } + + private Set getPrimaryKeyColumnNames(String tableName) { + return getSQLHandler().getItemsAsStringSet( + "select COLUMN_NAME from INFORMATION_SCHEMA.INDEXES where PRIMARY_KEY=TRUE AND TABLE_NAME = '" + + tableName + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'"); + } + + private Set getNotNullColummnNames(String tableName) { + return getSQLHandler().getItemsAsStringSet( + "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE = 'NO' AND TABLE_NAME = '" + + tableName + "' AND TABLE_SCHEMA = '" + getSchemaName() + "'"); + } + + private Set getForeignKeyConstraintNames(String tableName) { + return getSQLHandler().getItemsAsStringSet( + "select CONSTRAINT_NAME from INFORMATION_SCHEMA.CONSTRAINTS " + + "where CONSTRAINT_TYPE = 'REFERENTIAL' AND TABLE_NAME = '" + tableName + + "' AND CONSTRAINT_SCHEMA = '" + getSchemaName() + "'"); + } + + private void removeForeignKeyConstraint(String tableName, String constraintName) { + getSQLHandler().executeUpdate( + "alter table " + qualified(tableName) + " drop constraint " + quoted(constraintName)); + } + + private void removeNotNullConstraint(String tableName, String columnName) { + getSQLHandler().executeUpdate( + "alter table " + qualified(tableName) + " alter column " + quoted(columnName) + " set null"); + } +} diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/cdm.datasources.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/cdm.datasources.xml new file mode 100644 index 000000000..be23b82da --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/cdm.datasources.xml @@ -0,0 +1,13 @@ + + + ls + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/mgd.datasources.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/mgd.datasources.xml new file mode 100644 index 000000000..353295173 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/mgd.datasources.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/test.mgd.datasources.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/test.mgd.datasources.xml new file mode 100644 index 000000000..38be93b7f --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/.cdmLibrary/writableResources/test.mgd.datasources.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/datasources.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/datasources.xml new file mode 100644 index 000000000..7f9b66525 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/datasources.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml new file mode 100644 index 000000000..6346576d2 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml new file mode 100644 index 000000000..dda9952c1 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml new file mode 100644 index 000000000..babf19bde --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml new file mode 100644 index 000000000..c8141542b --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.xml new file mode 100644 index 000000000..ec6b58042 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/PolytomousKeyViewPartTest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.xml new file mode 100644 index 000000000..b0afec078 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/RemotingCdmUpdateOperationTest.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.xml new file mode 100644 index 000000000..5d91d4033 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNameEditorTest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.testDeleteClassificationWithDeleteChildren.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.testDeleteClassificationWithDeleteChildren.xml new file mode 100644 index 000000000..fec922107 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.testDeleteClassificationWithDeleteChildren.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.xml new file mode 100644 index 000000000..80bb4a950 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/operation/TaxonNavigatorTest.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceExportTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceExportTest.xml new file mode 100644 index 000000000..b0afec078 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceExportTest.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceImportTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceImportTest.xml new file mode 100644 index 000000000..e6c8bef9a --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/service/IOServiceImportTest.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.xml new file mode 100644 index 000000000..931c381e9 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionAwareTest.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.xml new file mode 100644 index 000000000..f5683e0bd --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.h2.db b/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.h2.db new file mode 100644 index 000000000..98a3b7767 Binary files /dev/null and b/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.h2.db differ diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.trace.db b/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.trace.db new file mode 100644 index 000000000..934783e16 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/h2/cdmTest.trace.db @@ -0,0 +1,7659 @@ +06-15 17:37:28 jdbc[2]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmDataSource.testConnection(CdmDataSource.java:33) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:292) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:281) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage$1.widgetSelected(CdmDataSourceCredentialsWizardPage.java:165) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.specificExecute(CreateDataSourceHandler.java:41) + at eu.etaxonomy.taxeditor.view.datasource.handler.AbstractDataSourceHandler.execute(AbstractDataSourceHandler.java:37) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.execute(CreateDataSourceHandler.java:1) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 58 more +06-15 17:37:28 jdbc[2]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmDataSource.testConnection(CdmDataSource.java:33) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:292) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:281) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage$1.widgetSelected(CdmDataSourceCredentialsWizardPage.java:165) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.specificExecute(CreateDataSourceHandler.java:41) + at eu.etaxonomy.taxeditor.view.datasource.handler.AbstractDataSourceHandler.execute(AbstractDataSourceHandler.java:37) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.execute(CreateDataSourceHandler.java:1) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 58 more +06-15 17:37:28 jdbc[2]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmDataSource.testConnection(CdmDataSource.java:33) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:292) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:281) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage$1.widgetSelected(CdmDataSourceCredentialsWizardPage.java:165) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.specificExecute(CreateDataSourceHandler.java:41) + at eu.etaxonomy.taxeditor.view.datasource.handler.AbstractDataSourceHandler.execute(AbstractDataSourceHandler.java:37) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.execute(CreateDataSourceHandler.java:1) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 58 more +06-15 17:37:28 jdbc[2]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.testConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.checkConnection(CdmDataSourceBase.java:110) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.checkConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:72) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmDataSource.testConnection(CdmDataSource.java:33) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:292) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:281) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage$1.widgetSelected(CdmDataSourceCredentialsWizardPage.java:165) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.specificExecute(CreateDataSourceHandler.java:41) + at eu.etaxonomy.taxeditor.view.datasource.handler.AbstractDataSourceHandler.execute(AbstractDataSourceHandler.java:37) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.execute(CreateDataSourceHandler.java:1) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 58 more +06-15 17:37:28 jdbc[2]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmDataSource.testConnection(CdmDataSource.java:33) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:292) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage.testDbConfiguration(CdmDataSourceCredentialsWizardPage.java:281) + at eu.etaxonomy.taxeditor.datasource.wizard.CdmDataSourceCredentialsWizardPage$1.widgetSelected(CdmDataSourceCredentialsWizardPage.java:165) + at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.specificExecute(CreateDataSourceHandler.java:41) + at eu.etaxonomy.taxeditor.view.datasource.handler.AbstractDataSourceHandler.execute(AbstractDataSourceHandler.java:37) + at eu.etaxonomy.taxeditor.view.datasource.handler.CreateDataSourceHandler.execute(CreateDataSourceHandler.java:1) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 58 more +06-15 17:37:31 jdbc[3]: exception +org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement: +SELECT value FROM CdmMetaData WHERE propertyname=0 [42102-170] +06-15 17:37:34 jdbc[6]: exception +org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement: +SELECT value FROM CdmMetaData WHERE propertyname=0 [42102-170] +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.testConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.checkConnection(CdmDataSourceBase.java:110) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.checkConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:72) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getDbSchemaVersion(CdmDataSourceBase.java:156) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getDbSchemaVersion(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.isDbEmpty(CdmDataSourceBase.java:165) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.isDbEmpty(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.checkIsNonEmptyCdmDatabase(CdmStoreConnector.java:231) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:73) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.testConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.checkConnection(CdmDataSourceBase.java:110) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.checkConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.handler.ChangeConnectionHandler.execute(ChangeConnectionHandler.java:49) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) + at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) + at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) + at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) + at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at eu.etaxonomy.taxeditor.Application.start(Application.java:24) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:606) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + at org.eclipse.equinox.launcher.Main.main(Main.java:1386) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:67) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getConnection(CdmDataSourceBase.java:45) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.executeQuery(CdmDataSourceBase.java:182) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.executeQuery(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getSingleValue(CdmDataSourceBase.java:136) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getSingleValue(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.getMetaDataMap(CdmDataSourceBase.java:288) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.getMetaDataMap(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:84) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.testConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.checkConnection(CdmDataSourceBase.java:110) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.checkConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.checkDatabaseReachable(CdmStoreConnector.java:253) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:69) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:06 jdbc[7]: java.lang.Exception: Open Stack Trace + at org.h2.util.CloseWatcher.register(CloseWatcher.java:99) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:121) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at java.sql.DriverManager.getConnection(DriverManager.java:571) + at java.sql.DriverManager.getConnection(DriverManager.java:215) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.testConnection(CdmDataSourceBase.java:93) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.testConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.cdm.database.CdmDataSourceBase.checkConnection(CdmDataSourceBase.java:110) + at eu.etaxonomy.cdm.database.CdmPersistentDataSource.checkConnection(CdmPersistentDataSource.java:51) + at eu.etaxonomy.taxeditor.view.datasource.CdmMetaDataAwareDataSourceContainer.getMetaDataFromDataSource(CdmMetaDataAwareDataSourceContainer.java:72) + at eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart$DataSourceJob.run(CdmDataSourceViewPart.java:140) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +org.h2.message.DbException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.message.DbException.get(DbException.java:135) + at org.h2.jdbc.JdbcConnection.closeOld(JdbcConnection.java:175) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:120) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:93) + at org.h2.Driver.connect(Driver.java:72) + at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) + at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582) + at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556) + at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545) + at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388) + at eu.etaxonomy.cdm.database.LocalH2.createDataSource(LocalH2.java:88) + at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) + at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) + at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) + at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) + at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77) + at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2276) + at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2272) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1741) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +Caused by: org.h2.jdbc.JdbcSQLException: The connection was not closed by the application and is garbage collected [90018-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + ... 60 more +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement: +alter table Address drop constraint FK1ED033D44FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement: +alter table Address drop constraint FK1ED033D4BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement: +alter table Address drop constraint FK1ED033D4CDD3C17E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement: +alter table Address drop constraint FK1ED033D4132A2FE8 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ADDRESS_AUD" not found; SQL statement: +alter table Address_AUD drop constraint FK115657A534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement: +alter table AgentBase drop constraint FK1205D3564FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement: +alter table AgentBase drop constraint FK1205D356BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement: +alter table AgentBase drop constraint FK1205D356A830578 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AUD" not found; SQL statement: +alter table AgentBase_AUD drop constraint FK29CC662734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ADDRESS" not found; SQL statement: +alter table AgentBase_Address drop constraint FK1EDFF7EB50751EC5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ADDRESS" not found; SQL statement: +alter table AgentBase_Address drop constraint FK1EDFF7EB86EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ADDRESS_AUD" not found; SQL statement: +alter table AgentBase_Address_AUD drop constraint FK3D28383C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AGENTBASE" not found; SQL statement: +alter table AgentBase_AgentBase drop constraint FK4D34EDADE9E535F9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AGENTBASE" not found; SQL statement: +alter table AgentBase_AgentBase drop constraint FK4D34EDAD1C0E9907 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AGENTBASE_AUD" not found; SQL statement: +alter table AgentBase_AgentBase_AUD drop constraint FKA8A87CFE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ANNOTATION" not found; SQL statement: +alter table AgentBase_Annotation drop constraint FK44D5F7D81E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ANNOTATION" not found; SQL statement: +alter table AgentBase_Annotation drop constraint FK44D5F7D886EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ANNOTATION_AUD" not found; SQL statement: +alter table AgentBase_Annotation_AUD drop constraint FK771279A934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CREDIT" not found; SQL statement: +alter table AgentBase_Credit drop constraint FK2636742232D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CREDIT" not found; SQL statement: +alter table AgentBase_Credit drop constraint FK2636742286EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CREDIT_AUD" not found; SQL statement: +alter table AgentBase_Credit_AUD drop constraint FK7FE7C0F334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_DEFINEDTERMBASE" not found; SQL statement: +alter table AgentBase_DefinedTermBase drop constraint FK6665C77DF116FEB0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_DEFINEDTERMBASE" not found; SQL statement: +alter table AgentBase_DefinedTermBase drop constraint FK6665C77D8D9AB196 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_DEFINEDTERMBASE_AUD" not found; SQL statement: +alter table AgentBase_DefinedTermBase_AUD drop constraint FKA737EECE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_EXTENSION" not found; SQL statement: +alter table AgentBase_Extension drop constraint FK8E1E5676927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_EXTENSION" not found; SQL statement: +alter table AgentBase_Extension drop constraint FK8E1E567686EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_EXTENSION_AUD" not found; SQL statement: +alter table AgentBase_Extension_AUD drop constraint FK11AE594734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_IDENTIFIER" not found; SQL statement: +alter table AgentBase_Identifier drop constraint FK410EB952E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_IDENTIFIER" not found; SQL statement: +alter table AgentBase_Identifier drop constraint FK410EB95286EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table AgentBase_Identifier_AUD drop constraint FK3DB9EE2334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MARKER" not found; SQL statement: +alter table AgentBase_Marker drop constraint FK365D5D63777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MARKER" not found; SQL statement: +alter table AgentBase_Marker drop constraint FK365D5D6386EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MARKER_AUD" not found; SQL statement: +alter table AgentBase_Marker_AUD drop constraint FKE40621B434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MEDIA" not found; SQL statement: +alter table AgentBase_Media drop constraint FKE8FC5D9BC2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MEDIA" not found; SQL statement: +alter table AgentBase_Media drop constraint FKE8FC5D9B86EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MEDIA_AUD" not found; SQL statement: +alter table AgentBase_Media_AUD drop constraint FK323A45EC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table AgentBase_OriginalSourceBase drop constraint FKB482C5E63A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table AgentBase_OriginalSourceBase drop constraint FKB482C5E686EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table AgentBase_OriginalSourceBase_AUD drop constraint FK886D90B734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_RIGHTSINFO" not found; SQL statement: +alter table AgentBase_RightsInfo drop constraint FK4FD6A3CEC13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_RIGHTSINFO" not found; SQL statement: +alter table AgentBase_RightsInfo drop constraint FK4FD6A3CE86EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table AgentBase_RightsInfo_AUD drop constraint FK79503A9F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_EMAILADDRESSES" not found; SQL statement: +alter table AgentBase_contact_emailaddresses drop constraint FK4BD2B08E86EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_EMAILADDRESSES_AUD" not found; SQL statement: +alter table AgentBase_contact_emailaddresses_AUD drop constraint FKCAF7E75F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_FAXNUMBERS" not found; SQL statement: +alter table AgentBase_contact_faxnumbers drop constraint FK52E1AD9586EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_FAXNUMBERS_AUD" not found; SQL statement: +alter table AgentBase_contact_faxnumbers_AUD drop constraint FK88A308E634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_PHONENUMBERS" not found; SQL statement: +alter table AgentBase_contact_phonenumbers drop constraint FKC171CC2486EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_PHONENUMBERS_AUD" not found; SQL statement: +alter table AgentBase_contact_phonenumbers_AUD drop constraint FKDDD347F534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_URLS" not found; SQL statement: +alter table AgentBase_contact_urls drop constraint FK9A9643EC86EFC5D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CONTACT_URLS_AUD" not found; SQL statement: +alter table AgentBase_contact_urls_AUD drop constraint FK1CE69BBD34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B4164FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B416BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B4163DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B4166D2CE418 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B4163781DA30 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B416403E17F4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B416AFCA96F8 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement: +alter table Amplification drop constraint FK9DA6B4161600EAB3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD34FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD3BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD3614CEB1F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD3DEC4385F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD3E671A9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement: +alter table AmplificationResult drop constraint FK484B7FD3825BDDD3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_AUD" not found; SQL statement: +alter table AmplificationResult_AUD drop constraint FK343D8C2434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_ANNOTATION" not found; SQL statement: +alter table AmplificationResult_Annotation drop constraint FKFE4A8B3B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_ANNOTATION" not found; SQL statement: +alter table AmplificationResult_Annotation drop constraint FKFE4A8B3BD320A65F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_ANNOTATION_AUD" not found; SQL statement: +alter table AmplificationResult_Annotation_AUD drop constraint FK7378A38C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_MARKER" not found; SQL statement: +alter table AmplificationResult_Marker drop constraint FK5B911A46777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_MARKER" not found; SQL statement: +alter table AmplificationResult_Marker drop constraint FK5B911A46D320A65F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_MARKER_AUD" not found; SQL statement: +alter table AmplificationResult_Marker_AUD drop constraint FK9D7AB51734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_AUD" not found; SQL statement: +alter table Amplification_AUD drop constraint FK448EE6E734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_ANNOTATION" not found; SQL statement: +alter table Amplification_Annotation drop constraint FK6B251F181E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_ANNOTATION" not found; SQL statement: +alter table Amplification_Annotation drop constraint FK6B251F18614CEB1F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_ANNOTATION_AUD" not found; SQL statement: +alter table Amplification_Annotation_AUD drop constraint FK6FC00E934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_MARKER" not found; SQL statement: +alter table Amplification_Marker drop constraint FK46E224A3777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_MARKER" not found; SQL statement: +alter table Amplification_Marker drop constraint FK46E224A3614CEB1F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_MARKER_AUD" not found; SQL statement: +alter table Amplification_Marker_AUD drop constraint FKA5548F434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement: +alter table Annotation drop constraint FK1A21C74F4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement: +alter table Annotation drop constraint FK1A21C74FBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement: +alter table Annotation drop constraint FK1A21C74FE8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement: +alter table Annotation drop constraint FK1A21C74FDF299D00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement: +alter table Annotation drop constraint FK1A21C74FE7692740 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_AUD" not found; SQL statement: +alter table Annotation_AUD drop constraint FK1A6BB5A034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_ANNOTATION" not found; SQL statement: +alter table Annotation_Annotation drop constraint FKC99DFE3F1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_ANNOTATION" not found; SQL statement: +alter table Annotation_Annotation drop constraint FKC99DFE3F994CCE20 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_ANNOTATION_AUD" not found; SQL statement: +alter table Annotation_Annotation_AUD drop constraint FKB212F49034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_MARKER" not found; SQL statement: +alter table Annotation_Marker drop constraint FKB17EAF4A777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_MARKER" not found; SQL statement: +alter table Annotation_Marker drop constraint FKB17EAF4A994CCE20 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_MARKER_AUD" not found; SQL statement: +alter table Annotation_Marker_AUD drop constraint FK68CE281B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement: +alter table CdmMetaData drop constraint FK6EA78F7B4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement: +alter table Classification drop constraint FKDB1100064FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement: +alter table Classification drop constraint FKDB110006BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement: +alter table Classification drop constraint FKDB11000677E2F09E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement: +alter table Classification drop constraint FKDB1100068D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement: +alter table Classification drop constraint FKDB110006D1E08681 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_AUD" not found; SQL statement: +alter table Classification_AUD drop constraint FKEB11BAD734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ANNOTATION" not found; SQL statement: +alter table Classification_Annotation drop constraint FKC978FD281E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ANNOTATION" not found; SQL statement: +alter table Classification_Annotation drop constraint FKC978FD2884A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ANNOTATION_AUD" not found; SQL statement: +alter table Classification_Annotation_AUD drop constraint FK3D1256F934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_CREDIT" not found; SQL statement: +alter table Classification_Credit drop constraint FK4950A17232D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_CREDIT" not found; SQL statement: +alter table Classification_Credit drop constraint FK4950A17284A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_CREDIT_AUD" not found; SQL statement: +alter table Classification_Credit_AUD drop constraint FK48AC64334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement: +alter table Classification_Description drop constraint FK382EB1232BEBA58D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement: +alter table Classification_Description drop constraint FK382EB12328459272 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement: +alter table Classification_Description drop constraint FK382EB12384A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION_AUD" not found; SQL statement: +alter table Classification_Description_AUD drop constraint FK3187957434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_EXTENSION" not found; SQL statement: +alter table Classification_Extension drop constraint FK715D6726927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_EXTENSION" not found; SQL statement: +alter table Classification_Extension drop constraint FK715D672684A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_EXTENSION_AUD" not found; SQL statement: +alter table Classification_Extension_AUD drop constraint FK289591F734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_GEOSCOPE" not found; SQL statement: +alter table Classification_GeoScope drop constraint FK379FE5BC86D04E74 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_GEOSCOPE" not found; SQL statement: +alter table Classification_GeoScope drop constraint FK379FE5BC84A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_GEOSCOPE_AUD" not found; SQL statement: +alter table Classification_GeoScope_AUD drop constraint FKF5AAD58D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_IDENTIFIER" not found; SQL statement: +alter table Classification_Identifier drop constraint FKC5B1BEA2E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_IDENTIFIER" not found; SQL statement: +alter table Classification_Identifier drop constraint FKC5B1BEA284A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_IDENTIFIER_AUD" not found; SQL statement: +alter table Classification_Identifier_AUD drop constraint FK3B9CB7334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_MARKER" not found; SQL statement: +alter table Classification_Marker drop constraint FK59778AB3777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_MARKER" not found; SQL statement: +alter table Classification_Marker drop constraint FK59778AB384A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_MARKER_AUD" not found; SQL statement: +alter table Classification_Marker_AUD drop constraint FK68A9270434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Classification_OriginalSourceBase drop constraint FK91B37B363A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Classification_OriginalSourceBase drop constraint FK91B37B3684A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table Classification_OriginalSourceBase_AUD drop constraint FK48A31E0734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_RIGHTSINFO" not found; SQL statement: +alter table Classification_RightsInfo drop constraint FKD479A91EC13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_RIGHTSINFO" not found; SQL statement: +alter table Classification_RightsInfo drop constraint FKD479A91E84A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_RIGHTSINFO_AUD" not found; SQL statement: +alter table Classification_RightsInfo_AUD drop constraint FK3F5017EF34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement: +alter table Collection drop constraint FKF078ABE4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement: +alter table Collection drop constraint FKF078ABEBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement: +alter table Collection drop constraint FKF078ABE16B9CA77 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement: +alter table Collection drop constraint FKF078ABECEB38EFF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_AUD" not found; SQL statement: +alter table Collection_AUD drop constraint FKD6D4298F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ANNOTATION" not found; SQL statement: +alter table Collection_Annotation drop constraint FKEA970F701E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ANNOTATION" not found; SQL statement: +alter table Collection_Annotation drop constraint FKEA970F70EB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ANNOTATION_AUD" not found; SQL statement: +alter table Collection_Annotation_AUD drop constraint FKA0CE054134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_CREDIT" not found; SQL statement: +alter table Collection_Credit drop constraint FKE0A317BA32D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_CREDIT" not found; SQL statement: +alter table Collection_Credit drop constraint FKE0A317BAEB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_CREDIT_AUD" not found; SQL statement: +alter table Collection_Credit_AUD drop constraint FK25A8D88B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_EXTENSION" not found; SQL statement: +alter table Collection_Extension drop constraint FKF68FEBDE927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_EXTENSION" not found; SQL statement: +alter table Collection_Extension drop constraint FKF68FEBDEEB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_EXTENSION_AUD" not found; SQL statement: +alter table Collection_Extension_AUD drop constraint FK1306FAAF34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_IDENTIFIER" not found; SQL statement: +alter table Collection_Identifier drop constraint FKE6CFD0EAE12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_IDENTIFIER" not found; SQL statement: +alter table Collection_Identifier drop constraint FKE6CFD0EAEB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_IDENTIFIER_AUD" not found; SQL statement: +alter table Collection_Identifier_AUD drop constraint FK677579BB34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MARKER" not found; SQL statement: +alter table Collection_Marker drop constraint FKF0CA00FB777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MARKER" not found; SQL statement: +alter table Collection_Marker drop constraint FKF0CA00FBEB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MARKER_AUD" not found; SQL statement: +alter table Collection_Marker_AUD drop constraint FK89C7394C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MEDIA" not found; SQL statement: +alter table Collection_Media drop constraint FK7320E703C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MEDIA" not found; SQL statement: +alter table Collection_Media drop constraint FK7320E703EB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MEDIA_AUD" not found; SQL statement: +alter table Collection_Media_AUD drop constraint FK9AABDB5434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Collection_OriginalSourceBase drop constraint FK37DEC57E3A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Collection_OriginalSourceBase drop constraint FK37DEC57EEB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table Collection_OriginalSourceBase_AUD drop constraint FKF810044F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_RIGHTSINFO" not found; SQL statement: +alter table Collection_RightsInfo drop constraint FKF597BB66C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_RIGHTSINFO" not found; SQL statement: +alter table Collection_RightsInfo drop constraint FKF597BB66EB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "COLLECTION_RIGHTSINFO_AUD" not found; SQL statement: +alter table Collection_RightsInfo_AUD drop constraint FKA30BC63734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement: +alter table Credit drop constraint FK78CA97194FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement: +alter table Credit drop constraint FK78CA9719BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement: +alter table Credit drop constraint FK78CA9719E8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement: +alter table Credit drop constraint FK78CA9719F7976FC5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_AUD" not found; SQL statement: +alter table Credit_AUD drop constraint FK5533906A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_ANNOTATION" not found; SQL statement: +alter table Credit_Annotation drop constraint FKE8DA4C351E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_ANNOTATION" not found; SQL statement: +alter table Credit_Annotation drop constraint FKE8DA4C354CF694E0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_ANNOTATION_AUD" not found; SQL statement: +alter table Credit_Annotation_AUD drop constraint FK1DEB578634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_MARKER" not found; SQL statement: +alter table Credit_Marker drop constraint FK10CC6840777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_MARKER" not found; SQL statement: +alter table Credit_Marker drop constraint FK10CC68404CF694E0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "CREDIT_MARKER_AUD" not found; SQL statement: +alter table Credit_Marker_AUD drop constraint FK880A761134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A664FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A66BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A663B0DA0EF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A66D040DBF0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A6647AF954C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A6624AF3F70 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A6636C6F6F6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A66CC0240B6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement: +alter table DefinedTermBase drop constraint FK2E340A6688206484 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_AUD" not found; SQL statement: +alter table DefinedTermBase_AUD drop constraint FK86E8953734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ANNOTATION" not found; SQL statement: +alter table DefinedTermBase_Annotation drop constraint FK589B6C81E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ANNOTATION" not found; SQL statement: +alter table DefinedTermBase_Annotation drop constraint FK589B6C8C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ANNOTATION_AUD" not found; SQL statement: +alter table DefinedTermBase_Annotation_AUD drop constraint FK28ED409934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CONTINENT" not found; SQL statement: +alter table DefinedTermBase_Continent drop constraint FK45F60AFB9AEE7205 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CONTINENT" not found; SQL statement: +alter table DefinedTermBase_Continent drop constraint FK45F60AFB901A60CE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CONTINENT_AUD" not found; SQL statement: +alter table DefinedTermBase_Continent_AUD drop constraint FKF5DE434C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_COUNTRY" not found; SQL statement: +alter table DefinedTermBase_Country drop constraint FKA2ADDA9D47CE41A0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_COUNTRY" not found; SQL statement: +alter table DefinedTermBase_Country drop constraint FKA2ADDA9DCE5C0F9E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_COUNTRY_AUD" not found; SQL statement: +alter table DefinedTermBase_Country_AUD drop constraint FK8D0171EE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CREDIT" not found; SQL statement: +alter table DefinedTermBase_Credit drop constraint FK78FF2B1232D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CREDIT" not found; SQL statement: +alter table DefinedTermBase_Credit drop constraint FK78FF2B12C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CREDIT_AUD" not found; SQL statement: +alter table DefinedTermBase_Credit_AUD drop constraint FK409B7FE334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_EXTENSION" not found; SQL statement: +alter table DefinedTermBase_Extension drop constraint FK397EF986927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_EXTENSION" not found; SQL statement: +alter table DefinedTermBase_Extension drop constraint FK397EF986C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_EXTENSION_AUD" not found; SQL statement: +alter table DefinedTermBase_Extension_AUD drop constraint FK6E6F45734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_IDENTIFIER" not found; SQL statement: +alter table DefinedTermBase_Identifier drop constraint FK1C27842E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_IDENTIFIER" not found; SQL statement: +alter table DefinedTermBase_Identifier drop constraint FK1C27842C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table DefinedTermBase_Identifier_AUD drop constraint FKEF94B51334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MARKER" not found; SQL statement: +alter table DefinedTermBase_Marker drop constraint FK89261453777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MARKER" not found; SQL statement: +alter table DefinedTermBase_Marker drop constraint FK89261453C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MARKER_AUD" not found; SQL statement: +alter table DefinedTermBase_Marker_AUD drop constraint FKA4B9E0A434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEASUREMENTUNIT" not found; SQL statement: +alter table DefinedTermBase_MeasurementUnit drop constraint FKE9D17767F3BB39BD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEASUREMENTUNIT" not found; SQL statement: +alter table DefinedTermBase_MeasurementUnit drop constraint FKE9D17767D0BDAE9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEASUREMENTUNIT_AUD" not found; SQL statement: +alter table DefinedTermBase_MeasurementUnit_AUD drop constraint FK2C1599B834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEDIA" not found; SQL statement: +alter table DefinedTermBase_Media drop constraint FK6FC908ABC2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEDIA" not found; SQL statement: +alter table DefinedTermBase_Media drop constraint FK6FC908ABC0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEDIA_AUD" not found; SQL statement: +alter table DefinedTermBase_Media_AUD drop constraint FKDD9AE8FC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DefinedTermBase_OriginalSourceBase drop constraint FKDCC094D63A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DefinedTermBase_OriginalSourceBase drop constraint FKDCC094D6C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table DefinedTermBase_OriginalSourceBase_AUD drop constraint FKAE4A67A734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RECOMMENDEDMODIFIERENUMERATION" not found; SQL statement: +alter table DefinedTermBase_RecommendedModifierEnumeration drop constraint FKA72FB5AE5255EAFD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RECOMMENDEDMODIFIERENUMERATION" not found; SQL statement: +alter table DefinedTermBase_RecommendedModifierEnumeration drop constraint FKA72FB5AED0BDAE9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RECOMMENDEDMODIFIERENUMERATION_AUD" not found; SQL statement: +alter table DefinedTermBase_RecommendedModifierEnumeration_AUD drop constraint FK780D5C7F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_REPRESENTATION" not found; SQL statement: +alter table DefinedTermBase_Representation drop constraint FKAAC8AFE6B31C4747 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_REPRESENTATION" not found; SQL statement: +alter table DefinedTermBase_Representation drop constraint FKAAC8AFE6C0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_REPRESENTATION_AUD" not found; SQL statement: +alter table DefinedTermBase_Representation_AUD drop constraint FKB5AE7AB734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RIGHTSINFO" not found; SQL statement: +alter table DefinedTermBase_RightsInfo drop constraint FK108A62BEC13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RIGHTSINFO" not found; SQL statement: +alter table DefinedTermBase_RightsInfo drop constraint FK108A62BEC0DB4934 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table DefinedTermBase_RightsInfo_AUD drop constraint FK2B2B018F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_STATISTICALMEASURE" not found; SQL statement: +alter table DefinedTermBase_StatisticalMeasure drop constraint FK6FF15DFCC9CD5B57 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_STATISTICALMEASURE" not found; SQL statement: +alter table DefinedTermBase_StatisticalMeasure drop constraint FK6FF15DFCD0BDAE9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_STATISTICALMEASURE_AUD" not found; SQL statement: +alter table DefinedTermBase_StatisticalMeasure_AUD drop constraint FK3C062DCD34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" not found; SQL statement: +alter table DefinedTermBase_SupportedCategoricalEnumeration drop constraint FK2170B25C5AF2C74 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" not found; SQL statement: +alter table DefinedTermBase_SupportedCategoricalEnumeration drop constraint FK2170B25CD0BDAE9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION_AUD" not found; SQL statement: +alter table DefinedTermBase_SupportedCategoricalEnumeration_AUD drop constraint FKBB04522D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement: +alter table DerivationEvent drop constraint FK426BC034FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement: +alter table DerivationEvent drop constraint FK426BC03BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement: +alter table DerivationEvent drop constraint FK426BC033DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement: +alter table DerivationEvent drop constraint FK426BC03403E17F4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement: +alter table DerivationEvent drop constraint FK426BC038524B89D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_AUD" not found; SQL statement: +alter table DerivationEvent_AUD drop constraint FKDABF305434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_ANNOTATION" not found; SQL statement: +alter table DerivationEvent_Annotation drop constraint FKEFA0D10B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_ANNOTATION" not found; SQL statement: +alter table DerivationEvent_Annotation drop constraint FKEFA0D10B4AAB411A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_ANNOTATION_AUD" not found; SQL statement: +alter table DerivationEvent_Annotation_AUD drop constraint FKA197815C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_MARKER" not found; SQL statement: +alter table DerivationEvent_Marker drop constraint FKE412C816777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_MARKER" not found; SQL statement: +alter table DerivationEvent_Marker drop constraint FKE412C8164AAB411A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_MARKER_AUD" not found; SQL statement: +alter table DerivationEvent_Marker_AUD drop constraint FK8ED0FAE734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement: +alter table DescriptionBase drop constraint FKFF4D58CD4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement: +alter table DescriptionBase drop constraint FKFF4D58CDBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement: +alter table DescriptionBase drop constraint FKFF4D58CDB56856A4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement: +alter table DescriptionBase drop constraint FKFF4D58CDDE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement: +alter table DescriptionBase drop constraint FKFF4D58CDDA935185 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_AUD" not found; SQL statement: +alter table DescriptionBase_AUD drop constraint FK7456581E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ANNOTATION" not found; SQL statement: +alter table DescriptionBase_Annotation drop constraint FKF3AD32011E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ANNOTATION" not found; SQL statement: +alter table DescriptionBase_Annotation drop constraint FKF3AD3201F1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ANNOTATION_AUD" not found; SQL statement: +alter table DescriptionBase_Annotation_AUD drop constraint FK15FE775234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_CREDIT" not found; SQL statement: +alter table DescriptionBase_Credit drop constraint FK510B2ACB32D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_CREDIT" not found; SQL statement: +alter table DescriptionBase_Credit drop constraint FK510B2ACBF1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_CREDIT_AUD" not found; SQL statement: +alter table DescriptionBase_Credit_AUD drop constraint FK2EBEFB1C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_EXTENSION" not found; SQL statement: +alter table DescriptionBase_Extension drop constraint FKD5D2B32D927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_EXTENSION" not found; SQL statement: +alter table DescriptionBase_Extension drop constraint FKD5D2B32DF1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_EXTENSION_AUD" not found; SQL statement: +alter table DescriptionBase_Extension_AUD drop constraint FK79E7827E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_GEOSCOPE" not found; SQL statement: +alter table DescriptionBase_GeoScope drop constraint FK3ADD7CD586D04E74 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_GEOSCOPE" not found; SQL statement: +alter table DescriptionBase_GeoScope drop constraint FK3ADD7CD5D86445CE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_GEOSCOPE_AUD" not found; SQL statement: +alter table DescriptionBase_GeoScope_AUD drop constraint FK63A5382634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_IDENTIFIER" not found; SQL statement: +alter table DescriptionBase_Identifier drop constraint FKEFE5F37BE12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_IDENTIFIER" not found; SQL statement: +alter table DescriptionBase_Identifier drop constraint FKEFE5F37BF1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table DescriptionBase_Identifier_AUD drop constraint FKDCA5EBCC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_MARKER" not found; SQL statement: +alter table DescriptionBase_Marker drop constraint FK6132140C777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_MARKER" not found; SQL statement: +alter table DescriptionBase_Marker drop constraint FK6132140CF1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_MARKER_AUD" not found; SQL statement: +alter table DescriptionBase_Marker_AUD drop constraint FK92DD5BDD34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DescriptionBase_OriginalSourceBase drop constraint FKDC75C70F3A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DescriptionBase_OriginalSourceBase drop constraint FKDC75C70FF1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table DescriptionBase_OriginalSourceBase_AUD drop constraint FK8F39D56034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_REFERENCE" not found; SQL statement: +alter table DescriptionBase_Reference drop constraint FKC330D6395C601E49 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_REFERENCE" not found; SQL statement: +alter table DescriptionBase_Reference drop constraint FKC330D639F1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_REFERENCE_AUD" not found; SQL statement: +alter table DescriptionBase_Reference_AUD drop constraint FK76253F8A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_RIGHTSINFO" not found; SQL statement: +alter table DescriptionBase_RightsInfo drop constraint FKFEADDDF7C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_RIGHTSINFO" not found; SQL statement: +alter table DescriptionBase_RightsInfo drop constraint FKFEADDDF7F1DDBFAB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table DescriptionBase_RightsInfo_AUD drop constraint FK183C384834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_SCOPE" not found; SQL statement: +alter table DescriptionBase_Scope drop constraint FKB9257C4294E290CA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_SCOPE" not found; SQL statement: +alter table DescriptionBase_Scope drop constraint FKB9257C42D86445CE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_SCOPE_AUD" not found; SQL statement: +alter table DescriptionBase_Scope_AUD drop constraint FK75D5B91334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76714FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE7671BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76714220AFEB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE767134AF0E81 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76711C3C3FF7 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE7671E8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE7671693C1147 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76716561D9B1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE767110A80E07 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76719108D9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement: +alter table DescriptionElementBase drop constraint FK38FE76716D0D7A56 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_AUD" not found; SQL statement: +alter table DescriptionElementBase_AUD drop constraint FKF3803C234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ANNOTATION" not found; SQL statement: +alter table DescriptionElementBase_Annotation drop constraint FK7EE5E5DD1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ANNOTATION" not found; SQL statement: +alter table DescriptionElementBase_Annotation drop constraint FK7EE5E5DD3B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ANNOTATION_AUD" not found; SQL statement: +alter table DescriptionElementBase_Annotation_AUD drop constraint FK2BC1DD2E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement: +alter table DescriptionElementBase_LanguageString drop constraint FKC753F137ACF5F60B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement: +alter table DescriptionElementBase_LanguageString drop constraint FKC753F137C6D55834 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement: +alter table DescriptionElementBase_LanguageString drop constraint FKC753F137C086B46F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING_AUD" not found; SQL statement: +alter table DescriptionElementBase_LanguageString_AUD drop constraint FK2D26AB8834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MARKER" not found; SQL statement: +alter table DescriptionElementBase_Marker drop constraint FK1CB715E8777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MARKER" not found; SQL statement: +alter table DescriptionElementBase_Marker drop constraint FK1CB715E83B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MARKER_AUD" not found; SQL statement: +alter table DescriptionElementBase_Marker_AUD drop constraint FK1E160FB934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MEDIA" not found; SQL statement: +alter table DescriptionElementBase_Media drop constraint FK21F70076C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MEDIA" not found; SQL statement: +alter table DescriptionElementBase_Media drop constraint FK21F700763B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MEDIA_AUD" not found; SQL statement: +alter table DescriptionElementBase_Media_AUD drop constraint FK5522034734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFIER" not found; SQL statement: +alter table DescriptionElementBase_Modifier drop constraint FK97E0D105F4E35BCD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFIER" not found; SQL statement: +alter table DescriptionElementBase_Modifier drop constraint FK97E0D1053B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFIER_AUD" not found; SQL statement: +alter table DescriptionElementBase_Modifier_AUD drop constraint FK2982F45634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement: +alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C7F05D08D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement: +alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C79682414B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement: +alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C73B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT_AUD" not found; SQL statement: +alter table DescriptionElementBase_ModifyingText_AUD drop constraint FK6C06031834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DescriptionElementBase_OriginalSourceBase drop constraint FKF41ADEEBA6473CCC [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table DescriptionElementBase_OriginalSourceBase drop constraint FKF41ADEEB3B8BB609 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table DescriptionElementBase_OriginalSourceBase_AUD drop constraint FK9C979F3C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB24974FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB2497BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB24973DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB24974B251DAD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB2497BD54CF92 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB2497AEC8CCAA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement: +alter table DeterminationEvent drop constraint FK1DB2497DA935185 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_AUD" not found; SQL statement: +alter table DeterminationEvent_AUD drop constraint FKA0252EE834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_ANNOTATION" not found; SQL statement: +alter table DeterminationEvent_Annotation drop constraint FKB74F03F71E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_ANNOTATION" not found; SQL statement: +alter table DeterminationEvent_Annotation drop constraint FKB74F03F76BE0BFDA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_ANNOTATION_AUD" not found; SQL statement: +alter table DeterminationEvent_Annotation_AUD drop constraint FKAFDA5E4834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_MARKER" not found; SQL statement: +alter table DeterminationEvent_Marker drop constraint FK5C475102777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_MARKER" not found; SQL statement: +alter table DeterminationEvent_Marker drop constraint FK5C4751026BE0BFDA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_MARKER_AUD" not found; SQL statement: +alter table DeterminationEvent_Marker_AUD drop constraint FK567F2DD334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_REFERENCE" not found; SQL statement: +alter table DeterminationEvent_Reference drop constraint FK8FB1ED8355A53F64 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_REFERENCE" not found; SQL statement: +alter table DeterminationEvent_Reference drop constraint FK8FB1ED836BE0BFDA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_REFERENCE_AUD" not found; SQL statement: +alter table DeterminationEvent_Reference_AUD drop constraint FK6255A1D434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement: +alter table DnaQuality drop constraint FK7F4518084FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement: +alter table DnaQuality drop constraint FK7F451808BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement: +alter table DnaQuality drop constraint FK7F45180823A844FA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement: +alter table DnaQuality drop constraint FK7F45180887BB6462 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement: +alter table DnaQuality drop constraint FK7F451808632EAD0D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY_AUD" not found; SQL statement: +alter table DnaQuality_AUD drop constraint FKA79601D934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ENTITYCONSTRAINTVIOLATION" not found; SQL statement: +alter table EntityConstraintViolation drop constraint FK8970AEC54FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ENTITYCONSTRAINTVIOLATION" not found; SQL statement: +alter table EntityConstraintViolation drop constraint FK8970AEC57CB10052 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ENTITYVALIDATION" not found; SQL statement: +alter table EntityValidation drop constraint FKE5A60CDC4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement: +alter table Extension drop constraint FK52EF3C1F4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement: +alter table Extension drop constraint FK52EF3C1FBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement: +alter table Extension drop constraint FK52EF3C1FAD392BD3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "EXTENSION_AUD" not found; SQL statement: +alter table Extension_AUD drop constraint FK92D2427034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement: +alter table FeatureNode drop constraint FK4CEED9F84FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement: +alter table FeatureNode drop constraint FK4CEED9F8BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement: +alter table FeatureNode drop constraint FK4CEED9F84220AFEB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement: +alter table FeatureNode drop constraint FK4CEED9F847C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement: +alter table FeatureNode drop constraint FK4CEED9F8E0AD2C59 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_AUD" not found; SQL statement: +alter table FeatureNode_AUD drop constraint FK25AD4BC934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_InapplicableIf drop constraint FK56833D011128E63B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_InapplicableIf drop constraint FK56833D0152FCC4B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF_AUD" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_InapplicableIf_AUD drop constraint FKB8D7025234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_ONLYAPPLICABLE" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_OnlyApplicable drop constraint FK6AE876AB57FA94D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_ONLYAPPLICABLE" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_OnlyApplicable drop constraint FK6AE876AB52FCC4B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_DEFINEDTERMBASE_ONLYAPPLICABLE_AUD" not found; SQL statement: +alter table FeatureNode_DefinedTermBase_OnlyApplicable_AUD drop constraint FK3F5356FC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement: +alter table FeatureTree drop constraint FK4CF19F944FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement: +alter table FeatureTree drop constraint FK4CF19F94BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement: +alter table FeatureTree drop constraint FK4CF19F94B7892921 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_AUD" not found; SQL statement: +alter table FeatureTree_AUD drop constraint FK355BE36534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ANNOTATION" not found; SQL statement: +alter table FeatureTree_Annotation drop constraint FK5D8B8DA1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ANNOTATION" not found; SQL statement: +alter table FeatureTree_Annotation drop constraint FK5D8B8DA47C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ANNOTATION_AUD" not found; SQL statement: +alter table FeatureTree_Annotation_AUD drop constraint FK86E8E9AB34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_CREDIT" not found; SQL statement: +alter table FeatureTree_Credit drop constraint FK7536062432D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_CREDIT" not found; SQL statement: +alter table FeatureTree_Credit drop constraint FK7536062447C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_CREDIT_AUD" not found; SQL statement: +alter table FeatureTree_Credit_AUD drop constraint FK40EA81F534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_EXTENSION" not found; SQL statement: +alter table FeatureTree_Extension drop constraint FKAD1E6D34927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_EXTENSION" not found; SQL statement: +alter table FeatureTree_Extension drop constraint FKAD1E6D3447C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_EXTENSION_AUD" not found; SQL statement: +alter table FeatureTree_Extension_AUD drop constraint FKF128E10534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_IDENTIFIER" not found; SQL statement: +alter table FeatureTree_Identifier drop constraint FK2117A54E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_IDENTIFIER" not found; SQL statement: +alter table FeatureTree_Identifier drop constraint FK2117A5447C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_IDENTIFIER_AUD" not found; SQL statement: +alter table FeatureTree_Identifier_AUD drop constraint FK4D905E2534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_MARKER" not found; SQL statement: +alter table FeatureTree_Marker drop constraint FK855CEF65777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_MARKER" not found; SQL statement: +alter table FeatureTree_Marker drop constraint FK855CEF6547C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_MARKER_AUD" not found; SQL statement: +alter table FeatureTree_Marker_AUD drop constraint FKA508E2B634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table FeatureTree_OriginalSourceBase drop constraint FK13BD64E83A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table FeatureTree_OriginalSourceBase drop constraint FK13BD64E847C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table FeatureTree_OriginalSourceBase_AUD drop constraint FK7B5CDEB934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_REPRESENTATION" not found; SQL statement: +alter table FeatureTree_Representation drop constraint FK8C458F8B31C4747 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_REPRESENTATION" not found; SQL statement: +alter table FeatureTree_Representation drop constraint FK8C458F847C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_REPRESENTATION_AUD" not found; SQL statement: +alter table FeatureTree_Representation_AUD drop constraint FKECAB4AC934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_RIGHTSINFO" not found; SQL statement: +alter table FeatureTree_RightsInfo drop constraint FK10D964D0C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_RIGHTSINFO" not found; SQL statement: +alter table FeatureTree_RightsInfo drop constraint FK10D964D047C496CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_RIGHTSINFO_AUD" not found; SQL statement: +alter table FeatureTree_RightsInfo_AUD drop constraint FK8926AAA134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F34FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F3BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F33DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F3C15704E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F3F55AFD89 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement: +alter table GatheringEvent drop constraint FK6F1286F38B455EC6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_AUD" not found; SQL statement: +alter table GatheringEvent_AUD drop constraint FK3EC034434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_ANNOTATION" not found; SQL statement: +alter table GatheringEvent_Annotation drop constraint FK76DDD01B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_ANNOTATION" not found; SQL statement: +alter table GatheringEvent_Annotation drop constraint FK76DDD01BF95F225A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_ANNOTATION_AUD" not found; SQL statement: +alter table GatheringEvent_Annotation_AUD drop constraint FK351E786C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_DEFINEDTERMBASE" not found; SQL statement: +alter table GatheringEvent_DefinedTermBase drop constraint FK69D9A11A7C34B6D6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_DEFINEDTERMBASE" not found; SQL statement: +alter table GatheringEvent_DefinedTermBase drop constraint FK69D9A11AF95F225A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_DEFINEDTERMBASE_AUD" not found; SQL statement: +alter table GatheringEvent_DefinedTermBase_AUD drop constraint FKB3BBB1EB34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_MARKER" not found; SQL statement: +alter table GatheringEvent_Marker drop constraint FK7B49CF26777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_MARKER" not found; SQL statement: +alter table GatheringEvent_Marker drop constraint FK7B49CF26F95F225A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_MARKER_AUD" not found; SQL statement: +alter table GatheringEvent_Marker_AUD drop constraint FK160DF9F734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "GRANTEDAUTHORITYIMPL" not found; SQL statement: +alter table GrantedAuthorityImpl drop constraint FKB05CF9284FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP" not found; SQL statement: +alter table HomotypicalGroup drop constraint FK7DECCC184FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP" not found; SQL statement: +alter table HomotypicalGroup drop constraint FK7DECCC18BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_AUD" not found; SQL statement: +alter table HomotypicalGroup_AUD drop constraint FKE4252DE934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_ANNOTATION" not found; SQL statement: +alter table HomotypicalGroup_Annotation drop constraint FK7A0351D61E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_ANNOTATION" not found; SQL statement: +alter table HomotypicalGroup_Annotation drop constraint FK7A0351D6BFEAE500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_ANNOTATION_AUD" not found; SQL statement: +alter table HomotypicalGroup_Annotation_AUD drop constraint FK41E6A4A734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_MARKER" not found; SQL statement: +alter table HomotypicalGroup_Marker drop constraint FK97D36661777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_MARKER" not found; SQL statement: +alter table HomotypicalGroup_Marker drop constraint FK97D36661BFEAE500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_MARKER_AUD" not found; SQL statement: +alter table HomotypicalGroup_Marker_AUD drop constraint FK19337BB234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE744FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE74BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE74AEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE749DD57A93 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE74AF4F9F62 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement: +alter table HybridRelationship drop constraint FK9033CE7455F241D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_AUD" not found; SQL statement: +alter table HybridRelationship_AUD drop constraint FK9C2BA24534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table HybridRelationship_Annotation drop constraint FK2C7E7DFA1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table HybridRelationship_Annotation drop constraint FK2C7E7DFA59832240 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_ANNOTATION_AUD" not found; SQL statement: +alter table HybridRelationship_Annotation_AUD drop constraint FKACE71ECB34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_MARKER" not found; SQL statement: +alter table HybridRelationship_Marker drop constraint FKCEF24485777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_MARKER" not found; SQL statement: +alter table HybridRelationship_Marker drop constraint FKCEF2448559832240 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_MARKER_AUD" not found; SQL statement: +alter table HybridRelationship_Marker_AUD drop constraint FKCBAEA7D634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement: +alter table Identifier drop constraint FK165A88C94FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement: +alter table Identifier drop constraint FK165A88C9BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement: +alter table Identifier drop constraint FK165A88C9E67FC44F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_AUD" not found; SQL statement: +alter table Identifier_AUD drop constraint FKE1132A1A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_ANNOTATION" not found; SQL statement: +alter table Identifier_Annotation drop constraint FK12BB6C851E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_ANNOTATION" not found; SQL statement: +alter table Identifier_Annotation drop constraint FK12BB6C85E640A3E0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_ANNOTATION_AUD" not found; SQL statement: +alter table Identifier_Annotation_AUD drop constraint FK36A3CFD634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_MARKER" not found; SQL statement: +alter table Identifier_Marker drop constraint FK4A6A3090777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_MARKER" not found; SQL statement: +alter table Identifier_Marker drop constraint FK4A6A3090E640A3E0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_MARKER_AUD" not found; SQL statement: +alter table Identifier_Marker_AUD drop constraint FKB1EB966134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement: +alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC02BEBA58D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement: +alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC028459272 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement: +alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC084FF3EDF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING_AUD" not found; SQL statement: +alter table IndividualAssociation_LanguageString_AUD drop constraint FKB1A62C9134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement: +alter table InstitutionalMembership drop constraint FK3C8E1FF94FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement: +alter table InstitutionalMembership drop constraint FK3C8E1FF9BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement: +alter table InstitutionalMembership drop constraint FK3C8E1FF916B9CA77 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement: +alter table InstitutionalMembership drop constraint FK3C8E1FF9AAC1B820 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP_AUD" not found; SQL statement: +alter table InstitutionalMembership_AUD drop constraint FK847A94A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B794FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79F7976FC5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79994CCE20 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B7937998500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B795CB60F3B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B798D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79AEC8CCAA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79DA935185 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE" not found; SQL statement: +alter table IntextReference drop constraint FK861B8B79EE6B45A6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "INTEXTREFERENCE_AUD" not found; SQL statement: +alter table IntextReference_AUD drop constraint FKAE3354CA34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT" not found; SQL statement: +alter table KeyStatement drop constraint FK7125B9F04FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT" not found; SQL statement: +alter table KeyStatement drop constraint FK7125B9F0BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_AUD" not found; SQL statement: +alter table KeyStatement_AUD drop constraint FK93036FC134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement: +alter table KeyStatement_LanguageString drop constraint FK70BB5FD89C782795 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement: +alter table KeyStatement_LanguageString drop constraint FK70BB5FD8DA0C376A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement: +alter table KeyStatement_LanguageString drop constraint FK70BB5FD8AAA67049 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING_AUD" not found; SQL statement: +alter table KeyStatement_LanguageString_AUD drop constraint FKE203E1A934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LSIDAUTHORITY" not found; SQL statement: +alter table LSIDAuthority drop constraint FK759DB8814FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LSIDAUTHORITY_NAMESPACES" not found; SQL statement: +alter table LSIDAuthority_namespaces drop constraint FKB04948F64FFCFD94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement: +alter table LanguageString drop constraint FKB5FDC9A94FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement: +alter table LanguageString drop constraint FKB5FDC9A9BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement: +alter table LanguageString drop constraint FKB5FDC9A9E8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_AUD" not found; SQL statement: +alter table LanguageString_AUD drop constraint FK896AFAFA34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_ANNOTATION" not found; SQL statement: +alter table LanguageString_Annotation drop constraint FK8400DFA51E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_ANNOTATION" not found; SQL statement: +alter table LanguageString_Annotation drop constraint FK8400DFA537998500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_ANNOTATION_AUD" not found; SQL statement: +alter table LanguageString_Annotation_AUD drop constraint FKD3BAB2F634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_MARKER" not found; SQL statement: +alter table LanguageString_Marker drop constraint FK8DA633B0777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_MARKER" not found; SQL statement: +alter table LanguageString_Marker drop constraint FK8DA633B037998500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_MARKER_AUD" not found; SQL statement: +alter table LanguageString_Marker_AUD drop constraint FK2331098134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement: +alter table Marker drop constraint FK88F1805A4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement: +alter table Marker drop constraint FK88F1805ABC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement: +alter table Marker drop constraint FK88F1805AD64DC020 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MARKER_AUD" not found; SQL statement: +alter table Marker_AUD drop constraint FKB951F12B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264FBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F3DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F14D2C695 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F3781DA30 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F1600EAB3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement: +alter table MaterialOrMethodEvent drop constraint FK458A264F9A129634 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_AUD" not found; SQL statement: +alter table MaterialOrMethodEvent_AUD drop constraint FK8C8C94A034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_ANNOTATION" not found; SQL statement: +alter table MaterialOrMethodEvent_Annotation drop constraint FKD9943F3F1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_ANNOTATION" not found; SQL statement: +alter table MaterialOrMethodEvent_Annotation drop constraint FKD9943F3F2F50355A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_ANNOTATION_AUD" not found; SQL statement: +alter table MaterialOrMethodEvent_Annotation_AUD drop constraint FK6B00B59034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_MARKER" not found; SQL statement: +alter table MaterialOrMethodEvent_Marker drop constraint FKF0BD704A777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_MARKER" not found; SQL statement: +alter table MaterialOrMethodEvent_Marker drop constraint FKF0BD704A2F50355A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_MARKER_AUD" not found; SQL statement: +alter table MaterialOrMethodEvent_Marker_AUD drop constraint FK78C4691B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement: +alter table Media drop constraint FK46C7FC44FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement: +alter table Media drop constraint FK46C7FC4BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement: +alter table Media drop constraint FK46C7FC4C2445443 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_NAMEDAREA" not found; SQL statement: +alter table MediaKey_NamedArea drop constraint FK31E7D4023FF8E7B2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_NAMEDAREA" not found; SQL statement: +alter table MediaKey_NamedArea drop constraint FK31E7D402BE59D760 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_NAMEDAREA_AUD" not found; SQL statement: +alter table MediaKey_NamedArea_AUD drop constraint FK922630D334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_SCOPE" not found; SQL statement: +alter table MediaKey_Scope drop constraint FKBFFEE8F05431B96E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_SCOPE" not found; SQL statement: +alter table MediaKey_Scope drop constraint FKBFFEE8F0BE59D760 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_SCOPE_AUD" not found; SQL statement: +alter table MediaKey_Scope_AUD drop constraint FK63AD1EC134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_TAXON" not found; SQL statement: +alter table MediaKey_Taxon drop constraint FKC00C3966DE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_TAXON" not found; SQL statement: +alter table MediaKey_Taxon drop constraint FKC00C3966815C7E9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_TAXON_AUD" not found; SQL statement: +alter table MediaKey_Taxon_AUD drop constraint FK311443734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement: +alter table MediaRepresentation drop constraint FK1966BDB14FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement: +alter table MediaRepresentation drop constraint FK1966BDB1BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement: +alter table MediaRepresentation drop constraint FK1966BDB1C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement: +alter table MediaRepresentationPart drop constraint FK67A455444FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement: +alter table MediaRepresentationPart drop constraint FK67A45544BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement: +alter table MediaRepresentationPart drop constraint FK67A45544E3818E37 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART_AUD" not found; SQL statement: +alter table MediaRepresentationPart_AUD drop constraint FKA75C411534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION_AUD" not found; SQL statement: +alter table MediaRepresentation_AUD drop constraint FK67AAAB0234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION_MEDIAREPRESENTATIONPART_AUD" not found; SQL statement: +alter table MediaRepresentation_MediaRepresentationPart_AUD drop constraint FK3544378734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_AUD" not found; SQL statement: +alter table Media_AUD drop constraint FKF70B2B9534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ANNOTATION" not found; SQL statement: +alter table Media_Annotation drop constraint FKA020DAAA1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ANNOTATION" not found; SQL statement: +alter table Media_Annotation drop constraint FKA020DAAAC2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ANNOTATION_AUD" not found; SQL statement: +alter table Media_Annotation_AUD drop constraint FK99ABA37B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_CREDIT" not found; SQL statement: +alter table Media_Credit drop constraint FKC1F78FF432D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_CREDIT" not found; SQL statement: +alter table Media_Credit drop constraint FKC1F78FF4C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_CREDIT_AUD" not found; SQL statement: +alter table Media_Credit_AUD drop constraint FKDB32A3C534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement: +alter table Media_Description drop constraint FK368283E12BEBA58D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement: +alter table Media_Description drop constraint FK368283E128459272 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement: +alter table Media_Description drop constraint FK368283E1C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION_AUD" not found; SQL statement: +alter table Media_Description_AUD drop constraint FK6817D93234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_EXTENSION" not found; SQL statement: +alter table Media_Extension drop constraint FKDB62D164927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_EXTENSION" not found; SQL statement: +alter table Media_Extension drop constraint FKDB62D164C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_EXTENSION_AUD" not found; SQL statement: +alter table Media_Extension_AUD drop constraint FKE13FAD3534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_IDENTIFIER" not found; SQL statement: +alter table Media_Identifier drop constraint FK9C599C24E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_IDENTIFIER" not found; SQL statement: +alter table Media_Identifier drop constraint FK9C599C24C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_IDENTIFIER_AUD" not found; SQL statement: +alter table Media_Identifier_AUD drop constraint FK605317F534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement: +alter table Media_LanguageString drop constraint FK353DB784A1CA19B1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement: +alter table Media_LanguageString drop constraint FK353DB784A0A6EDCE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement: +alter table Media_LanguageString drop constraint FK353DB784C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING_AUD" not found; SQL statement: +alter table Media_LanguageString_AUD drop constraint FK68FA835534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_MARKER" not found; SQL statement: +alter table Media_Marker drop constraint FKD21E7935777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_MARKER" not found; SQL statement: +alter table Media_Marker drop constraint FKD21E7935C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_MARKER_AUD" not found; SQL statement: +alter table Media_Marker_AUD drop constraint FK3F51048634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Media_OriginalSourceBase drop constraint FK2FEEB6B83A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Media_OriginalSourceBase drop constraint FK2FEEB6B8C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table Media_OriginalSourceBase_AUD drop constraint FK97F0C88934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_REPRESENTATION" not found; SQL statement: +alter table Media_Representation drop constraint FK1B8712C88F6CABE6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_REPRESENTATION" not found; SQL statement: +alter table Media_Representation drop constraint FK1B8712C8BE59D760 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_REPRESENTATION_AUD" not found; SQL statement: +alter table Media_Representation_AUD drop constraint FK8DC9C9934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_RIGHTSINFO" not found; SQL statement: +alter table Media_RightsInfo drop constraint FKAB2186A0C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_RIGHTSINFO" not found; SQL statement: +alter table Media_RightsInfo drop constraint FKAB2186A0C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_RIGHTSINFO_AUD" not found; SQL statement: +alter table Media_RightsInfo_AUD drop constraint FK9BE9647134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_SEQUENCE" not found; SQL statement: +alter table Media_Sequence drop constraint FK61D09FCF29B4761 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_SEQUENCE" not found; SQL statement: +alter table Media_Sequence drop constraint FK61D09FC3282B64 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_SEQUENCE_AUD" not found; SQL statement: +alter table Media_Sequence_AUD drop constraint FK3C7BD9CD34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_TAXONBASE" not found; SQL statement: +alter table Media_TaxonBase drop constraint FK1ABD49E07C3D0017 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_TAXONBASE" not found; SQL statement: +alter table Media_TaxonBase drop constraint FK1ABD49E0BE59D760 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MEDIA_TAXONBASE_AUD" not found; SQL statement: +alter table Media_TaxonBase_AUD drop constraint FK857187B134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_NAMEDAREA" not found; SQL statement: +alter table MultiAccessKey_NamedArea drop constraint FK1F5A74893FF8E7B2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_NAMEDAREA" not found; SQL statement: +alter table MultiAccessKey_NamedArea drop constraint FK1F5A7489B4555A9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_NAMEDAREA_AUD" not found; SQL statement: +alter table MultiAccessKey_NamedArea_AUD drop constraint FK4CB735DA34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_SCOPE" not found; SQL statement: +alter table MultiAccessKey_Scope drop constraint FKCC6CE4F75431B96E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_SCOPE" not found; SQL statement: +alter table MultiAccessKey_Scope drop constraint FKCC6CE4F7B4555A9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_SCOPE_AUD" not found; SQL statement: +alter table MultiAccessKey_Scope_AUD drop constraint FK511FBF4834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_TAXON" not found; SQL statement: +alter table MultiAccessKey_Taxon drop constraint FKCC7A356DDE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_TAXON" not found; SQL statement: +alter table MultiAccessKey_Taxon drop constraint FKCC7A356DB64A7B29 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_TAXON_AUD" not found; SQL statement: +alter table MultiAccessKey_Taxon_AUD drop constraint FKF083E4BE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E510834FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E51083BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E51083AEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E5108316CDFF85 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E5108328482454 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement: +alter table NameRelationship drop constraint FK5E51083AF619DE3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_AUD" not found; SQL statement: +alter table NameRelationship_AUD drop constraint FK743F44D434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table NameRelationship_Annotation drop constraint FK2E38AC8B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table NameRelationship_Annotation drop constraint FK2E38AC8B7B4CB560 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_ANNOTATION_AUD" not found; SQL statement: +alter table NameRelationship_Annotation_AUD drop constraint FKD1D59CDC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_MARKER" not found; SQL statement: +alter table NameRelationship_Marker drop constraint FKE3E46396777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_MARKER" not found; SQL statement: +alter table NameRelationship_Marker drop constraint FKE3E463967B4CB560 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_MARKER_AUD" not found; SQL statement: +alter table NameRelationship_Marker_AUD drop constraint FKCD68D66734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement: +alter table NomenclaturalStatus drop constraint FK1FFEC88B4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement: +alter table NomenclaturalStatus drop constraint FK1FFEC88BBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement: +alter table NomenclaturalStatus drop constraint FK1FFEC88BAEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement: +alter table NomenclaturalStatus drop constraint FK1FFEC88B7029BD9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_AUD" not found; SQL statement: +alter table NomenclaturalStatus_AUD drop constraint FKFB2DB8DC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_ANNOTATION" not found; SQL statement: +alter table NomenclaturalStatus_Annotation drop constraint FKE6E91F831E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_ANNOTATION" not found; SQL statement: +alter table NomenclaturalStatus_Annotation drop constraint FKE6E91F838D2CB1D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_ANNOTATION_AUD" not found; SQL statement: +alter table NomenclaturalStatus_Annotation_AUD drop constraint FK6A3D3D434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_MARKER" not found; SQL statement: +alter table NomenclaturalStatus_Marker drop constraint FK2F5128E777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_MARKER" not found; SQL statement: +alter table NomenclaturalStatus_Marker drop constraint FK2F5128E8D2CB1D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_MARKER_AUD" not found; SQL statement: +alter table NomenclaturalStatus_Marker_AUD drop constraint FK8619495F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement: +alter table OriginalSourceBase drop constraint FK505F2E5D4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement: +alter table OriginalSourceBase drop constraint FK505F2E5DBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement: +alter table OriginalSourceBase drop constraint FK505F2E5DAEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement: +alter table OriginalSourceBase drop constraint FK505F2E5D966B96B2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table OriginalSourceBase_AUD drop constraint FK9662E5AE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_ANNOTATION" not found; SQL statement: +alter table OriginalSourceBase_Annotation drop constraint FK208142711E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_ANNOTATION" not found; SQL statement: +alter table OriginalSourceBase_Annotation drop constraint FK20814271B029DDA0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_ANNOTATION_AUD" not found; SQL statement: +alter table OriginalSourceBase_Annotation_AUD drop constraint FKA074CFC234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_MARKER" not found; SQL statement: +alter table OriginalSourceBase_Marker drop constraint FKB3FFDC7C777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_MARKER" not found; SQL statement: +alter table OriginalSourceBase_Marker drop constraint FKB3FFDC7CB029DDA0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_MARKER_AUD" not found; SQL statement: +alter table OriginalSourceBase_Marker_AUD drop constraint FKBFB16C4D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP" not found; SQL statement: +alter table PermissionGroup drop constraint FK629941D04FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP_GRANTEDAUTHORITYIMPL" not found; SQL statement: +alter table PermissionGroup_GrantedAuthorityImpl drop constraint FK53114371857F6C2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP_GRANTEDAUTHORITYIMPL" not found; SQL statement: +alter table PermissionGroup_GrantedAuthorityImpl drop constraint FK5311437CA0971A3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement: +alter table PolytomousKey drop constraint FKA9E6B1384FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement: +alter table PolytomousKey drop constraint FKA9E6B138BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement: +alter table PolytomousKey drop constraint FKA9E6B138576595C3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775ABC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A4220AFEB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775AC73A7584 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A4FEE4393 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A808998FB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A9D3C2E93 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A4382686A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775A1C0483C4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement: +alter table PolytomousKeyNode drop constraint FK860775ADE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_AUD" not found; SQL statement: +alter table PolytomousKeyNode_AUD drop constraint FK6A6D682B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement: +alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12EF05D08D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement: +alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12E9682414B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement: +alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12EF135C42B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING_AUD" not found; SQL statement: +alter table PolytomousKeyNode_LanguageString_AUD drop constraint FKE0D0C7FF34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_AUD" not found; SQL statement: +alter table PolytomousKey_AUD drop constraint FK867830934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ANNOTATION" not found; SQL statement: +alter table PolytomousKey_Annotation drop constraint FK278CF8B61E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ANNOTATION" not found; SQL statement: +alter table PolytomousKey_Annotation drop constraint FK278CF8B689D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ANNOTATION_AUD" not found; SQL statement: +alter table PolytomousKey_Annotation_AUD drop constraint FK3281DB8734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_CREDIT" not found; SQL statement: +alter table PolytomousKey_Credit drop constraint FKADC940032D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_CREDIT" not found; SQL statement: +alter table PolytomousKey_Credit drop constraint FKADC940089D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_CREDIT_AUD" not found; SQL statement: +alter table PolytomousKey_Credit_AUD drop constraint FK629EC1D134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_EXTENSION" not found; SQL statement: +alter table PolytomousKey_Extension drop constraint FKAE34C1D8927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_EXTENSION" not found; SQL statement: +alter table PolytomousKey_Extension drop constraint FKAE34C1D889D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_EXTENSION_AUD" not found; SQL statement: +alter table PolytomousKey_Extension_AUD drop constraint FK1FFC43A934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_IDENTIFIER" not found; SQL statement: +alter table PolytomousKey_Identifier drop constraint FK23C5BA30E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_IDENTIFIER" not found; SQL statement: +alter table PolytomousKey_Identifier drop constraint FK23C5BA3089D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_IDENTIFIER_AUD" not found; SQL statement: +alter table PolytomousKey_Identifier_AUD drop constraint FKF929500134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_MARKER" not found; SQL statement: +alter table PolytomousKey_Marker drop constraint FK1B037D41777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_MARKER" not found; SQL statement: +alter table PolytomousKey_Marker drop constraint FK1B037D4189D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_MARKER_AUD" not found; SQL statement: +alter table PolytomousKey_Marker_AUD drop constraint FKC6BD229234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_NAMEDAREA" not found; SQL statement: +alter table PolytomousKey_NamedArea drop constraint FK1C727CFF3FF8E7B2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_NAMEDAREA" not found; SQL statement: +alter table PolytomousKey_NamedArea drop constraint FK1C727CFF89D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_NAMEDAREA_AUD" not found; SQL statement: +alter table PolytomousKey_NamedArea_AUD drop constraint FK750A135034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ORIGINALSOURCEBASE" not found; SQL statement: +alter table PolytomousKey_OriginalSourceBase drop constraint FK839208C43A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ORIGINALSOURCEBASE" not found; SQL statement: +alter table PolytomousKey_OriginalSourceBase drop constraint FK839208C489D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table PolytomousKey_OriginalSourceBase_AUD drop constraint FKE644349534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_RIGHTSINFO" not found; SQL statement: +alter table PolytomousKey_RightsInfo drop constraint FK328DA4ACC13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_RIGHTSINFO" not found; SQL statement: +alter table PolytomousKey_RightsInfo drop constraint FK328DA4AC89D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_RIGHTSINFO_AUD" not found; SQL statement: +alter table PolytomousKey_RightsInfo_AUD drop constraint FK34BF9C7D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_SCOPE" not found; SQL statement: +alter table PolytomousKey_Scope drop constraint FK8D97986D5431B96E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_SCOPE" not found; SQL statement: +alter table PolytomousKey_Scope drop constraint FK8D97986D89D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_SCOPE_AUD" not found; SQL statement: +alter table PolytomousKey_Scope_AUD drop constraint FK4E37C7BE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXON" not found; SQL statement: +alter table PolytomousKey_Taxon drop constraint FK8DA4E8E3DE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXON" not found; SQL statement: +alter table PolytomousKey_Taxon drop constraint FK8DA4E8E389D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXONBASE" not found; SQL statement: +alter table PolytomousKey_TaxonBase drop constraint FKED8F3A547C3D0017 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXONBASE" not found; SQL statement: +alter table PolytomousKey_TaxonBase drop constraint FKED8F3A5489D97CB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXONBASE_AUD" not found; SQL statement: +alter table PolytomousKey_TaxonBase_AUD drop constraint FKC42E1E2534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXON_AUD" not found; SQL statement: +alter table PolytomousKey_Taxon_AUD drop constraint FKED9BED3434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement: +alter table Primer drop constraint FK8EFB89F34FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement: +alter table Primer drop constraint FK8EFB89F3BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement: +alter table Primer drop constraint FK8EFB89F36D2CE418 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement: +alter table Primer drop constraint FK8EFB89F3D0374392 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_AUD" not found; SQL statement: +alter table Primer_AUD drop constraint FK319B864434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_ANNOTATION" not found; SQL statement: +alter table Primer_Annotation drop constraint FK9044ED1B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_ANNOTATION" not found; SQL statement: +alter table Primer_Annotation drop constraint FK9044ED1B48BD1F55 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_ANNOTATION_AUD" not found; SQL statement: +alter table Primer_Annotation_AUD drop constraint FKDBAF156C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_MARKER" not found; SQL statement: +alter table Primer_Marker drop constraint FKF6C76C26777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_MARKER" not found; SQL statement: +alter table Primer_Marker drop constraint FKF6C76C2648BD1F55 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "PRIMER_MARKER_AUD" not found; SQL statement: +alter table Primer_Marker_AUD drop constraint FK2F7516F734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2B4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2BBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2BD741CE1F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2BAD54327F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2B403E17F4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement: +alter table Reference drop constraint FK404D5F2BAEC3B8B8 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_AUD" not found; SQL statement: +alter table Reference_AUD drop constraint FK8F0FFF7C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ANNOTATION" not found; SQL statement: +alter table Reference_Annotation drop constraint FKFC824E31E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ANNOTATION" not found; SQL statement: +alter table Reference_Annotation drop constraint FKFC824E38D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ANNOTATION_AUD" not found; SQL statement: +alter table Reference_Annotation_AUD drop constraint FKF3C1293434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_CREDIT" not found; SQL statement: +alter table Reference_Credit drop constraint FK5BC6DEAD32D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_CREDIT" not found; SQL statement: +alter table Reference_Credit drop constraint FK5BC6DEAD8D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_CREDIT_AUD" not found; SQL statement: +alter table Reference_Credit_AUD drop constraint FK4AD9EDFE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_EXTENSION" not found; SQL statement: +alter table Reference_Extension drop constraint FKDEFCDC0B927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_EXTENSION" not found; SQL statement: +alter table Reference_Extension drop constraint FKDEFCDC0B8D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_EXTENSION_AUD" not found; SQL statement: +alter table Reference_Extension_AUD drop constraint FK1DF60C5C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_IDENTIFIER" not found; SQL statement: +alter table Reference_Identifier drop constraint FKC00E65DE12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_IDENTIFIER" not found; SQL statement: +alter table Reference_Identifier drop constraint FKC00E65D8D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_IDENTIFIER_AUD" not found; SQL statement: +alter table Reference_Identifier_AUD drop constraint FKBA689DAE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MARKER" not found; SQL statement: +alter table Reference_Marker drop constraint FK6BEDC7EE777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MARKER" not found; SQL statement: +alter table Reference_Marker drop constraint FK6BEDC7EE8D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MARKER_AUD" not found; SQL statement: +alter table Reference_Marker_AUD drop constraint FKAEF84EBF34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MEDIA" not found; SQL statement: +alter table Reference_Media drop constraint FKBBEF5B0C2C29593 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MEDIA" not found; SQL statement: +alter table Reference_Media drop constraint FKBBEF5B08D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MEDIA_AUD" not found; SQL statement: +alter table Reference_Media_AUD drop constraint FK8318CB8134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Reference_OriginalSourceBase drop constraint FKD3E8B7F13A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table Reference_OriginalSourceBase drop constraint FKD3E8B7F18D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table Reference_OriginalSourceBase_AUD drop constraint FKC025854234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_RIGHTSINFO" not found; SQL statement: +alter table Reference_RightsInfo drop constraint FK1AC8D0D9C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_RIGHTSINFO" not found; SQL statement: +alter table Reference_RightsInfo drop constraint FK1AC8D0D98D0FB4DA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REFERENCE_RIGHTSINFO_AUD" not found; SQL statement: +alter table Reference_RightsInfo_AUD drop constraint FKF5FEEA2A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RELATIONSHIPTERMBASE_INVERSEREPRESENTATION" not found; SQL statement: +alter table RelationshipTermBase_inverseRepresentation drop constraint FK98592F33473FB677 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RELATIONSHIPTERMBASE_INVERSEREPRESENTATION" not found; SQL statement: +alter table RelationshipTermBase_inverseRepresentation drop constraint FK98592F33ECEEF4AF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RELATIONSHIPTERMBASE_INVERSEREPRESENTATION_AUD" not found; SQL statement: +alter table RelationshipTermBase_inverseRepresentation_AUD drop constraint FK5D248B8434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement: +alter table Representation drop constraint FK9C4724ED4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement: +alter table Representation drop constraint FK9C4724EDBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement: +alter table Representation drop constraint FK9C4724EDE8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_AUD" not found; SQL statement: +alter table Representation_AUD drop constraint FK294D143E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_ANNOTATION" not found; SQL statement: +alter table Representation_Annotation drop constraint FK371091E11E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_ANNOTATION" not found; SQL statement: +alter table Representation_Annotation drop constraint FK371091E147E8AE60 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_ANNOTATION_AUD" not found; SQL statement: +alter table Representation_Annotation_AUD drop constraint FK36EEE73234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_MARKER" not found; SQL statement: +alter table Representation_Marker drop constraint FK560063EC777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_MARKER" not found; SQL statement: +alter table Representation_Marker drop constraint FK560063EC47E8AE60 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_MARKER_AUD" not found; SQL statement: +alter table Representation_Marker_AUD drop constraint FKD640BBBD34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement: +alter table RightsInfo drop constraint FK252273454FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement: +alter table RightsInfo drop constraint FK25227345BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement: +alter table RightsInfo drop constraint FK25227345E8D36B00 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement: +alter table RightsInfo drop constraint FK25227345F7976FC5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement: +alter table RightsInfo drop constraint FK25227345E6D2D338 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_AUD" not found; SQL statement: +alter table RightsInfo_AUD drop constraint FK1CA9769634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_ANNOTATION" not found; SQL statement: +alter table RightsInfo_Annotation drop constraint FKECC95C891E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_ANNOTATION" not found; SQL statement: +alter table RightsInfo_Annotation drop constraint FKECC95C89EFE62333 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_ANNOTATION_AUD" not found; SQL statement: +alter table RightsInfo_Annotation_AUD drop constraint FK78721DDA34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_MARKER" not found; SQL statement: +alter table RightsInfo_Marker drop constraint FK81D8C294777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_MARKER" not found; SQL statement: +alter table RightsInfo_Marker drop constraint FK81D8C294EFE62333 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_MARKER_AUD" not found; SQL statement: +alter table RightsInfo_Marker_AUD drop constraint FK8BF9866534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement: +alter table Sequence drop constraint FK544ADBE14FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement: +alter table Sequence drop constraint FK544ADBE1BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement: +alter table Sequence drop constraint FK544ADBE19F65E72B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement: +alter table Sequence drop constraint FK544ADBE16D2CE418 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement: +alter table Sequence drop constraint FK544ADBE1E671A9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_AUD" not found; SQL statement: +alter table Sequence_AUD drop constraint FK39F4313234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_ANNOTATION" not found; SQL statement: +alter table Sequence_Annotation drop constraint FK1010BA6D1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_ANNOTATION" not found; SQL statement: +alter table Sequence_Annotation drop constraint FK1010BA6DD57FFDD5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_ANNOTATION_AUD" not found; SQL statement: +alter table Sequence_Annotation_AUD drop constraint FKCB4FE9BE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_MARKER" not found; SQL statement: +alter table Sequence_Marker drop constraint FK3D22B278777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_MARKER" not found; SQL statement: +alter table Sequence_Marker drop constraint FK3D22B278D57FFDD5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_MARKER_AUD" not found; SQL statement: +alter table Sequence_Marker_AUD drop constraint FKAF40E44934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_REFERENCE" not found; SQL statement: +alter table Sequence_Reference drop constraint FK6944904D1DDDC219 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_REFERENCE" not found; SQL statement: +alter table Sequence_Reference drop constraint FK6944904DD57FFDD5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_REFERENCE_AUD" not found; SQL statement: +alter table Sequence_Reference_AUD drop constraint FK18E5CF9E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1E4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1EBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1E3DA462D5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1ED320A65F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1EE0EBCFFE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1E55DDFE96 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement: +alter table SingleRead drop constraint FKAD45CA1E48BD1F55 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement: +alter table SingleReadAlignment drop constraint FKE50A79654FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement: +alter table SingleReadAlignment drop constraint FKE50A7965BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement: +alter table SingleReadAlignment drop constraint FKE50A7965ECE53A6A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement: +alter table SingleReadAlignment drop constraint FKE50A79653A5A5E15 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT_AUD" not found; SQL statement: +alter table SingleReadAlignment_AUD drop constraint FKFEE16CB634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_AUD" not found; SQL statement: +alter table SingleRead_AUD drop constraint FKA323B8EF34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_ANNOTATION" not found; SQL statement: +alter table SingleRead_Annotation drop constraint FK33E974101E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_ANNOTATION" not found; SQL statement: +alter table SingleRead_Annotation drop constraint FK33E974103A5A5E15 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_ANNOTATION_AUD" not found; SQL statement: +alter table SingleRead_Annotation_AUD drop constraint FK7B1D19E134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_MARKER" not found; SQL statement: +alter table SingleRead_Marker drop constraint FKCF47B59B777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_MARKER" not found; SQL statement: +alter table SingleRead_Marker drop constraint FKCF47B59B3A5A5E15 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_MARKER_AUD" not found; SQL statement: +alter table SingleRead_Marker_AUD drop constraint FKD3199DEC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA32724FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272F53E6AFA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA32728C35BD07 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272E35D77A3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272EB62BE9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272156CF96 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272C8505DB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA32727CC340C5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA327295CC5995 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA32724FF2F98B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272F95F225A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement: +alter table SpecimenOrObservationBase drop constraint FK21CA3272DADF76EA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_AUD drop constraint FKF3D3D74334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ANNOTATION" not found; SQL statement: +alter table SpecimenOrObservationBase_Annotation drop constraint FK365E4F3C1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ANNOTATION" not found; SQL statement: +alter table SpecimenOrObservationBase_Annotation drop constraint FK365E4F3C3B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ANNOTATION_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_Annotation_AUD drop constraint FK34187F0D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_CREDIT" not found; SQL statement: +alter table SpecimenOrObservationBase_Credit drop constraint FK7E3A1D8632D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_CREDIT" not found; SQL statement: +alter table SpecimenOrObservationBase_Credit drop constraint FK7E3A1D863B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_CREDIT_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_Credit_AUD drop constraint FK7170185734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT" not found; SQL statement: +alter table SpecimenOrObservationBase_DerivationEvent drop constraint FK20132036BD59A1AD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT" not found; SQL statement: +alter table SpecimenOrObservationBase_DerivationEvent drop constraint FK2013203654C216AA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_DerivationEvent_AUD drop constraint FKA4A8430734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_EXTENSION" not found; SQL statement: +alter table SpecimenOrObservationBase_Extension drop constraint FKE03B8292927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_EXTENSION" not found; SQL statement: +alter table SpecimenOrObservationBase_Extension drop constraint FKE03B82923B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_EXTENSION_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_Extension_AUD drop constraint FK7AE0176334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_IDENTIFIER" not found; SQL statement: +alter table SpecimenOrObservationBase_Identifier drop constraint FK329710B6E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_IDENTIFIER" not found; SQL statement: +alter table SpecimenOrObservationBase_Identifier drop constraint FK329710B63B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_Identifier_AUD drop constraint FKFABFF38734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement: +alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA9316CD55E0D6 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement: +alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA93168028C309 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement: +alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA93163B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_LanguageString_AUD drop constraint FK38B45E734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_MARKER" not found; SQL statement: +alter table SpecimenOrObservationBase_Marker drop constraint FK8E6106C7777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_MARKER" not found; SQL statement: +alter table SpecimenOrObservationBase_Marker drop constraint FK8E6106C73B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_MARKER_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_Marker_AUD drop constraint FKD58E791834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table SpecimenOrObservationBase_OriginalSourceBase drop constraint FKCA7F794A3A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table SpecimenOrObservationBase_OriginalSourceBase drop constraint FKCA7F794A3B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_OriginalSourceBase_AUD drop constraint FK2059F21B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_RIGHTSINFO" not found; SQL statement: +alter table SpecimenOrObservationBase_RightsInfo drop constraint FK415EFB32C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_RIGHTSINFO" not found; SQL statement: +alter table SpecimenOrObservationBase_RightsInfo drop constraint FK415EFB323B8A5ABA [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table SpecimenOrObservationBase_RightsInfo_AUD drop constraint FK3656400334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement: +alter table StateData drop constraint FKFB1697BB4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement: +alter table StateData drop constraint FKFB1697BBBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement: +alter table StateData drop constraint FKFB1697BB9D97028B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement: +alter table StateData drop constraint FKFB1697BB682A4E4B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_AUD" not found; SQL statement: +alter table StateData_AUD drop constraint FKDA6A700C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_DEFINEDTERMBASE" not found; SQL statement: +alter table StateData_DefinedTermBase drop constraint FK107321E2F4E35BCD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_DEFINEDTERMBASE" not found; SQL statement: +alter table StateData_DefinedTermBase drop constraint FK107321E28E7BF9AB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_DEFINEDTERMBASE_AUD" not found; SQL statement: +alter table StateData_DefinedTermBase_AUD drop constraint FK7C978EB334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement: +alter table StateData_LanguageString drop constraint FK93FFD2ADF05D08D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement: +alter table StateData_LanguageString drop constraint FK93FFD2AD9682414B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement: +alter table StateData_LanguageString drop constraint FK93FFD2AD8E7BF9AB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING_AUD" not found; SQL statement: +alter table StateData_LanguageString_AUD drop constraint FK1578E1FE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement: +alter table StatisticalMeasurementValue drop constraint FK2DCE02904FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement: +alter table StatisticalMeasurementValue drop constraint FK2DCE0290BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement: +alter table StatisticalMeasurementValue drop constraint FK2DCE029084A26F69 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement: +alter table StatisticalMeasurementValue drop constraint FK2DCE02904C428112 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_AUD" not found; SQL statement: +alter table StatisticalMeasurementValue_AUD drop constraint FKBB16686134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_DEFINEDTERMBASE" not found; SQL statement: +alter table StatisticalMeasurementValue_DefinedTermBase drop constraint FK686C42B7F4E35BCD [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_DEFINEDTERMBASE" not found; SQL statement: +alter table StatisticalMeasurementValue_DefinedTermBase drop constraint FK686C42B75C9F4F2B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_DEFINEDTERMBASE_AUD" not found; SQL statement: +alter table StatisticalMeasurementValue_DefinedTermBase_AUD drop constraint FKFEBA3D0834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB34FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB3BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB3AEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB34BAC703F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB3F8991B9D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement: +alter table SynonymRelationship drop constraint FKF483ADB380924EEC [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_AUD" not found; SQL statement: +alter table SynonymRelationship_AUD drop constraint FK8AEBCA0434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table SynonymRelationship_Annotation drop constraint FKF494F15B1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table SynonymRelationship_Annotation drop constraint FKF494F15B260A8379 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_ANNOTATION_AUD" not found; SQL statement: +alter table SynonymRelationship_Annotation_AUD drop constraint FKD3E2F9AC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_MARKER" not found; SQL statement: +alter table SynonymRelationship_Marker drop constraint FK7A439066777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_MARKER" not found; SQL statement: +alter table SynonymRelationship_Marker drop constraint FK7A439066260A8379 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_MARKER_AUD" not found; SQL statement: +alter table SynonymRelationship_Marker_AUD drop constraint FK93C51B3734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement: +alter table TaxonBase drop constraint FK9249B49B4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement: +alter table TaxonBase drop constraint FK9249B49BBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement: +alter table TaxonBase drop constraint FK9249B49B8492378F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement: +alter table TaxonBase drop constraint FK9249B49B74FED214 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement: +alter table TaxonBase drop constraint FK9249B49B7C7B5AED [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_AUD" not found; SQL statement: +alter table TaxonBase_AUD drop constraint FK37041CEC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ANNOTATION" not found; SQL statement: +alter table TaxonBase_Annotation drop constraint FK41ED09731E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ANNOTATION" not found; SQL statement: +alter table TaxonBase_Annotation drop constraint FK41ED09739C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ANNOTATION_AUD" not found; SQL statement: +alter table TaxonBase_Annotation_AUD drop constraint FK8C145C434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_CREDIT" not found; SQL statement: +alter table TaxonBase_Credit drop constraint FK4CB48B3D32D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_CREDIT" not found; SQL statement: +alter table TaxonBase_Credit drop constraint FK4CB48B3D9C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_CREDIT_AUD" not found; SQL statement: +alter table TaxonBase_Credit_AUD drop constraint FK7CFED28E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_EXTENSION" not found; SQL statement: +alter table TaxonBase_Extension drop constraint FKF961257B927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_EXTENSION" not found; SQL statement: +alter table TaxonBase_Extension drop constraint FKF961257B9C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_EXTENSION_AUD" not found; SQL statement: +alter table TaxonBase_Extension_AUD drop constraint FK71381DCC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_IDENTIFIER" not found; SQL statement: +alter table TaxonBase_Identifier drop constraint FK3E25CAEDE12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_IDENTIFIER" not found; SQL statement: +alter table TaxonBase_Identifier drop constraint FK3E25CAED9C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table TaxonBase_Identifier_AUD drop constraint FKCF68BA3E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_MARKER" not found; SQL statement: +alter table TaxonBase_Marker drop constraint FK5CDB747E777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_MARKER" not found; SQL statement: +alter table TaxonBase_Marker drop constraint FK5CDB747E9C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_MARKER_AUD" not found; SQL statement: +alter table TaxonBase_Marker_AUD drop constraint FKE11D334F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TaxonBase_OriginalSourceBase drop constraint FKFB680C813A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TaxonBase_OriginalSourceBase drop constraint FKFB680C819C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table TaxonBase_OriginalSourceBase_AUD drop constraint FKB7C811D234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_RIGHTSINFO" not found; SQL statement: +alter table TaxonBase_RightsInfo drop constraint FK4CEDB569C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_RIGHTSINFO" not found; SQL statement: +alter table TaxonBase_RightsInfo drop constraint FK4CEDB5699C9D39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table TaxonBase_RightsInfo_AUD drop constraint FKAFF06BA34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement: +alter table TaxonInteraction_LanguageString drop constraint FK579A1DC02BEBA58D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement: +alter table TaxonInteraction_LanguageString drop constraint FK579A1DC028459272 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement: +alter table TaxonInteraction_LanguageString drop constraint FK579A1DC086C86FE0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING_AUD" not found; SQL statement: +alter table TaxonInteraction_LanguageString_AUD drop constraint FK9E016B9134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C64FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6BFEAE500 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6617E62B3 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6D7BE55A0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6FBFA5597 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C681F5DBB0 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C6503B46C4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement: +alter table TaxonNameBase drop constraint FKB4870C63357BF63 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_AUD" not found; SQL statement: +alter table TaxonNameBase_AUD drop constraint FK5CA2CB9734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ANNOTATION" not found; SQL statement: +alter table TaxonNameBase_Annotation drop constraint FK9E7794681E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ANNOTATION" not found; SQL statement: +alter table TaxonNameBase_Annotation drop constraint FK9E7794688C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ANNOTATION_AUD" not found; SQL statement: +alter table TaxonNameBase_Annotation_AUD drop constraint FKB6734E3934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_CREDIT" not found; SQL statement: +alter table TaxonNameBase_Credit drop constraint FK29BCD8B232D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_CREDIT" not found; SQL statement: +alter table TaxonNameBase_Credit drop constraint FK29BCD8B28C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_CREDIT_AUD" not found; SQL statement: +alter table TaxonNameBase_Credit_AUD drop constraint FKD9895D8334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_EXTENSION" not found; SQL statement: +alter table TaxonNameBase_Extension drop constraint FKC28EE7E6927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_EXTENSION" not found; SQL statement: +alter table TaxonNameBase_Extension drop constraint FKC28EE7E68C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_EXTENSION_AUD" not found; SQL statement: +alter table TaxonNameBase_Extension_AUD drop constraint FK8F98B2B734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_IDENTIFIER" not found; SQL statement: +alter table TaxonNameBase_Identifier drop constraint FK9AB055E2E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_IDENTIFIER" not found; SQL statement: +alter table TaxonNameBase_Identifier drop constraint FK9AB055E28C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_IDENTIFIER_AUD" not found; SQL statement: +alter table TaxonNameBase_Identifier_AUD drop constraint FK7D1AC2B334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_MARKER" not found; SQL statement: +alter table TaxonNameBase_Marker drop constraint FK39E3C1F3777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_MARKER" not found; SQL statement: +alter table TaxonNameBase_Marker drop constraint FK39E3C1F38C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_MARKER_AUD" not found; SQL statement: +alter table TaxonNameBase_Marker_AUD drop constraint FK3DA7BE4434869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_NOMENCLATURALSTATUS" not found; SQL statement: +alter table TaxonNameBase_NomenclaturalStatus drop constraint FK560BA7926615E90D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_NOMENCLATURALSTATUS" not found; SQL statement: +alter table TaxonNameBase_NomenclaturalStatus drop constraint FK560BA7928C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_NOMENCLATURALSTATUS_AUD" not found; SQL statement: +alter table TaxonNameBase_NomenclaturalStatus_AUD drop constraint FK9215BC6334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TaxonNameBase_OriginalSourceBase drop constraint FKF746D2763A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TaxonNameBase_OriginalSourceBase drop constraint FKF746D2768C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table TaxonNameBase_OriginalSourceBase_AUD drop constraint FK7A38D54734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_RIGHTSINFO" not found; SQL statement: +alter table TaxonNameBase_RightsInfo drop constraint FKA978405EC13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_RIGHTSINFO" not found; SQL statement: +alter table TaxonNameBase_RightsInfo drop constraint FKA978405E8C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_RIGHTSINFO_AUD" not found; SQL statement: +alter table TaxonNameBase_RightsInfo_AUD drop constraint FKB8B10F2F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TaxonNameBase_TypeDesignationBase drop constraint FKC0D6BBB5C7DF530C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TaxonNameBase_TypeDesignationBase drop constraint FKC0D6BBB58C85CF94 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_TYPEDESIGNATIONBASE_AUD" not found; SQL statement: +alter table TaxonNameBase_TypeDesignationBase_AUD drop constraint FKBB24070634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCC4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCCBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCC84A3CE1B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCC39DB2DFB [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCC381381B5 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCCCC05993E [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement: +alter table TaxonNode drop constraint FK924F5BCCDE9A3E39 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION" not found; SQL statement: +alter table TaxonNodeAgentRelation drop constraint FK28D12BB54FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION" not found; SQL statement: +alter table TaxonNodeAgentRelation drop constraint FK28D12BB5BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION" not found; SQL statement: +alter table TaxonNodeAgentRelation drop constraint FK28D12BB58EB3A8A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION" not found; SQL statement: +alter table TaxonNodeAgentRelation drop constraint FK28D12BB5927D8399 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION" not found; SQL statement: +alter table TaxonNodeAgentRelation drop constraint FK28D12BB5E67FC44F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_AUD" not found; SQL statement: +alter table TaxonNodeAgentRelation_AUD drop constraint FKC066770634869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_ANNOTATION" not found; SQL statement: +alter table TaxonNodeAgentRelation_Annotation drop constraint FK7CEFFE191E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_ANNOTATION" not found; SQL statement: +alter table TaxonNodeAgentRelation_Annotation drop constraint FK7CEFFE193F9CAA9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_ANNOTATION_AUD" not found; SQL statement: +alter table TaxonNodeAgentRelation_Annotation_AUD drop constraint FK6A4D776A34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_MARKER" not found; SQL statement: +alter table TaxonNodeAgentRelation_Marker drop constraint FKE92EAC24777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_MARKER" not found; SQL statement: +alter table TaxonNodeAgentRelation_Marker drop constraint FKE92EAC243F9CAA9B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODEAGENTRELATION_MARKER_AUD" not found; SQL statement: +alter table TaxonNodeAgentRelation_Marker_AUD drop constraint FK1C2027F534869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_AUD" not found; SQL statement: +alter table TaxonNode_AUD drop constraint FKE090C39D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_ANNOTATION" not found; SQL statement: +alter table TaxonNode_Annotation drop constraint FKD8A9A9A21E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_ANNOTATION" not found; SQL statement: +alter table TaxonNode_Annotation drop constraint FKD8A9A9A2927D8399 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_ANNOTATION_AUD" not found; SQL statement: +alter table TaxonNode_Annotation_AUD drop constraint FKB2C4367334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_MARKER" not found; SQL statement: +alter table TaxonNode_Marker drop constraint FK395842D777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_MARKER" not found; SQL statement: +alter table TaxonNode_Marker drop constraint FK395842D927D8399 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_MARKER_AUD" not found; SQL statement: +alter table TaxonNode_Marker_AUD drop constraint FK77D9D37E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA024FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA02BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA02AEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA02E71EF6CE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA02F8991B9D [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement: +alter table TaxonRelationship drop constraint FK7482BA02F11BD77B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_AUD" not found; SQL statement: +alter table TaxonRelationship_AUD drop constraint FKA0DE16D334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table TaxonRelationship_Annotation drop constraint FK82C86DAC1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_ANNOTATION" not found; SQL statement: +alter table TaxonRelationship_Annotation drop constraint FK82C86DAC2BD180D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_ANNOTATION_AUD" not found; SQL statement: +alter table TaxonRelationship_Annotation_AUD drop constraint FKE86DE57D34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_MARKER" not found; SQL statement: +alter table TaxonRelationship_Marker drop constraint FK69FBDD37777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_MARKER" not found; SQL statement: +alter table TaxonRelationship_Marker drop constraint FK69FBDD372BD180D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_MARKER_AUD" not found; SQL statement: +alter table TaxonRelationship_Marker_AUD drop constraint FK21F8978834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY" not found; SQL statement: +alter table TermVocabulary drop constraint FK487AA6924FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY" not found; SQL statement: +alter table TermVocabulary drop constraint FK487AA692BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_AUD" not found; SQL statement: +alter table TermVocabulary_AUD drop constraint FKA6ED3B6334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ANNOTATION" not found; SQL statement: +alter table TermVocabulary_Annotation drop constraint FK76D2071C1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ANNOTATION" not found; SQL statement: +alter table TermVocabulary_Annotation drop constraint FK76D2071C258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ANNOTATION_AUD" not found; SQL statement: +alter table TermVocabulary_Annotation_AUD drop constraint FK222D46ED34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_CREDIT" not found; SQL statement: +alter table TermVocabulary_Credit drop constraint FK7604C56632D1B9F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_CREDIT" not found; SQL statement: +alter table TermVocabulary_Credit drop constraint FK7604C566258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_CREDIT_AUD" not found; SQL statement: +alter table TermVocabulary_Credit_AUD drop constraint FKB1E3D03734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_EXTENSION" not found; SQL statement: +alter table TermVocabulary_Extension drop constraint FKA8814EB2927DE9DF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_EXTENSION" not found; SQL statement: +alter table TermVocabulary_Extension drop constraint FKA8814EB2258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_EXTENSION_AUD" not found; SQL statement: +alter table TermVocabulary_Extension_AUD drop constraint FKD522D38334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_IDENTIFIER" not found; SQL statement: +alter table TermVocabulary_Identifier drop constraint FK730AC896E12073FF [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_IDENTIFIER" not found; SQL statement: +alter table TermVocabulary_Identifier drop constraint FK730AC896258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_IDENTIFIER_AUD" not found; SQL statement: +alter table TermVocabulary_Identifier_AUD drop constraint FKE8D4BB6734869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_MARKER" not found; SQL statement: +alter table TermVocabulary_Marker drop constraint FK862BAEA7777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_MARKER" not found; SQL statement: +alter table TermVocabulary_Marker drop constraint FK862BAEA7258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_MARKER_AUD" not found; SQL statement: +alter table TermVocabulary_Marker_AUD drop constraint FK160230F834869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TermVocabulary_OriginalSourceBase drop constraint FK8F2D512A3A6735D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ORIGINALSOURCEBASE" not found; SQL statement: +alter table TermVocabulary_OriginalSourceBase drop constraint FK8F2D512A258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ORIGINALSOURCEBASE_AUD" not found; SQL statement: +alter table TermVocabulary_OriginalSourceBase_AUD drop constraint FKA898D9FB34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_REPRESENTATION" not found; SQL statement: +alter table TermVocabulary_Representation drop constraint FKA408B63AB31C4747 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_REPRESENTATION" not found; SQL statement: +alter table TermVocabulary_Representation drop constraint FKA408B63A258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_REPRESENTATION_AUD" not found; SQL statement: +alter table TermVocabulary_Representation_AUD drop constraint FK681B370B34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_RIGHTSINFO" not found; SQL statement: +alter table TermVocabulary_RightsInfo drop constraint FK81D2B312C13F7B21 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_RIGHTSINFO" not found; SQL statement: +alter table TermVocabulary_RightsInfo drop constraint FK81D2B312258E060 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_RIGHTSINFO_AUD" not found; SQL statement: +alter table TermVocabulary_RightsInfo_AUD drop constraint FK246B07E334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAE4FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAEBC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAEAEB7F3BE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAE9E3ED08 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAE4CB0F315 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement: +alter table TypeDesignationBase drop constraint FK8AC9DCAEFBFA41D9 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_AUD" not found; SQL statement: +alter table TypeDesignationBase_AUD drop constraint FK243C037F34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_ANNOTATION" not found; SQL statement: +alter table TypeDesignationBase_Annotation drop constraint FK4D7327801E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_ANNOTATION" not found; SQL statement: +alter table TypeDesignationBase_Annotation drop constraint FK4D73278044E9E6D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_ANNOTATION_AUD" not found; SQL statement: +alter table TypeDesignationBase_Annotation_AUD drop constraint FK88BF955134869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_MARKER" not found; SQL statement: +alter table TypeDesignationBase_Marker drop constraint FKB914A10B777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_MARKER" not found; SQL statement: +alter table TypeDesignationBase_Marker drop constraint FKB914A10B44E9E6D4 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_MARKER_AUD" not found; SQL statement: +alter table TypeDesignationBase_Marker_AUD drop constraint FKECA3515C34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT" not found; SQL statement: +alter table UserAccount drop constraint FKB3F13C24FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT" not found; SQL statement: +alter table UserAccount drop constraint FKB3F13C2AAC1B820 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_AUD" not found; SQL statement: +alter table UserAccount_AUD drop constraint FK6A57909334869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_GRANTEDAUTHORITYIMPL" not found; SQL statement: +alter table UserAccount_GrantedAuthorityImpl drop constraint FKFD724D851857F6C2 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_GRANTEDAUTHORITYIMPL" not found; SQL statement: +alter table UserAccount_GrantedAuthorityImpl drop constraint FKFD724D855EA5DD89 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_PERMISSIONGROUP" not found; SQL statement: +alter table UserAccount_PermissionGroup drop constraint FK812DE753DA9DCB5F [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_PERMISSIONGROUP" not found; SQL statement: +alter table UserAccount_PermissionGroup drop constraint FK812DE753887E3D12 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement: +alter table WorkingSet drop constraint FK668D5B914FF2DB2C [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement: +alter table WorkingSet drop constraint FK668D5B91BC5DA539 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement: +alter table WorkingSet drop constraint FK668D5B9123DB7F04 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_AUD" not found; SQL statement: +alter table WorkingSet_AUD drop constraint FK628F58E234869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_ANNOTATION" not found; SQL statement: +alter table WorkingSet_Annotation drop constraint FKCBBA8CBD1E403E0B [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_ANNOTATION" not found; SQL statement: +alter table WorkingSet_Annotation drop constraint FKCBBA8CBDBBD2C869 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_ANNOTATION_AUD" not found; SQL statement: +alter table WorkingSet_Annotation_AUD drop constraint FK1E28140E34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_DESCRIPTIONBASE" not found; SQL statement: +alter table WorkingSet_DescriptionBase drop constraint FK731CC81F33B8A841 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_DESCRIPTIONBASE" not found; SQL statement: +alter table WorkingSet_DescriptionBase drop constraint FK731CC81FBBD2C869 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_DESCRIPTIONBASE_AUD" not found; SQL statement: +alter table WorkingSet_DescriptionBase_AUD drop constraint FK8959CE7034869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_MARKER" not found; SQL statement: +alter table WorkingSet_Marker drop constraint FK9CB22CC8777265A1 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_MARKER" not found; SQL statement: +alter table WorkingSet_Marker drop constraint FK9CB22CC8BBD2C869 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_MARKER_AUD" not found; SQL statement: +alter table WorkingSet_Marker_AUD drop constraint FK6AEAB69934869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_REPRESENTATION" not found; SQL statement: +alter table WorkingSet_Representation drop constraint FKA003835BB31C4747 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_REPRESENTATION" not found; SQL statement: +alter table WorkingSet_Representation drop constraint FKA003835BBBD2C869 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_REPRESENTATION_AUD" not found; SQL statement: +alter table WorkingSet_Representation_AUD drop constraint FK21B88BAC34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_TAXONBASE" not found; SQL statement: +alter table WorkingSet_TaxonBase drop constraint FK34EB896D7C3D0017 [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_TAXONBASE" not found; SQL statement: +alter table WorkingSet_TaxonBase drop constraint FK34EB896DB4555A9A [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_TAXONBASE_AUD" not found; SQL statement: +alter table WorkingSet_TaxonBase_AUD drop constraint FK582B38BE34869AAE [42102-170] +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table AgentBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Amplification add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table AmplificationResult add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Annotation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table CdmMetaData add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Classification add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Collection add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Credit add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DefinedTermBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DerivationEvent add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DescriptionBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DescriptionElementBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DeterminationEvent add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table DnaQuality add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table EntityConstraintViolation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table EntityValidation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Extension add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table FeatureNode add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:36 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table FeatureTree add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table GatheringEvent add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table GrantedAuthorityImpl add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table HomotypicalGroup add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table HybridRelationship add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Identifier add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table InstitutionalMembership add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table IntextReference add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table KeyStatement add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table LSIDAuthority add constraint _UniqueKey unique (uuid, authority) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table LanguageString add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Marker add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table MaterialOrMethodEvent add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Media add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table MediaRepresentation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table MediaRepresentationPart add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table NameRelationship add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table NomenclaturalStatus add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table OriginalSourceBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table PermissionGroup add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table PolytomousKey add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table PolytomousKeyNode add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Primer add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Reference add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Representation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table RightsInfo add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table Sequence add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table SingleRead add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table SingleReadAlignment add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table SpecimenOrObservationBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table StateData add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table StatisticalMeasurementValue add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table SynonymRelationship add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TaxonBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TaxonNameBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TaxonNode add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TaxonNodeAgentRelation add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TaxonRelationship add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TermVocabulary add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table TypeDesignationBase add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table UserAccount add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) +06-15 17:38:37 jdbc[2]: exception +org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement: +alter table WorkingSet add constraint _UniqueKey unique (uuid) [90045-170] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) + at org.h2.message.DbException.get(DbException.java:169) + at org.h2.message.DbException.get(DbException.java:146) + at org.h2.command.ddl.AlterTableAddConstraint.tryUpdate(AlterTableAddConstraint.java:89) + at org.h2.command.ddl.AlterTableAddConstraint.update(AlterTableAddConstraint.java:68) + at org.h2.command.CommandContainer.update(CommandContainer.java:75) + at org.h2.command.Command.executeUpdate(Command.java:230) + at org.h2.jdbc.JdbcStatement.executeUpdateInternal(JdbcStatement.java:125) + at org.h2.jdbc.JdbcStatement.executeUpdate(JdbcStatement.java:110) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228) + at org.hibernate.tool.hbm2ddl.DatabaseExporter.export(DatabaseExporter.java:64) + at org.hibernate.tool.hbm2ddl.SchemaExport.perform(SchemaExport.java:418) + at org.hibernate.tool.hbm2ddl.SchemaExport.execute(SchemaExport.java:375) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:304) + at org.hibernate.tool.hbm2ddl.SchemaExport.create(SchemaExport.java:293) + at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:498) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1743) + at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1781) + at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) + at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1547) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1485) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323) + at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1134) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.createBean(MonitoredListableBeanFactory.java:108) + at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) + at eu.etaxonomy.cdm.api.application.MonitoredListableBeanFactory.preInstantiateSingletons(MonitoredListableBeanFactory.java:71) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.finishBeanFactoryInitialization(MonitoredGenericApplicationContext.java:74) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) + at eu.etaxonomy.cdm.api.application.MonitoredGenericApplicationContext.refresh(MonitoredGenericApplicationContext.java:102) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.setNewDataSource(CdmApplicationController.java:264) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.(CdmApplicationController.java:204) + at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:148) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:151) + at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:99) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/imports/ABCDImport.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/ABCDImport.xml new file mode 100644 index 000000000..b97b0f1c8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/ABCDImport.xml @@ -0,0 +1,737 @@ + + + + www.floraweb.de/florkart/atlas/2007 + + + Rudolf May + rudolf.may@bfn.de + +49-228-84911441 + BfN, Konstantinstr. 110, D-53179 Bonn + + + + + Rudolf May + rudolf.may@bfn.de + +49-228-84911441 + BfN, Konstantinstr. 110, D-53179 Bonn + + + + + + FlorKart - FlorenKartierung Gefaesspflanzen + Verbreitung der Farn- und Bluetenpflanzen in Deutschland, Vorkommensnachweise aggregiert auf Rasterfelder der Topographischen Karte im Massstab 1 : 25000 (TK25 = MTB), Blattschnitt 6 x 10 Minuten, sowie in Zeitperioden 'vor 1950', '1950 - 1980', '1980 - 2000' + Deutschland + http://www.floraweb.de + + + http://www.floraweb.de/images/floraweb.gif + + 2007 + + + Netzwerk Phytodiversitaet Deutschlands (NetPhyD) und Bundesamt für Naturschutz (BfN) + Alle ehrenamtlich an der Floristischen Kartierung Deutschlands beteiligten Mitarbeiter + 2007-01-01 + 2010-01-01 + + + + + + + Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversität Deutschlands (NetPhyD) + BfN/NetPhyD + + + + + Rudolf May + + + Project Manager + + + BfN, Konstantinstr. 110, D-53179 Bonn + + + + +49-228-84911441 + voice + + + + floraweb@bfn.de + + + http://www.bfn.de + + http://www.bfn.de/fileadmin/global/templates/images/logo_bfn.gif + + + + + + Mitarbeiter der Floristischen Kartierung Deutschlands + Alle amtlich und ehrenamtlich an der Floristischen Kartierung Deutschlands beteiligten Mitarbeiter + + + + + BfN/NetPhyD + Bundesamt fuer Naturschutz und Netzwerk Phytodiversitaet Deutschlands + + + + + Bei Verwendung in Publikationen bitte die Datenquelle vollstaendig zitieren. + Bei Verwendung in Publikationen bitte die Datenquelle vollstaendig zitieren. Die Verwendung der Daten zu kommerziellen Zwecken wird untersagt. + + + + + Fuer die Richtigkeit der Daten wird keine Gewaehrleistung uebernommen + Fuer die Richtigkeit der Daten wird keine Gewaehrleistung uebernommen + + + + + In Anerkennung der Leistungen der ehrenamtlichen Kartierer der Flora Deutschlands + Die Kompilation der Verbreitungsdaten beruht auf unentgeltlich erbrachten Kartierungsleistungen von über 2000 ehrenamtlichen Mitarbeitern der Floristischen Kartierung Deutschlands, die in zahlreichen regionalen Kartierungsprojekten organisiert sind. + http://www.floraweb.de/pflanzenarten/hintergrundtexte_florkart_organisation.html + + + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + BfN + FlorKart_BfN + 1003121 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 3915: Bockhorst + + Deutschland + + + + + German TK25 + 3915 + + + 8.25 + 52.06 + Mittelpunkte von TK25-Rasterfeldern + 6363 + + + + + + + BfN + FlorKart_BfN + 1003122 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 3916: Halle (Westfalen) + + Deutschland + + + + + German TK25 + 3916 + + + 8.42 + 52.06 + Mittelpunkte von TK25-Rasterfeldern + 6363 + + + + + + + BfN + FlorKart_BfN + 1003123 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 5628: Bad Königshofen im Grabfeld + + Deutschland + + + + + German TK25 + 5628 + + + 10.42 + 50.36 + Mittelpunkte von TK25-Rasterfeldern + 6481 + + + + + + + BfN + FlorKart_BfN + 1003124 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 5634: Teuschnitz + + Deutschland + + + + + German TK25 + 5634 + + + 11.42 + 50.36 + Mittelpunkte von TK25-Rasterfeldern + 6482 + + + + + + + BfN + FlorKart_BfN + 1003125 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 5635: Nordhalben + + Deutschland + + + + + German TK25 + 5635 + + + 11.58 + 50.36 + Mittelpunkte von TK25-Rasterfeldern + 6483 + + + + + + + BfN + FlorKart_BfN + 1003126 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 5728: Oberlauringen + + Deutschland + + + + + German TK25 + 5728 + + + 10.42 + 50.26 + Mittelpunkte von TK25-Rasterfeldern + 6487 + + + + + + + BfN + FlorKart_BfN + 1003127 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 6132: Buttenheim + + Deutschland + + + + + German TK25 + 6132 + + + 11.08 + 49.86 + Mittelpunkte von TK25-Rasterfeldern + 6515 + + + + + + + BfN + FlorKart_BfN + 1003128 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 6232: Forchheim + + Deutschland + + + + + German TK25 + 6232 + + + 11.08 + 49.76 + Mittelpunkte von TK25-Rasterfeldern + 6522 + + + + + + + BfN + FlorKart_BfN + 1003129 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 6235: Pegnitz + + Deutschland + + + + + German TK25 + 6235 + + + 11.58 + 49.76 + Mittelpunkte von TK25-Rasterfeldern + 6523 + + + + + + + BfN + FlorKart_BfN + 1003130 + + + Datenbank FLORKART, BfN und NetPhyD + Datenbank FLORKART der Floristischen Kartierung Deutschlands, Stand 2007, Bundesamt für Naturschutz (BfN) und Netzwerk Phytodiversitaet Deutschland (NetPhyD) + + + + + + + + + Asteraceae + + + + Cichorium calvum Asch. + + + Cichorium + calvum + SPE + Asch. + + + + + + + + + + 1950-1980 + false + + + Mitarbeiter der Floristischen Kartierung Deutschlands + + MTB 7032: Bieswang + + Deutschland + + + + + German TK25 + 7032 + + + 11.08 + 48.96 + Mittelpunkte von TK25-Rasterfeldern + 6575 + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/imports/NormalExplicitImport.xls b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/NormalExplicitImport.xls new file mode 100644 index 000000000..1c692780a Binary files /dev/null and b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/NormalExplicitImport.xls differ diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SDD.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SDD.xml new file mode 100644 index 000000000..4154c2840 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SDD.xml @@ -0,0 +1,981 @@ + + + + + + + + + + + + + + 2012-06-06T09:34:58 + 2012-06-06T09:34:58 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UnspecifiedTaxonomy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Le <b>pétiole</b> se situe entre le mésosoma et l'alitrunk. + + + + + + + + + + + + + + Les deux articles correspondent au<b>pétiole</b> et au <b>post-pétiole</b>.<br>Soit les deux segments sont plus ou moins réduits, soit le deuxième article est plus large que le premier, soit le postpétiole est largement plus réduit. + + + + + + + + + Quand il est vestigial et non fonctionnel, on le considère comme absent. + + + + + + + + Apex du gastre <b>sans aiguillon</b>. + + + + + + + C'est l'<b>apex du gastre</b> qui porte l'aiguillon.<br>Il est considéré comme présent uniquement s'il <b>est fonctionnel</b>. Certains aiguillons sont dévaginables, d'autres sont visibles de façon permanente. + + + + + + + + + + L'<b>acidopore</b> est l'ouverture à la base du gastre par laquelle le venin est éjecté ou vaporisé + + + + + + + + Quand cette structure est présente, le venin est projeté sous forme de spray. L'<b>acidopore circulaire</b> est parfois visible à l'oeil nu chez les fourmis de grande taille. + + + + + + + Contrairement à l'acidopore circulaire, la <b>fente</b> est rarement visible à l'oeil nu. + + + + + + + + + + + + + + Le <b>pygidium</b> correspond au tergite à l'apex du gastre. + + + + + + + + <b>Pygidium lisse non armé</b> latéralement ou postérieurement. + + + + + + <b>Pygidium armé </b> latéralement, postérieurement ou les deux par une rangée de courtes épines ou dents. + + + + + + + + + + + + + + + + Il s'agit de la <b>marge clypéale antérolatérale</b>. + + + + + + + + + + + + + + + Les <b>yeux</b> des insectes sont des yeux composés d'<b>ommatidies</b>. Attention à ne pas les confondre avec les <b>ocelles</b>, yeux simples souvent situés sur le dessu-de la tête, servant à détecter les variations de luminosité. + + + + + + + + Yeux absents ou très réduits c'est à dire représentés seulement par une seule ou un petit nombre d'ommatidies. + + + + + + Yeux présent et bien visibles composés d'un grand nombre d'ommatidies. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Il s'agit des tropiques (voire subtropiques) du monden entier. + + + + + + Il s'agit des zones tropicales américaines. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + En vue de face, les <b>bases antennaires</b> sont partiellement ou complètement recouvertes par les <b> lobes frontaux</b> (jamais complètement exposées). + + + + + + + En vue de face, les <b>bases antennaires</b> sont complètement exposées et non recouvertes par les lobes frontaux. + + + + + + + + + La <b>suture promésonotale</b> est la suture (ligne de ligne de fusion) entre le pronotum et le mesonotum, les deux premiers articles du thorax. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Les <b>ocelles</b> sont des yeux simples servant à détecter les variations de luminosité. Les ouvrières peuvent avoir un ou plusieurs ocelles. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Leur aiguillon venimeux est vestigial et non fonctionnel. + + + + + + + + + + + + + + Les ouvrières possèdent généralement 11 articles antennaires, rarement 10 ou 11. + + + + + + + + + + + Elles sont partiellement ou totalement cachées par la carèbe frontale, marge du lbe frontal. + + + + Elle est présente et flexible. + + + + Les ocelles sont pratiquement tout le temps absents. + + + + + + + + + + + + + + + + + + + + + + + + + Leur aiguillon est non fonctionnel. + + + + + + + + + + + Leurs yeux sont généralement bien développés, rarement réduits ou absents. + + + + + + + + + + + + + + + + + + + + + + Les ocelles sont présents dans la grande majorité des genres. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Les Ponerinae possèdent des yeux bien développés dans la grande majorité des cas. + + + + + + + + + + + + + + + + + Si les yeux et les lobes frontaux sont absents, la suture promésonotale est toujours absente. + + + + + En général les ouvrières de poneriane ne portent pas d'ocelles. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Le nombre d'articles antennaires peut varier de 4 à 12 chez les Myrmicinae. + + + + + + + + + + + + + + + + + Elle est souvent complètement absente et rarement vestigiale. Quand c'est le cas, elle donne l'impression transversalement s'un arche en vue dorsale. + + + + + Les ocelles sont la plupart du temps absents, très rarement présents. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + La projestion clypéale concernée est postérieure c'est à dir vers les mandibules, et non vers le haut de la tête. + + + + + + + + + + + + + + + + + + + + Elle est très visible en vue dorsale. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Leurs yeux sont réduits à une seule ommatidies ou absents. + + + + + + + + + + + + + + + + + Cette suture n'est jamais marqué et elle est flexible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aiguillon bien dévellopé et fonctionnel. + + + + + + + Il existe un rangée apicale ou marginale de courtes dents ou épines. + + + + + + + Les yeux sont généralement présents, très rarement réduits ou absents. + + + + + + + + + + + + + + + + + La plupart du temps, elle est complètement absente. Elle n'est que très rarement visible. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dolichoderinae + + Image + + + + + + Dolichoderinae + + Image + + + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SpecimenExcelImport.xls b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SpecimenExcelImport.xls new file mode 100644 index 000000000..4b8db5b88 Binary files /dev/null and b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/SpecimenExcelImport.xls differ diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/imports/TcsImport.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/TcsImport.xml new file mode 100644 index 000000000..545f7c862 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/imports/TcsImport.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + Fl. SSR + + + Copeland, H.F. (1943). A study, anatomical and taxonomic, of the + genera of Rhododendroideae. Am. Midl.Nat. 30:533-625 + + + Wilson, E.H. & Rehder, A. (1921). A monograph of the azaleas. + Publication of the Arnold Arboretum No. 9 Harvard University, Cambridge + MA. + + + Judd, W.S. & Kron, K.A. (1995) A Revision of Rhododendron VI + Edinb. J. Bot. 52(1): 1-54 + + + Maximoxicz, C.J. (1870) Rhododendron schlippenbachii. Mem. Acad. Sci. + St Petersbourg. ser.3 15. + + + + + Rhododendron + + + Rhododendron subgenus Pentanthera (G. Don) Poyarkova + + Rhododedron subgenus Pentanthera + Rhododendron + Pentanthera + + + (G.Don) Poyarkova + + G. Don + + G. Don + + + + Poyarkova + + Poyarkova + + + + Fl. SSR Vol 18 (1952) + Page 57 + + Rhododendron flavum G.Don + + + + + + Rhododendron sect. Sciadorhodion Rehder & Wilson + + Rhododendron sect. Sciadorhodion + Rhododendron + Sciadorhodion + + + Rehder & Wilson + + Rehder & Wilson + + + Wislon & Rehder Monogr. Azaleas 79 (1921) + Page 79 + + + + Rhododendron quinquefolium Bisset + & Moore + Copeland, H.F.(1943) + + + + Azalea subgen. Sciadorhodion (Rhehder & Wilson) + Copeland + + + + Rhododendron quinquefolium Bisset & Moore + + + + Azalea subgen. Sciadorhodion (Rhehder & Wilson) Copeland + + Rhododendron sect. Sciadorhodion Rehder & + Wilson + + + + Rhododendron schlippenbachii Maxim. + Species + + Rhododendron schlippenbachii + Rhododendron + schlippenbachii + + + Maxim. + + Maxim. + + Maximoxicz, C.J. + + + + Bull. Acad. Sci. St Petersbourg, ser. 3 15 (1870) + Page 226 + + + + + + + Page 15 + + + + + Page 15 + + + + + + Azalea schlippenbachii (Maxim.) Kuntze + + Azalea schlippenbachii + Azalea + schlippenbachii + + + (Maxim.) Kuntze + + Maxim. + + + Kuntze + + + Revis. Gen.Pl. 2:387 (1891) + + + + + [Russia] Manchuria, shores of Possiet Bay, [SW of + Vladivostok], 1860, C. Maximowicz LE + + Page 15 + + + + + + Rhododendron pentaphyllum Maxim. + + Rhododendron pentaphyllum + Rhododendron + pentaphyllum + + + Maxim. + + Bull. Acad. Sci. St Petersbourg, ser. 3, 31:65 (1887) + + + + + Japan, Kyushiu, prov. Osumi, summit, Mt Taka-kuma, Tashiro + (LE) + + + + + + + Azalea pentaphylla (Maxim.) Copeland + + Azalea pentaphylla + Azalea + pentaphylla + + + (Maxim.) Copeland + + Maxim. + + + Copeland + + + Am.Midl.Nat. 30:595 (1943) + + + + + Japan, Kyushiu, prov. Osumi, summit, Mt Taka-kuma, Tashiro + (LE) + + + + + + Rhododendron pentaphyllum var. nikoense Komatsu + variety + + Rhododendron pentaphyllum var. nikoense + Rhododendron + pentaphyllum + nikoense + + + Konatsu + + Icon. Pl. Koisikav. 3: 45, t 168 (1916) + + + Rhododendron nikoense (Komatsu) Nakai + Species + + Rhododendron nikoense + Rhododendron + nikoense + + + (Komatsu) Nakai + + Komatsu + + + Nakai + + + Nakai & Koidz. Trees and Shrubs Japan 1: 68 (1922) + + Rhododendron pentaphyllum var. nikoense + + + + Rhododendron quinquefolium Bisset & S. Moore var. roseum Rehder + variety + + Rhododendron quinquefolium + Rhododendron + quinquefolium + roseum + + + Rehder + + Bailey, Stand. Cycl. Hort. 5: 2947 (1916) + + + Rhododendron pentaphyllum Maxim. var. shikokianum T. Yamazaki + species + + Rhododendron pentaphyllum var. shikokianum + Rhododendron + pentaphyllum + shikokianum + + + T. Yamazaki + + Jap. Bot. 63: 312 (1988) + + + + + Rhododendron sect. Sciadorhodion Rehder + & Wilson + Section + + Judd & Kron (1995) + + Judd & Kron (1995) A Revision of + Rhododendron VI + Page 13-14 + + + + + + + + + + Rhododendron schlippenbachii Maxim. + + Judd & Kron (1995) + + + Page 15 + + + + + Rhododendron sect. Sciadorhodion Rehder & + Wilson + + + + + Azalea schlippenbachii (Maxim.) Kuntze + + Kuntze (1891) + + + + + + + + + Rhododendron pentaphyllum Maxim. + + Judd & Kron (1995) + + + + + + + + + + + + Rhododendron pentaphyllum var. nikoense + Komatsu + + + + Rhododendron pentaphyllum Maxim. var. shikokianum T. + Yamazaki + + + Rhododendron quinquefolium Bisset & S. Moore var. roseum + Rehder + + + + + Rhododendron nikoense (Komatsu) Nakai + + + Rhododendron nikoense (Komatsu) Nakai + + + Rhododendron pentaphyllum var. nikoense Komatsu + + + diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/log4j.xml b/eu.etaxonomy.taxeditor.test/src/test/resources/log4j.xml new file mode 100644 index 000000000..11c15a6e8 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/log4j.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/server.properties b/eu.etaxonomy.taxeditor.test/src/test/resources/server.properties new file mode 100644 index 000000000..06d7199b7 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/server.properties @@ -0,0 +1,6 @@ +httpPort=9090 +stopPort=9191 +stopKey=jetty-cdm-server +user=admin +password=00000 +contextPath= diff --git a/eu.etaxonomy.taxeditor.test/src/test/resources/unitils.properties b/eu.etaxonomy.taxeditor.test/src/test/resources/unitils.properties new file mode 100644 index 000000000..daea61b65 --- /dev/null +++ b/eu.etaxonomy.taxeditor.test/src/test/resources/unitils.properties @@ -0,0 +1,69 @@ +# +# NOTE: this is the unitils.properties file for the cdmlib-persistence module +# a separate unitils.properties exists for cdmlib-io and for cdmlib-services +# +# +# the list of all properties is found in +# http://unitils.org/unitils-default.properties +# + +### Unitils Modules ### +# List of modules that is loaded. Overloading this list is normally not useful, unless you want to add a custom +# module. Disabling a module can be performed by setting unitils.module..enabled to false. +# If a module's specific dependencies are not found (e.g. hibernate is not in you classpath), this module is not loaded, +# even if it is in this list and the enabled property is set to true. It's therefore not strictly necessary to disable +# any of these modules. +#DEFAULT: unitils.modules=database,dbunit,hibernate,mock,easymock,inject,spring,jpa +unitils.module.easymock.enabled=false +unitils.module.mock.enabled=false + + +### Database ### +# +# Name or path of the user specific properties file. This file should contain the necessary parameters to connect to the +# developer's own unit test schema. It is recommended to override the name of this file in the project specific properties +# file, to include the name of the project. The system will try to find this file in the classpath, the user home folder +# (recommended) or the local filesystem. +# +unitils.configuration.localFileName=unitils-cdmlib-local.properties + +# H2 # +# +database.driverClassName=org.h2.Driver +#database.url=jdbc:h2:file:./src/main/resources/h2/cdmTest;AUTO_SERVER=TRUE +database.url=jdbc:h2:file:./target/classes/h2/cdmTest;AUTO_SERVER=TRUE +database.dialect=h2 +database.userName=sa +database.password= +database.schemaNames=PUBLIC +org.dbunit.dataset.datatype.IDataTypeFactory.implClassName.h2=org.dbunit.ext.h2.H2DataTypeFactory +org.unitils.core.dbsupport.DbSupport.implClassName.h2=eu.etaxonomy.taxeditor.util.H2DbSupport +database.storedIndentifierCase.h2=auto +database.identifierQuoteString.h2=auto + + +#### Transaction mode ### +# +# If set to commit or rollback, each test is run in a transaction, +# which is committed or rolled back after the test is finished. +# Since we have many tests with incomplete data these tests would be +# failing during commit so it is better use rollback as default +# and set commit for individual test where necessary +DatabaseModule.Transactional.value.default=rollback + +# org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager is used by default: +# +# Implements transactions for unit tests, by delegating to a spring PlatformTransactionManager. +# The concrete implementation of PlatformTransactionManager that is used depends on the test class. +# If a custom PlatformTransactionManager was configured in a spring ApplicationContext, this one is used. +# If not, a suitable subclass of PlatformTransactionManager is created, depending on the configuration +# of a test. E.g. if some ORM persistence unit was configured on the test, a PlatformTransactionManager +# that can offer transactional behavior for such a persistence unit is used. +# If no such configuration is found, a DataSourceTransactionManager is used. +# +# org.unitils.database.transaction.UnitilsTransactionManager.implClassName=org.unitils.database.transaction.impl.SpringTransactionManager + +### Hibernate ### +# +HibernateModule.configuration.implClassName=org.hibernate.cfg.Configuration + diff --git a/eu.etaxonomy.taxeditor.webapp/.classpath b/eu.etaxonomy.taxeditor.webapp/.classpath new file mode 100644 index 000000000..e932ef589 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor.webapp/.gitignore b/eu.etaxonomy.taxeditor.webapp/.gitignore new file mode 100644 index 000000000..09e3bc9b2 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/target/ diff --git a/eu.etaxonomy.taxeditor.webapp/.project b/eu.etaxonomy.taxeditor.webapp/.project new file mode 100644 index 000000000..4dba6d36f --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/.project @@ -0,0 +1,28 @@ + + + eu.etaxonomy.taxeditor.webapp + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/eu.etaxonomy.taxeditor.webapp/.settings/org.eclipse.jdt.core.prefs b/eu.etaxonomy.taxeditor.webapp/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..d17b6724d --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/eu.etaxonomy.taxeditor.webapp/META-INF/MANIFEST.MF b/eu.etaxonomy.taxeditor.webapp/META-INF/MANIFEST.MF new file mode 100644 index 000000000..7b2da2d9f --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/META-INF/MANIFEST.MF @@ -0,0 +1,18 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Webapp +Bundle-SymbolicName: eu.etaxonomy.taxeditor.webapp;singleton:=true +Bundle-Version: 3.12.0 +Require-Bundle: org.eclipse.core.runtime +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 +Bundle-ActivationPolicy: lazy +Export-Package: eu.etaxonomy.taxeditor.webapp +Bundle-ClassPath: ., + lib/log4j-1.2.17.jar, + lib/jetty-all-9.2.9.v20150224.jar, + lib/javax.servlet-api-3.1.0.jar, + lib/mysql-connector-java-5.1.24.jar +Bundle-Vendor: EDIT +Import-Package: org.eclipse.jface.resource, + org.eclipse.ui.plugin +Bundle-Activator: eu.etaxonomy.taxeditor.webapp.TaxeditorWebappPlugin diff --git a/eu.etaxonomy.taxeditor.webapp/build.properties b/eu.etaxonomy.taxeditor.webapp/build.properties new file mode 100644 index 000000000..4ff6758de --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/build.properties @@ -0,0 +1,9 @@ +source.. = src/main/java/,\ + src/main/resources/ +bin.includes = META-INF/,\ + .,\ + lib/log4j-1.2.17.jar,\ + lib/jetty-all-9.2.9.v20150224.jar,\ + lib/javax.servlet-api-3.1.0.jar,\ + lib/mysql-connector-java-5.1.24.jar,\ + lib/cdmlib-remote-webapp.war diff --git a/eu.etaxonomy.taxeditor.webapp/lib/javax.servlet-api-3.1.0.jar b/eu.etaxonomy.taxeditor.webapp/lib/javax.servlet-api-3.1.0.jar new file mode 100644 index 000000000..6b14c3d26 Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/lib/javax.servlet-api-3.1.0.jar differ diff --git a/eu.etaxonomy.taxeditor.webapp/lib/jetty-all-9.2.9.v20150224.jar b/eu.etaxonomy.taxeditor.webapp/lib/jetty-all-9.2.9.v20150224.jar new file mode 100644 index 000000000..2926f45e7 Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/lib/jetty-all-9.2.9.v20150224.jar differ diff --git a/eu.etaxonomy.taxeditor.webapp/lib/log4j-1.2.17.jar b/eu.etaxonomy.taxeditor.webapp/lib/log4j-1.2.17.jar new file mode 100644 index 000000000..1d425cf7d Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/lib/log4j-1.2.17.jar differ diff --git a/eu.etaxonomy.taxeditor.webapp/lib/mysql-connector-java-5.1.24.jar b/eu.etaxonomy.taxeditor.webapp/lib/mysql-connector-java-5.1.24.jar new file mode 100644 index 000000000..c640a8d1a Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/lib/mysql-connector-java-5.1.24.jar differ diff --git a/eu.etaxonomy.taxeditor.webapp/pom.xml b/eu.etaxonomy.taxeditor.webapp/pom.xml new file mode 100644 index 000000000..dfdca5bec --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/pom.xml @@ -0,0 +1,110 @@ + + + + eu.etaxonomy + taxeditor-parent + 3.12.0 + + 4.0.0 + eu.etaxonomy.taxeditor.webapp + eclipse-plugin + CDM Library Webapp Plugin + CDM Library webapp as a plugin + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.7 + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.4 + + + copy-dependency-war + validate + + copy-dependencies + + + + cdmlib-remote-webapp + + + ${basedir}/lib + + true + true + true + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.7 + + + update-snapshot-jar-names + validate + + run + + + + Anonymizing war + + + + + + + + + + + + + + SpringSource Enterprise Bundle Repository - External Bundle + Milestones + + http://repository.springsource.com/maven/bundles/milestone + + + + SpringSource Enterprise Bundle Repository - SpringSource + Bundle + Releases + + http://repository.springsource.com/maven/bundles/release + + + + SpringSource Enterprise Bundle Repository - External Bundle + Releases + + http://repository.springsource.com/maven/bundles/external + + + + + + eu.etaxonomy + cdmlib-remote-webapp + ${cdmlib.version} + war + + + + diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMEmbeddedServerException.java b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMEmbeddedServerException.java new file mode 100644 index 000000000..456e073b6 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMEmbeddedServerException.java @@ -0,0 +1,31 @@ +// $Id$ +/** +* Copyright (C) 2014 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.webapp; + +/** + * @author cmathew + * @date 23 Sep 2014 + * + */ +public class CDMEmbeddedServerException extends Exception { + + public CDMEmbeddedServerException(String message) { + super(message); + } + + public CDMEmbeddedServerException(Exception e) { + super(e); + } + + public CDMEmbeddedServerException(String message,Exception e) { + super(message,e); + } + +} diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMServer.java b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMServer.java new file mode 100644 index 000000000..98e68a5d4 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/CDMServer.java @@ -0,0 +1,241 @@ +// $Id$ +/** + * Copyright (C) 2014 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.webapp; + +import java.io.File; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; + +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.MBeanServerConnection; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; + +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.util.StringUtil; +import org.eclipse.jetty.util.preventers.AppContextLeakPreventer; +import org.eclipse.jetty.webapp.WebAppContext; +import org.osgi.framework.Bundle; + +/** + * + * (Singleton) Server instance which manages a compatible cdmlib-webapp-war. + * This is done by launching a jetty instance (using jetty-runner) as an + * executed process. The choice of the external process over a more + * preferable 'embedded jetty' instance is due to problems arising from the + * class loading of classes (e.g. from hibernate core) which are needed + * for both the webapp as well as the remoting client. + * + * @author cmathew + * @date 23 Sep 2014 + * + */ + +public class CDMServer { + + public static final Logger logger = Logger.getLogger(CDMServer.class); + + + private final String dataSourceName; + private final String host = "127.0.0.1"; + private int httpPort = 9090; + private final String contextPath = "/"; + + private File warFile; + private Server server; + + + public CDMServer(String dataSourceName, File dataSourcesFile) throws CDMEmbeddedServerException { + if(StringUtil.isBlank(dataSourceName)) { + throw new CDMEmbeddedServerException("DataSource name is not valid"); + } + + if(dataSourcesFile == null || !dataSourcesFile.exists()) { + throw new CDMEmbeddedServerException("DataSource config file does not exist"); + } + this.dataSourceName = dataSourceName; + Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.webapp"); + URL warURL = bundle.getEntry("lib/cdmlib-remote-webapp.war"); + + try { + URL resolvedWarURL = FileLocator.toFileURL(warURL); + // We need to use the 3-arg constructor of URI in order to properly escape file system chars + URI resolvedURI = new URI(resolvedWarURL.getProtocol(), resolvedWarURL.getPath(), null); + warFile = new File(resolvedURI); + System.out.println("war url : " + warFile.getAbsolutePath()); + + if(warFile == null || !warFile.exists()) { + throw new CDMEmbeddedServerException("Cdmlib War file does not exist"); + } + } catch (URISyntaxException use) { + throw new CDMEmbeddedServerException(use); + } catch (IOException ioe) { + throw new CDMEmbeddedServerException(ioe); + } + + System.setProperty("spring.profiles.active", "remoting"); + System.setProperty("cdm.beanDefinitionFile", dataSourcesFile.getAbsolutePath()); + System.setProperty("cdm.datasource", dataSourceName); + + httpPort = findFreePort(); + + logger.warn("Starting server on port : " + httpPort); + + server = new Server(httpPort); + + server.addBean(new AppContextLeakPreventer()); + + WebAppContext webapp = new WebAppContext(); + webapp.setContextPath(contextPath); + webapp.setWar(warFile.getAbsolutePath()); + + server.setHandler(webapp); + } + + public String getDataSourceName() { + return dataSourceName; + } + public String getHost() { + return host; + } + + public int getPort() { + return httpPort; + } + + public String getContextPath() { + return contextPath; + } + + private static int findFreePort() throws CDMEmbeddedServerException { + ServerSocket socket = null; + try { + socket = new ServerSocket(0); + socket.setReuseAddress(true); + int port = socket.getLocalPort(); + try { + socket.close(); + } catch (IOException e) { + + } + return port; + } catch (IOException e) { + } finally { + if (socket != null) { + try { + socket.close(); + } catch (IOException e) { + } + } + } + throw new CDMEmbeddedServerException("Could not find a free TCP/IP port to start embedded Jetty HTTP Server on"); + } + + public void start(ICDMServerError cdmServerError) throws CDMEmbeddedServerException { + start(true, cdmServerError); + } + + public void start(boolean wait, final ICDMServerError cdmServerError) throws CDMEmbeddedServerException { + + if(server == null) { + throw new CDMEmbeddedServerException("Server is already disposed"); + } + + if(server.isStarting()) { + throw new CDMEmbeddedServerException("Server is starting"); + } + + if(server.isStarted()) { + throw new CDMEmbeddedServerException("Server has started"); + } + + if(server.isRunning()) { + throw new CDMEmbeddedServerException("Server is running"); + } + + if(server.isStopping()) { + throw new CDMEmbeddedServerException("Server is currently stopping. Please re-try in about 10 seconds"); + } + + Thread serverThread = new Thread() { + + @Override + public void run() { + try { + server.start(); + server.join(); + } catch (Throwable t) { + cdmServerError.handleError(t); + } + } + }; + + serverThread.start(); + + if(wait) { + while(!server.isStarted()) {} + + } + } + + public boolean isAlive() { + return server.isRunning() || server.isStarting() || server.isStarted(); + } + + public boolean isStarted() { + return server.isStarted(); + } + + public void stop() throws Exception { + server.stop(); + server.destroy(); + server = null; + } + + + + + public static void stopServerViaJMX(int jmxPort) throws CDMEmbeddedServerException { + String JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:" + jmxPort + "/jmxrmi"; + logger.warn("Shutting down Jetty instance ... "); + + try { + JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(JMX_URL), null); + connector.connect(null); + MBeanServerConnection connection = connector.getMBeanServerConnection(); + ObjectName objectName = new ObjectName("org.eclipse.jetty.server:type=server,id=0"); + connection.invoke(objectName, "stop", null, null); + logger.warn("Shutdown command sent"); + } catch (InstanceNotFoundException e) { + throw new CDMEmbeddedServerException(e); + } catch (MBeanException e) { + throw new CDMEmbeddedServerException(e); + } catch (ReflectionException e) { + throw new CDMEmbeddedServerException(e); + } catch (IOException e) { + throw new CDMEmbeddedServerException(e); + } catch (MalformedObjectNameException e) { + throw new CDMEmbeddedServerException(e); + } + } + + +} diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/ICDMServerError.java b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/ICDMServerError.java new file mode 100644 index 000000000..88cc1a444 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/ICDMServerError.java @@ -0,0 +1,21 @@ +// $Id$ +/** +* Copyright (C) 2015 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.webapp; + +/** + * @author cmathew + * @date 16 Nov 2015 + * + */ +public interface ICDMServerError { + + public void handleError(Throwable t); + +} diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/TaxeditorWebappPlugin.java b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/TaxeditorWebappPlugin.java new file mode 100644 index 000000000..83c094968 --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/src/main/java/eu/etaxonomy/taxeditor/webapp/TaxeditorWebappPlugin.java @@ -0,0 +1,81 @@ +package eu.etaxonomy.taxeditor.webapp; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + * + * @author n.hoffmann + * @version $Id: $ + */ +public class TaxeditorWebappPlugin extends AbstractUIPlugin { + + // The plug-in ID + /** Constant PLUGIN_ID="eu.etaxonomy.taxeditor.editor" */ + public static final String PLUGIN_ID = "eu.etaxonomy.taxeditor.editor"; + + // The shared instance + private static TaxeditorWebappPlugin plugin; + + /** + * The constructor + */ + public TaxeditorWebappPlugin() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + /** {@inheritDoc} */ + @Override + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + /** {@inheritDoc} */ + @Override + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static TaxeditorWebappPlugin getDefault() { + return plugin; + } + + /** + * Returns an image descriptor for the image file at the given + * plug-in relative path + * + * @param path the path + * @return the image descriptor + */ + public static ImageDescriptor getImageDescriptor(String path) { + return imageDescriptorFromPlugin(PLUGIN_ID, path); + } + + + /** + * Exposes this normally protected method. + * + * @return a {@link org.eclipse.jface.resource.ImageRegistry} object. + */ + @Override + public ImageRegistry createImageRegistry(){ + return super.createImageRegistry(); + } +} diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/.svnignore b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/.svnignore new file mode 100644 index 000000000..a09ae971f --- /dev/null +++ b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/.svnignore @@ -0,0 +1 @@ +cdmlib-remote-webapp.war diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar new file mode 100644 index 000000000..91c88d6cd Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar differ diff --git a/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar new file mode 100644 index 000000000..ef2faaf2a Binary files /dev/null and b/eu.etaxonomy.taxeditor.webapp/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar differ diff --git a/eu.etaxonomy.taxeditor/.classpath b/eu.etaxonomy.taxeditor/.classpath index 3446faf90..412e52cde 100644 --- a/eu.etaxonomy.taxeditor/.classpath +++ b/eu.etaxonomy.taxeditor/.classpath @@ -1,12 +1,12 @@ - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product b/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product index 8a38dc7df..59c1739cf 100644 --- a/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product +++ b/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product @@ -1,5 +1,5 @@ - + @@ -8,9 +8,12 @@ - -data @user.home/.cdmLibrary -Dserver_port=58080 - -Xmx512M -XX:MaxPermSize=256M -Dorg.eclipse.update.reconcile=false -Declipse.p2.unsignedPolicy=allow - -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts + -data @user.home/.cdmLibrary -Dserver_port=58080 + + -Xmx512M -XX:MaxPermSize=256M -Dorg.eclipse.update.reconcile=false -Declipse.p2.unsignedPolicy=allow + + -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts + diff --git a/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product.with.jre b/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product.with.jre index 7998db3a2..688e70bd0 100644 --- a/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product.with.jre +++ b/eu.etaxonomy.taxeditor/eu.etaxonomy.taxeditor.product.with.jre @@ -1,7 +1,7 @@ - + diff --git a/eu.etaxonomy.taxeditor/pom.xml b/eu.etaxonomy.taxeditor/pom.xml index 94022ce50..cb449a205 100644 --- a/eu.etaxonomy.taxeditor/pom.xml +++ b/eu.etaxonomy.taxeditor/pom.xml @@ -2,7 +2,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 4.0.0 @@ -12,41 +12,45 @@ EDIT Taxonomic Editor Product The EDIT Taxonomic Desktop Editor http://wp5.e-taxonomy.eu/taxeditor - + eu.etaxonomy.taxeditor.product - - - - org.eclipse.tycho - tycho-p2-director-plugin - ${tycho.version} - - - materialize-products - - materialize-products - - - - archive-products - - archive-products - - - - - - - ${product.id} - EDIT Taxonomic Editor - - - - - - + + + buildProducts + + + + org.eclipse.tycho + tycho-p2-director-plugin + ${tycho.version} + + + materialize-products + + materialize-products + + + + archive-products + + archive-products + + + + + + + ${product.id} + EDIT Taxonomic Editor + + + + + + + signJars @@ -132,4 +136,4 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8bfd6491a..e0a9b72c1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ eu.etaxonomy taxeditor-parent - 3.8.1 + 3.12.0 EDIT Taxonomic Editor The Taxonomic Editor for EDIT's platform for cybertaxonomy @@ -18,11 +18,12 @@ 1.6 UTF-8 - 3.8.0 + 3.12.0 0.22.0 - 3.8.0 + 3.12.0 snapshot + 3.4.2 eu.etaxonomy.taxeditor.cdmlib @@ -34,9 +35,11 @@ eu.etaxonomy.taxeditor.help eu.etaxonomy.taxeditor.molecular eu.etaxonomy.taxeditor.molecular.lib + eu.etaxonomy.taxeditor.webapp eu.etaxonomy.taxeditor.application eu.etaxonomy.taxeditor.feature.platform eu.etaxonomy.taxeditor.feature + eu.etaxonomy.taxeditor.feature.jre.linux64 eu.etaxonomy.taxeditor @@ -84,7 +87,7 @@ Java Developer Architect - + @@ -102,7 +105,7 @@ Java Developer Architect - +