Merge branch 'move-to-luna' into remoting-4.0
authorCherian Mathew <c.mathew@bgbm.org>
Fri, 22 May 2015 08:54:21 +0000 (10:54 +0200)
committerCherian Mathew <c.mathew@bgbm.org>
Fri, 22 May 2015 08:54:21 +0000 (10:54 +0200)
Conflicts:
eu.etaxonomy.taxeditor.cdmlib/.classpath
eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.cdmlib/build.properties
eu.etaxonomy.taxeditor.cdmlib/pom.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/parser/MatchStrategyConfigurator.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java
eu.etaxonomy.taxeditor.test/.classpath
eu.etaxonomy.taxeditor.test/META-INF/MANIFEST.MF

206 files changed:
.gitattributes
.gitignore
eu.etaxonomy.taxeditor.application/plugin.xml
eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/ApplicationUtil.java
eu.etaxonomy.taxeditor.cdmlib/.classpath
eu.etaxonomy.taxeditor.cdmlib/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.cdmlib/build.properties
eu.etaxonomy.taxeditor.cdmlib/lib/aspectjrt-1.7.1-sources.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/aspectjweaver-1.7.1-sources.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-core-3.4.2.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-database-3.4.2.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbmaintainer-3.4.2.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-dbunit-3.4.2.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-easymock-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-inject-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-mock-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-orm-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.3.jar [deleted file]
eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/pom.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteController.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredGenericApplicationContext.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredListableBeanFactory.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/lazyloading/CdmLazyLoader.java [deleted file]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelFieldPropertyFromClass.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmPersistentRemoteSource.java with 89% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSource.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSource.java with 96% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceBase.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceBase.java with 86% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/CdmRemoteSourceException.java with 82% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/remote/ICdmRemoteSource.java with 94% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManager.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionEnabled.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManager.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySessionManagerObserver.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySessionManager.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/cdmlib-ehcache.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/.svnignore [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/localApplicationContext.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties [new file with mode: 0644]
eu.etaxonomy.taxeditor.cdmlib/src/test/resources/eu/etaxonomy/cdm/datasources/cdm.datasources.xml [deleted file]
eu.etaxonomy.taxeditor.editor/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmEntitySessionInput.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/MultiPageTaxonEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/TaxonEditorInput.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/KeyEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyEditorInput.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/PolytomousKeyListEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/key/polytomous/operation/DeleteNodeOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/TaxonNameEditor.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/ChangeSynonymToAcceptedTaxonHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateHomotypicSynonymHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/CreateSynonymInHomotypicalGroupHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/DeleteTaxonBaseHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/handler/SwapSynonymAndAcceptedHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeHomotypicalGroupBasionymOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/ChangeSynonymToAcceptedTaxonOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExistingHomotypicalGroupOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteMisapplicationOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteSynonymOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonBaseOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteTaxonOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientAgentService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientClassificationService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientCollectionService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientDescriptionService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientNameService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientOccurenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientReferenceService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTaxonService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/dataimport/transientServices/TransientTermService.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/DeleteHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/handler/MoveDescriptionToOtherTaxonHandler.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteDescriptionElementOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteSpecimenDescriptionOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/DeleteTaxonDescriptionOperation.java
eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/descriptive/operation/MoveDescriptionToOtherTaxonOperation.java
eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/CreateSynonymInExisitingHomotypicalGroupOperationTest.java
eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/DeleteDescriptionElementOperationTest.java
eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/name/operation/SwapSynonymAndAcceptedOperationTest.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/PolytomousKeyViewPart.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/handler/DeleteHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/key/polytomous/operation/DeleteOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/Root.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonLinkHelper.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigator.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TaxonNavigatorDataChangeBehavior.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/TreeNodeDropAdapterAssistant.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/ChangeAcceptedTaxonToSynonymHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/DeleteHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveFactualDataHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/handler/MoveTaxonHandler.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/ChangeAcceptedTaxonToSynonymOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/DeleteOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/EditClassificationOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/navigator/operation/MoveTaxonOperation.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateClassification.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreatePolytomousKey.java
eu.etaxonomy.taxeditor.navigation/src/main/java/eu/etaxonomy/taxeditor/navigation/operation/CreateTaxonNode.java
eu.etaxonomy.taxeditor.store/plugin.xml
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/datasource/CdmDataSourceRepository.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenInspectSessionsHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowRemotingLoginWindowHandler.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/io/wizard/ExportToFileDestinationWizardPage.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/model/AbstractUtility.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/newWizard/NewTaxonNodeWizard.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPersistentPostOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/operation/AbstractPostTaxonOperation.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/parser/ParseHandler.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/AbstractMatchingPreferences.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/NonViralNameMatchingPreference.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/ReferenceMatchingPreference.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/preference/matching/TeamOrPersonMatchingPreference.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStore.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/CdmStoreConnector.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/RemotingLoginDialog.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/AbstractCdmViewPart.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/InspectSessionsDialog.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/SessionsViewPart.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/operations/AbstractTaxeditorOperationTestBase.java
eu.etaxonomy.taxeditor.test/.classpath
eu.etaxonomy.taxeditor.test/.project
eu.etaxonomy.taxeditor.test/.settings/org.eclipse.jdt.core.prefs
eu.etaxonomy.taxeditor.test/META-INF/MANIFEST.MF
eu.etaxonomy.taxeditor.test/build.properties
eu.etaxonomy.taxeditor.test/lib/byte-buddy-0.5.1.jar [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/pom.xml
eu.etaxonomy.taxeditor.test/src/main/resources/cdmlib-ehcache.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/datasources.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/cdm.datasources.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/PolytomousKeyTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNameEditorTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNavigatorTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/remoting/session/CdmEntitySessionManagerTest.xml [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.h2.db [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.trace.db [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/log4j.properties [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/main/resources/unitils.properties [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmModelGetMethodCacherTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/PolytomousKeyTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNameEditorTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNavigatorTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CDMServer.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmPersistentRemoteSourceTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmRemoteSourceTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTestManager.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/HttpInvokerServicesTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmServiceCacherTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemotePersistentCollectionTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operations/OperationTestBase.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ITestService.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceInterceptorTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceRebasingTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TargetTestService.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TestService.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/CdmEntitySessionManagerTest.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/session/MockSessionOwner.java [new file with mode: 0644]
eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/ui/dialogs/CdmServerInfoTest.java [new file with mode: 0644]

index 31cdf5895e01f2ee1bd06a6e6e5b224fad8bc685..e9ce314b7ac9e76219c6f4ff49a1dc1994019b37 100644 (file)
@@ -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
@@ -1261,8 +1291,10 @@ 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
+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/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
@@ -1358,7 +1390,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
@@ -1430,6 +1461,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
@@ -1819,6 +1851,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
@@ -1852,14 +1886,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
index 5c8b928b8e9810e6ba3615b0efdeead665c5c54d..4829b148df5c5cb5edda0e879ba15eb6a95ff114 100644 (file)
@@ -8,6 +8,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
index b74e209ce9d93b65fa3e04ed7461db32d7388015..97897e12022fe17a56d4be80ccaeb223b3de2536 100644 (file)
                name="eu.etaxonomy.taxeditor.application.filemenu.io"\r
                visible="true">\r
          </separator>\r
+         <command\r
+               commandId="eu.etaxonomy.taxeditor.store.operations.showRemotingLoginWindow"\r
+               id="eu.etaxonomy.taxeditor.application.menu.login"\r
+               label="Connect"\r
+               style="push">\r
+         </command>\r
          <command\r
                commandId="org.eclipse.ui.file.exit"\r
                id="eu.etaxonomy.taxeditor.application.menu.exit"\r
             id="eu.etaxonomy.taxeditor.install"\r
             name="%command.label.18">\r
       </command>\r
+      <command\r
+            defaultHandler="eu.etaxonomy.taxeditor.handler.ShowRemotingLoginWindowHandler"\r
+            id="eu.etaxonomy.taxeditor.store.operations.showRemotingLoginWindow"\r
+            name="Connect">\r
+      </command>\r
    </extension>\r
    \r
    \r
index e3eacfd685dc6e07503a3821867913c05bc1960e..eb8f82986f5f5c573f611b153018b411dacec79a 100644 (file)
@@ -28,7 +28,7 @@ public class ApplicationUtil extends AbstractUtility {
     /**
      * Prefix to declare the version as beta
      */
-    private static final String BETA_PREFIX = "[Beta]";
+    private static final String BETA_PREFIX = "[REMOTING]";
 
     /**
      * @return
index 390956d2a035e98b7fc2e839cb858437122525a7..ac54ad8a89971cad6b2049d64b48addf971073c1 100644 (file)
@@ -1,10 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+       <classpathentry exported="true" kind="lib" path="lib/cdm-server-3.5.2-SNAPSHOT.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/unitils-spring-3.4.2.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/unitils-core-3.4.2.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/unitils-database-3.4.2.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/unitils-dbmaintainer-3.4.2.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/unitils-dbunit-3.4.2.jar"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-       <classpathentry kind="src" path="src/main/java"/>
-       <classpathentry kind="src" path="src/main/resources"/>
-       <classpathentry kind="src" path="src/test/resources"/>
+       <classpathentry including="**/*.java" kind="src" path="src/main/java"/>
+       <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
        <classpathentry exported="true" kind="lib" path="lib/activation-1.1.1.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/antlr-2.7.7.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/aopalliance-1.0.jar"/>
@@ -59,7 +64,7 @@
        <classpathentry exported="true" kind="lib" path="lib/hibernate-c3p0-4.1.10.Final.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/hibernate-cglib-repack-2.1_3.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/hibernate-commons-annotations-4.0.1.Final.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/hibernate-core-4.1.10.Final.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/hibernate-core-4.1.10.Final.jar" sourcepath="/home/cmathew/.m2/repository/org/hibernate/hibernate-core/4.1.10.Final/hibernate-core-4.1.10.Final-sources.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/hibernate-ehcache-4.1.10.Final.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/hibernate-entitymanager-4.1.10.Final.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/hibernate-envers-4.1.10.Final.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/org.springframework.oxm-3.2.2.RELEASE.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/org.springframework.test-3.2.2.RELEASE.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/org.springframework.transaction-3.2.2.RELEASE.jar" sourcepath="lib/org.springframework.transaction-3.2.2.RELEASE-sources.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/org.springframework.web-3.2.2.RELEASE.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/org.springframework.web-3.2.2.RELEASE.jar" sourcepath="/home/cmathew/.m2/repository/org/springframework/org.springframework.web/3.2.2.RELEASE/org.springframework.web-3.2.2.RELEASE-sources.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/org.springframework.web.servlet-3.2.2.RELEASE.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/osgi-3.6.0.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/p6spy-1.3.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/spring-expression-3.2.2.RELEASE.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/spring-modules-cache-0.7.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/spring-security-config-3.1.3.RELEASE.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/spring-security-core-3.1.3.RELEASE.jar"/>
+       <classpathentry exported="true" kind="lib" path="lib/spring-security-core-3.1.3.RELEASE.jar" sourcepath="/home/cmathew/.m2/repository/org/springframework/security/spring-security-core/3.1.3.RELEASE/spring-security-core-3.1.3.RELEASE-sources.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/stax-1.2.0.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/stax-api-1.0.1.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-core-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-database-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-dbmaintainer-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-dbunit-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-easymock-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-inject-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-mock-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-orm-3.3.jar"/>
-       <classpathentry exported="true" kind="lib" path="lib/unitils-spring-3.3.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/usertype.jodatime-2.0.1.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/usertype.spi-2.0.1.jar"/>
        <classpathentry exported="true" kind="lib" path="lib/validation-api-1.0.0.GA.jar"/>
index 30d09f9e0a340dbb8f90db731386ccd0cf095e54..4c4c417d48ed10464b346536a7ca2dbec28b2d33 100644 (file)
@@ -8,9 +8,9 @@ Export-Package: com.google.api,
  com.google.api.detect,
  com.google.api.translate,
  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,
@@ -113,7 +113,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 +135,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,8 +187,19 @@ 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.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.apache.commons.collections;uses:="org.apache.commons.collections.keyvalue,new org.apache.commons.collections",
  org.apache.commons.io;uses:="org.apache.commons.io.filefilter",
@@ -198,6 +207,7 @@ Export-Package: com.google.api,
  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,
@@ -264,13 +274,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,
@@ -310,6 +335,7 @@ Export-Package: com.google.api,
  org.odftoolkit.odfdom.dom.element,
  org.odftoolkit.odfdom.dom.element.style,
  org.odftoolkit.odfdom.dom.style,
+ org.springframework.beans,
  org.springframework.beans.factory,
  org.springframework.beans.factory.annotation;
   uses:="org.apache.commons.logging,
@@ -320,6 +346,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,
@@ -332,8 +361,11 @@ Export-Package: com.google.api,
    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.orm.hibernate3;
   uses:="org.apache.commons.logging,
@@ -361,6 +393,9 @@ 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.event,
@@ -400,6 +435,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,
@@ -412,11 +448,18 @@ Export-Package: com.google.api,
    org.springframework.context.event,
    javax.servlet,
    org.springframework.ui,
-   javax.servlet.http"
+   javax.servlet.http",
+ org.unitils,
+ org.unitils.database,
+ org.unitils.database.annotations,
+ org.unitils.database.util,
+ org.unitils.dbunit.annotation,
+ org.unitils.spring.annotation
 Bundle-Vendor: EDIT
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Require-Bundle: org.eclipse.osgi,
- org.eclipse.equinox.common
+ org.eclipse.equinox.common,
+ org.apache.commons.httpclient;bundle-version="3.1.0"
 Bundle-ClassPath: .,
  lib/activation-1.1.1.jar,
  lib/antlr-2.7.7.jar,
@@ -573,15 +616,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,
@@ -626,5 +660,11 @@ Bundle-ClassPath: .,
  lib/poi-ooxml-3.10-FINAL.jar,
  lib/xmlbeans-2.3.0.jar,
  lib/poi-ooxml-schemas-3.10-FINAL.jar,
- lib/swagger-annotations-1.3.5.jar
-Import-Package: eu.etaxonomy.cdm.api.application
+ lib/swagger-annotations-1.3.5.jar,
+ lib/unitils-core-3.4.2.jar,
+ lib/unitils-database-3.4.2.jar,
+ lib/unitils-dbmaintainer-3.4.2.jar,
+ lib/unitils-dbunit-3.4.2.jar,
+ lib/unitils-spring-3.4.2.jar,
+ lib/cdm-server-3.5.2-SNAPSHOT.jar
+Import-Package: org.apache.commons.httpclient.methods
index d2c2e69526e79ae5148e726bea803f40ea17c153..1cad966b40ce2f56d207ffce294ac302f8ea624d 100644 (file)
@@ -155,15 +155,6 @@ bin.includes = META-INF/,\
                lib/spring-security-core-3.1.3.RELEASE.jar,\\r
                lib/stax-1.2.0.jar,\\r
                lib/stax-api-1.0.1.jar,\\r
-               lib/unitils-core-3.3.jar,\\r
-               lib/unitils-database-3.3.jar,\\r
-               lib/unitils-dbmaintainer-3.3.jar,\\r
-               lib/unitils-dbunit-3.3.jar,\\r
-               lib/unitils-easymock-3.3.jar,\\r
-               lib/unitils-inject-3.3.jar,\\r
-               lib/unitils-mock-3.3.jar,\\r
-               lib/unitils-orm-3.3.jar,\\r
-               lib/unitils-spring-3.3.jar,\\r
                lib/usertype.jodatime-2.0.1.jar,\\r
                lib/usertype.spi-2.0.1.jar,\\r
                lib/validation-api-1.0.0.GA.jar,\\r
@@ -192,7 +183,7 @@ bin.includes = META-INF/,\
                lib/poi-3.10-FINAL.jar,\\r
                lib/poi-ooxml-3.10-FINAL.jar,\\r
                lib/poi-ooxml-schemas-3.10-FINAL.jar,\\r
-               lib/xmlbeans-2.3.0.jar,\\r
+               lib/xmlbeans-2.3.0.jar,\
                lib/cdmlib-commons-3.5.2-SNAPSHOT-sources.jar,\\r
                lib/cdmlib-commons-3.5.2-SNAPSHOT.jar,\\r
                lib/cdmlib-ext-3.5.2-SNAPSHOT-sources.jar,\\r
@@ -209,12 +200,11 @@ bin.includes = META-INF/,\
                lib/cdmlib-remote-3.5.2-SNAPSHOT.jar,\\r
                lib/cdmlib-services-3.5.2-SNAPSHOT-sources.jar,\\r
                lib/cdmlib-services-3.5.2-SNAPSHOT.jar,\\r
-               lib/swagger-annotations-1.3.5.jar\r
+               lib/swagger-annotations-1.3.5.jar
 \r
 jars.compile.order = .\r
 output.. = bin/\r
 source.. = src/main/java/,\\r
-           src/main/resources/,\\r
-           src/test/java/\r
+           src/main/resources/\r
 src.includes = src/\r
 \r
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 (file)
index 21ffee7..0000000
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 (file)
index 9625da0..0000000
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 (file)
index a3a7a7b..0000000
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 (file)
index 0000000..ab4c22e
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 (file)
index f9a1647..0000000
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 (file)
index 0000000..dfcb6ae
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 (file)
index bb20970..0000000
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 (file)
index 0000000..01f8994
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 (file)
index eefa626..0000000
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 (file)
index 0000000..778274e
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 (file)
index c603f0b..0000000
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 (file)
index 8bf141e..0000000
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 (file)
index f201831..0000000
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 (file)
index d8d4e89..0000000
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 (file)
index 53074f0..0000000
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 (file)
index 0000000..f30810b
Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/lib/unitils-spring-3.4.2.jar differ
index 66aade0ae266737ac5879776f8950d470a628004..d5534ed09adc99f673d7ca164c1dc9b6409012ad 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
+<project>\r
+\r
   <parent>\r
     <groupId>eu.etaxonomy</groupId>\r
     <artifactId>taxeditor-parent</artifactId>\r
   <modelVersion>4.0.0</modelVersion>\r
   <artifactId>eu.etaxonomy.taxeditor.cdmlib</artifactId>\r
   <packaging>eclipse-plugin</packaging>\r
-  <name>CDM Library Dependencies Plugin</name>\r
-  <description>CDM Library and dependencies as a plugin</description>\r
+  <name>CDM Library Bundle</name>\r
+  <description>Cdm Library Plugin Taxonomic Editor</description>\r
+\r
   <build>\r
-    <plugins>      \r
-      <plugin>\r
-       <groupId>org.apache.maven.plugins</groupId>\r
-       <artifactId>maven-dependency-plugin</artifactId>\r
-       <version>2.4</version>\r
-       <executions>\r
-         <execution>\r
-           <id>copy-dependencies</id>\r
-           <phase>validate</phase>\r
-           <goals>\r
-             <goal>copy-dependencies</goal>\r
-           </goals>\r
-           <configuration>\r
-             <includeArtifactIds>cdmlib-commons,cdmlib-model,cdmlib-persistence,cdmlib-remote,cdmlib-print,cdmlib-services,cdmlib-ext,cdmlib-io</includeArtifactIds>\r
-             <outputDirectory>lib</outputDirectory>\r
-             <overWriteReleases>true</overWriteReleases>\r
-             <overWriteSnapshots>true</overWriteSnapshots>\r
-             <excludeTransitive>true</excludeTransitive>             \r
-           </configuration>\r
-         </execution>\r
-         <execution>\r
-           <id>copy-dependencies-sources</id>\r
-           <phase>validate</phase>\r
-           <goals>\r
-             <goal>copy-dependencies</goal>\r
-           </goals>\r
-           <configuration>\r
-             <classifier>sources</classifier>\r
-             <includeArtifactIds>cdmlib-commons,cdmlib-model,cdmlib-persistence,cdmlib-remote,cdmlib-print,cdmlib-services,cdmlib-ext,cdmlib-io</includeArtifactIds>\r
-             <outputDirectory>lib</outputDirectory>\r
-             <overWriteReleases>true</overWriteReleases>\r
-             <overWriteSnapshots>true</overWriteSnapshots>\r
-             <excludeTransitive>true</excludeTransitive>\r
-             <failOnMissingClassifierArtifact>false</failOnMissingClassifierArtifact>\r
-           </configuration>\r
-         </execution>\r
-       </executions>\r
+    <pluginManagement>\r
+      <plugins>\r
+        <plugin>\r
+          <groupId>org.apache.maven.plugins</groupId>\r
+          <artifactId>maven-surefire-plugin</artifactId>\r
+          <version>2.7</version>\r
+        </plugin>\r
+      </plugins>\r
+    </pluginManagement>\r
+    <plugins>\r
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>\r
+        <artifactId>maven-dependency-plugin</artifactId>\r
+        <version>2.4</version>\r
+        <executions>\r
+          <execution>\r
+            <id>copy-dependencies</id>\r
+            <phase>validate</phase>\r
+            <goals>\r
+              <goal>copy-dependencies</goal>\r
+            </goals>\r
+            <configuration>\r
+              <excludeArtifactIds>\r
+                cdmlib-remote-webapp\r
+              </excludeArtifactIds>\r
+              <includeArtifactIds>\r
+                cdmlib-services,cdmlib-commons,cdmlib-persistence,cdmlib-ext,cdmlib-model,cdmlib-io,cdmlib-print,cdmlib-remote,cdm-server\r
+              </includeArtifactIds>\r
+              <outputDirectory>${basedir}/lib</outputDirectory>\r
+              <overWriteReleases>true</overWriteReleases>\r
+              <overWriteSnapshots>true</overWriteSnapshots>\r
+              <excludeTransitive>true</excludeTransitive>\r
+            </configuration>\r
+          </execution>\r
+          <execution>\r
+            <id>copy-dependency-war</id>\r
+            <phase>validate</phase>\r
+            <goals>\r
+              <goal>copy-dependencies</goal>\r
+            </goals>\r
+            <configuration>\r
+              <includeArtifactIds>\r
+                cdmlib-remote-webapp\r
+              </includeArtifactIds>\r
+              <outputDirectory>\r
+                ${basedir}/src/main/resources/etc/jetty\r
+              </outputDirectory>\r
+              <overWriteReleases>true</overWriteReleases>\r
+              <overWriteSnapshots>true</overWriteSnapshots>\r
+              <excludeTransitive>true</excludeTransitive>\r
+            </configuration>\r
+          </execution>\r
+        </executions>
       </plugin>\r
       <plugin>\r
-       <groupId>org.apache.maven.plugins</groupId>\r
-       <artifactId>maven-antrun-plugin</artifactId>\r
-       <version>1.7</version>\r
-       <executions>\r
-         <execution>\r
-           <id>remove-existing-jars</id>\r
-           <phase>clean</phase>\r
-           <goals>\r
-             <goal>run</goal>\r
-           </goals>\r
-           <configuration>\r
-             <target>\r
-               <echo>Remove all cdmlib jars</echo>\r
-               <delete>\r
-                 <fileset dir="./lib" includes="cdmlib-*"/>\r
-               </delete>\r
-             </target> \r
-           </configuration>\r
-         </execution>\r
-         <execution>\r
-           <id>update-snapshot-jar-names</id>\r
-           <phase>validate</phase>\r
-           <goals>\r
-             <goal>run</goal>\r
-           </goals>\r
-           <configuration>           \r
-             <target>\r
-               <echo>Update cdmlib jars to SNAPSHOT when build with timestamp</echo>\r
-               <move todir="./lib">\r
-                 <fileset dir="./lib" />\r
-                 <mapper type="regexp"\r
-                         from="(^cdmlib\-.*\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\.jar)" to="\1SNAPSHOT\2" />\r
-               </move>                           \r
-               <move todir="./lib">\r
-                 <fileset dir="./lib" />\r
-                 <mapper type="regexp"\r
-                         from="(^cdmlib\-.*\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\-sources\.jar)" to="\1SNAPSHOT\2" />\r
-               </move>                           \r
-             </target> \r
-           </configuration>\r
-         </execution>\r
-       </executions>\r
+        <groupId>org.apache.maven.plugins</groupId>\r
+        <artifactId>maven-antrun-plugin</artifactId>\r
+        <version>1.7</version>\r
+        <executions>\r
+          <execution>\r
+            <id>update-snapshot-jar-names</id>\r
+            <phase>validate</phase>\r
+            <goals>\r
+              <goal>run</goal>\r
+            </goals>\r
+            <configuration>\r
+              <target>\r
+                <echo>Anonymizing war</echo>\r
+                <move todir="./src/main/resources/etc/jetty">\r
+                  <fileset dir="./src/main/resources/etc/jetty" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdmlib\-.*)\-[0-9]\.[0-9]\.[0-9]\-SNAPSHOT(\.war)"\r
+                    to="\1\2" />\r
+                </move>\r
+                <move todir="./src/main/resources/etc/jetty">\r
+                  <fileset dir="./src/main/resources/etc/jetty" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdmlib\-.*)\-[0-9]\.[0-9]\.[0-9]\-[0-9.-]+(\.war)"\r
+                    to="\1\2" />\r
+                </move>\r
+                <echo>Update cdmlib jars to SNAPSHOT when build with\r
+                  timestamp\r
+                </echo>\r
+                <move todir="./lib">\r
+                  <fileset dir="./lib" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdmlib\-.*\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\.jar)"\r
+                    to="\1SNAPSHOT\2" />\r
+                </move>\r
+                <move todir="./lib">\r
+                  <fileset dir="./lib" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdm\-server\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\.jar)"\r
+                    to="\1SNAPSHOT\2" />\r
+                </move>\r
+                <move todir="./lib">\r
+                  <fileset dir="./lib" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdmlib\-.*\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\-sources\.jar)"\r
+                    to="\1SNAPSHOT\2" />\r
+                </move>\r
+                <move todir="./lib">\r
+                  <fileset dir="./lib" />\r
+                  <mapper type="regexp"\r
+                    from="(^cdm\-server\-[0-9]\.[0-9]\.[0-9]\-)[0-9.-]+(\-sources\.jar)"\r
+                    to="\1SNAPSHOT\2" />\r
+                </move>\r
+              </target>\r
+            </configuration>\r
+          </execution>\r
+        </executions>\r
       </plugin>\r
     </plugins>\r
   </build>\r
+  <profiles>\r
+    <profile>\r
+      <id>cleanCdmlibJars</id>\r
+      <build>\r
+        <plugins>\r
+          <plugin>\r
+            <artifactId>maven-clean-plugin</artifactId>\r
+            <version>2.3</version>\r
+            <configuration>\r
+              <filesets>\r
+                <fileset>\r
+                  <directory>${basedir}/lib</directory>\r
+                  <includes>\r
+                    <include>cdmlib-*</include>\r
+                  </includes>\r
+                  <followSymlinks>false</followSymlinks>\r
+                </fileset>\r
+              </filesets>\r
+            </configuration>\r
+          </plugin>\r
+        </plugins>\r
+      </build>\r
+    </profile>\r
+    <profile>\r
+      <id>cleanAllJars</id>\r
+      <build>\r
+        <plugins>\r
+          <plugin>\r
+            <artifactId>maven-clean-plugin</artifactId>\r
+            <version>2.3</version>\r
+            <configuration>\r
+              <filesets>\r
+                <fileset>\r
+                  <directory>${basedir}/lib</directory>\r
+                  <includes>\r
+                    <include>*</include>\r
+                  </includes>\r
+                  <followSymlinks>false</followSymlinks>\r
+                </fileset>\r
+              </filesets>\r
+            </configuration>\r
+          </plugin>\r
+        </plugins>\r
+      </build>\r
+    </profile>\r
+    <profile>\r
+      <id>copyAllJars</id>\r
+      <build>\r
+        <plugins>\r
+          <plugin>\r
+            <groupId>org.apache.maven.plugins</groupId>\r
+            <artifactId>maven-dependency-plugin</artifactId>\r
+            <version>2.4</version>\r
+            <executions>\r
+              <execution>\r
+                <id>copy-all-dependencies</id>\r
+                <phase>validate</phase>\r
+                <goals>\r
+                  <goal>copy-dependencies</goal>\r
+                </goals>\r
+                <configuration>\r
+                  <excludeArtifactIds>\r
+                    cdmlib-remote-webapp\r
+                  </excludeArtifactIds>\r
+                  <outputDirectory>${basedir}/lib</outputDirectory>\r
+                  <overWriteReleases>true</overWriteReleases>\r
+                  <overWriteSnapshots>true</overWriteSnapshots>\r
+                  <excludeTransitive>true</excludeTransitive>\r
+                </configuration>\r
+              </execution>\r
+            </executions>\r
+          </plugin>\r
+        </plugins>\r
+      </build>\r
+    </profile>\r
+  </profiles>\r
+  <repositories>\r
+    <repository>\r
+      <id>SpringSource Enterprise Bundle Repository - External Bundle\r
+        Milestones\r
+      </id>\r
+      <url>http://repository.springsource.com/maven/bundles/milestone\r
+      </url>\r
+    </repository>\r
+    <repository>\r
+      <id>SpringSource Enterprise Bundle Repository - SpringSource\r
+        Bundle\r
+        Releases\r
+      </id>\r
+      <url>http://repository.springsource.com/maven/bundles/release\r
+      </url>\r
+    </repository>\r
+    <repository>\r
+      <id>SpringSource Enterprise Bundle Repository - External Bundle\r
+        Releases\r
+      </id>\r
+      <url>http://repository.springsource.com/maven/bundles/external\r
+      </url>\r
+    </repository>\r
+  </repositories>\r
   <dependencies>\r
     <dependency>\r
-      <groupId>identificationKeyAPI</groupId>\r
-      <artifactId>identificationKeyAPI</artifactId>\r
-      <version>1.0-SNAPSHOT</version>\r
+      <groupId>eu.etaxonomy</groupId>\r
+      <artifactId>cdmlib-remote-webapp</artifactId>\r
+      <version>${cdmlib.version}</version>\r
+      <type>war</type>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>eu.etaxonomy</groupId>\r
+      <artifactId>cdm-server</artifactId>\r
+      <version>3.5.2-SNAPSHOT</version>\r
     </dependency>\r
     <dependency>\r
       <groupId>eu.etaxonomy</groupId>\r
       <artifactId>cdmlib-ext</artifactId>\r
       <version>${cdmlib.version}</version>\r
     </dependency>\r
-       <dependency>\r
+\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-server</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-util</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-xml</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-servlet</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-webapp</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-security</artifactId> -->\r
+    <!-- <version>9.1.3.v20140225</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-http</artifactId> -->\r
+    <!-- <version>${jetty.version}</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>org.eclipse.jetty</groupId> -->\r
+    <!-- <artifactId>jetty-io</artifactId> -->\r
+    <!-- <version>${jetty.version}</version> -->\r
+    <!-- </dependency> -->\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>javax.servlet</groupId> -->\r
+    <!-- <artifactId>javax.servlet-api</artifactId> -->\r
+    <!-- <version>3.1.0</version> -->\r
+    <!-- </dependency> -->\r
+\r
+    <!-- <dependency> -->\r
+    <!-- <groupId>javax.servlet</groupId> -->\r
+    <!-- <artifactId>jsp-api</artifactId> -->\r
+    <!-- <version>2.0</version> -->\r
+    <!-- </dependency> -->\r
+\r
+    <dependency>\r
+      <groupId>net.sf.ehcache</groupId>\r
+      <artifactId>ehcache-core</artifactId>\r
+      <version>2.4.3</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate</groupId>\r
+      <artifactId>hibernate-core</artifactId>\r
+      <version>4.1.10.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate.common</groupId>\r
+      <artifactId>hibernate-commons-annotations</artifactId>\r
+      <version>4.0.1.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate</groupId>\r
+      <artifactId>hibernate-search-engine</artifactId>\r
+      <version>4.2.0.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate.javax.persistence</groupId>\r
+      <artifactId>hibernate-jpa-2.0-api</artifactId>\r
+      <version>1.0.1.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate</groupId>\r
+      <artifactId>hibernate-envers</artifactId>\r
+      <version>4.1.10.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hibernate</groupId>\r
+      <artifactId>hibernate-entitymanager</artifactId>\r
+      <version>4.1.10.Final</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>dom4j</groupId>\r
+      <artifactId>dom4j</artifactId>\r
+      <version>1.6</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.jadira.usertype</groupId>\r
+      <artifactId>usertype.jodatime</artifactId>\r
+      <version>2.0.1</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.jadira.usertype</groupId>\r
+      <artifactId>usertype.spi</artifactId>\r
+      <version>2.0.1</version>\r
+    </dependency>\r
+\r
+    <dependency>\r
+      <groupId>junit</groupId>\r
+      <artifactId>junit</artifactId>\r
+      <version>4.11</version>\r
+      <scope>test</scope>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>log4j</groupId>\r
+      <artifactId>log4j</artifactId>\r
+      <version>1.2.17</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.jdom</groupId>\r
+      <artifactId>jdom</artifactId>\r
+      <version>1.1.3</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.context</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.context.support</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.aspects</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.test</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.beans</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.transaction</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.web</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.core</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.aop</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.expression</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.orm</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework</groupId>\r
+      <artifactId>org.springframework.jdbc</artifactId>\r
+      <version>3.2.2.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework.security</groupId>\r
+      <artifactId>spring-security-core</artifactId>\r
+      <version>3.1.3.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework.security</groupId>\r
+      <artifactId>spring-security-config</artifactId>\r
+      <version>3.1.3.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.springframework.security</groupId>\r
+      <artifactId>spring-security-remoting</artifactId>\r
+      <version>3.1.3.RELEASE</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.jboss.logging</groupId>\r
+      <artifactId>jboss-logging</artifactId>\r
+      <version>3.1.3.GA</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.hamcrest</groupId>\r
+      <artifactId>hamcrest-core</artifactId>\r
+      <version>1.3</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>com.mchange</groupId>\r
+      <artifactId>c3p0</artifactId>\r
+      <version>0.9.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.jboss.spec.javax.transaction</groupId>\r
+      <artifactId>jboss-transaction-api_1.1_spec</artifactId>\r
+      <version>1.0.0.Final</version>\r
+    </dependency>\r
+    <dependency>\r
       <groupId>org.aspectj</groupId>\r
       <artifactId>aspectjrt</artifactId>\r
-         <version>1.7.1</version>\r
-       </dependency>\r
-         <dependency>\r
-         <groupId>org.aspectj</groupId>\r
-         <artifactId>aspectjweaver</artifactId>\r
-         <version>1.7.1</version>\r
-        </dependency>\r
-        \r
-    <!--  for ikey-plus \r
-        TODO this should not be needed but the utils class contained  in this jar \r
-        seems to be loaded as bean by spring\r
-    -->\r
+      <version>1.7.1</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>commons-logging</groupId>\r
+      <artifactId>commons-logging</artifactId>\r
+      <version>1.1.1</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>commons-lang</groupId>\r
+      <artifactId>commons-lang</artifactId>\r
+      <version>2.6</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>aopalliance</groupId>\r
+      <artifactId>aopalliance</artifactId>\r
+      <version>1.0</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>joda-time</groupId>\r
+      <artifactId>joda-time</artifactId>\r
+      <version>2.1</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>com.ibm.lsid</groupId>\r
+      <artifactId>lsid-client</artifactId>\r
+      <version>1.1.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>com.ibm.lsid</groupId>\r
+      <artifactId>lsid-server</artifactId>\r
+      <version>1.1.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.apache.lucene</groupId>\r
+      <artifactId>lucene-core</artifactId>\r
+      <version>3.6.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.slf4j</groupId>\r
+      <artifactId>slf4j-api</artifactId>\r
+      <version>1.7.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.javassist</groupId>\r
+      <artifactId>javassist</artifactId>\r
+      <version>3.17.1-GA</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>au.com.bytecode</groupId>\r
+      <artifactId>opencsv</artifactId>\r
+      <version>2.4</version>\r
+    </dependency>\r
+\r
+    <!-- For Unit Tests Start -->\r
+\r
+    <dependency>\r
+      <groupId>org.unitils</groupId>\r
+      <artifactId>unitils-core</artifactId>\r
+      <version>3.4.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.unitils</groupId>\r
+      <artifactId>unitils-spring</artifactId>\r
+      <version>3.4.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.unitils</groupId>\r
+      <artifactId>unitils-database</artifactId>\r
+      <version>3.4.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>commons-dbcp</groupId>\r
+      <artifactId>commons-dbcp</artifactId>\r
+      <version>1.4</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>commons-pool</groupId>\r
+      <artifactId>commons-pool</artifactId>\r
+      <version>1.5.4</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.unitils</groupId>\r
+      <artifactId>unitils-dbmaintainer</artifactId>\r
+      <version>3.4.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>com.h2database</groupId>\r
+      <artifactId>h2</artifactId>\r
+      <version>1.4.181</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.unitils</groupId>\r
+      <artifactId>unitils-dbunit</artifactId>\r
+      <version>3.4.2</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>org.dbunit</groupId>\r
+      <artifactId>dbunit</artifactId>\r
+      <version>2.4.9</version>\r
+    </dependency>\r
+    <!-- For Unit Tests End -->\r
+\r
+    <!-- For Hibernate Mapping Start -->\r
+    <dependency>\r
+      <groupId>wsdl4j</groupId>\r
+      <artifactId>wsdl4j</artifactId>\r
+      <version>1.6.3</version>\r
+    </dependency>\r
+    <dependency>\r
+      <groupId>javax.validation</groupId>\r
+      <artifactId>validation-api</artifactId>\r
+      <version>1.1.0.Final</version>\r
+    </dependency>\r
+    <!-- For Hibernate Mapping End -->\r
   </dependencies>\r
-</project>\r
+</project>
index 90cfc09909bd84ff974481bfed98d01ecaa83cfe..20fcb506b7d9f93c4b9ff49e147cd896659f5ea1 100644 (file)
@@ -1,19 +1,18 @@
 /**\r
-* Copyright (C) 2014 EDIT\r
-* European Distributed Institute of Taxonomy \r
-* http://www.e-taxonomy.eu\r
-* \r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
+ * Copyright (C) 2014 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
 \r
 package eu.etaxonomy.cdm.api.application;\r
 \r
 import javax.sql.DataSource;\r
 \r
-import org.hibernate.SessionFactory;\r
-\r
 import org.apache.log4j.Logger;\r
+import org.hibernate.SessionFactory;\r
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Component;\r
 import org.springframework.transaction.PlatformTransactionManager;\r
@@ -21,8 +20,9 @@ import org.springframework.transaction.TransactionStatus;
 \r
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
 import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock;\r
-import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;\r
+import eu.etaxonomy.taxeditor.service.ICachedCommonService;\r
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;\r
 \r
 \r
 /**\r
@@ -32,23 +32,30 @@ import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
  */\r
 @Component\r
 public class CdmApplicationRemoteConfiguration extends CdmApplicationDefaultConfiguration {\r
-       \r
-       @SuppressWarnings("unused")\r
-       private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class);\r
-\r
-       @Autowired\r
-       IEditGeoService editGeoService;\r
-       \r
-       public CdmApplicationRemoteConfiguration() {\r
-       }\r
-       \r
+\r
+    @SuppressWarnings("unused")\r
+    private static final Logger logger = Logger.getLogger(CdmApplicationRemoteConfiguration.class);\r
+\r
+    @Autowired\r
+    IEditGeoService editGeoService;\r
+\r
+    @Autowired\r
+    private ICachedCommonService cachedCommonService;\r
+\r
+\r
+    @Autowired\r
+    protected ICdmEntitySessionManager cdmEntitySessionManager;\r
+\r
+    public CdmApplicationRemoteConfiguration() {\r
+    }\r
+\r
     /* (non-Javadoc)\r
      * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#getTransactionManager()\r
      */\r
     @Override\r
     public PlatformTransactionManager getTransactionManager() throws UnsupportedOperationException {\r
-               throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration");\r
-       }\r
+        throw new UnsupportedOperationException("getTransactionManager is not implemented for CdmApplicationRemoteConfiguration");\r
+    }\r
 \r
 \r
     /* (non-Javadoc)\r
@@ -56,8 +63,8 @@ public class CdmApplicationRemoteConfiguration extends CdmApplicationDefaultConf
      */\r
     @Override\r
     public TransactionStatus startTransaction() throws UnsupportedOperationException {\r
-               throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
-       }\r
+        throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
+    }\r
 \r
 \r
     /* (non-Javadoc)\r
@@ -65,8 +72,8 @@ public class CdmApplicationRemoteConfiguration extends CdmApplicationDefaultConf
      */\r
     @Override\r
     public TransactionStatus startTransaction(Boolean readOnly) throws UnsupportedOperationException {\r
-               throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
-       }\r
+        throw new UnsupportedOperationException("startTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
+    }\r
 \r
 \r
     /* (non-Javadoc)\r
@@ -74,42 +81,54 @@ public class CdmApplicationRemoteConfiguration extends CdmApplicationDefaultConf
      */\r
     @Override\r
     public void commitTransaction(TransactionStatus txStatus) throws UnsupportedOperationException {\r
-               throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
-       }\r
-                       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#NewConversation()\r
-        */\r
-       @Override\r
-       public ConversationHolder NewConversation() {           \r
-               return new ConversationHolderMock();\r
-       }\r
-       \r
-       /**\r
-        * @return\r
-        */\r
-       public IEditGeoService getEditGeoService() {\r
-               return this.editGeoService;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setDataSource(javax.sql.DataSource)\r
-        */\r
-       @Override\r
-       public void setDataSource(DataSource dataSource) {                      \r
+        throw new UnsupportedOperationException("commitTransaction is not implemented for CdmApplicationRemoteConfiguration");\r
     }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setTransactionManager(org.springframework.transaction.PlatformTransactionManager)\r
-        */\r
-       @Override\r
-       public void setTransactionManager(PlatformTransactionManager transactionManager) {        \r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#NewConversation()\r
+     */\r
+    @Override\r
+    public ConversationHolder NewConversation() {\r
+        return new ConversationHolderMock();\r
     }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setSessionFactory(org.hibernate.SessionFactory)\r
-        */\r
-       @Override\r
-    public void setSessionFactory(SessionFactory sessionFactory) {     \r
+\r
+    /**\r
+     * @return\r
+     */\r
+    public IEditGeoService getEditGeoService() {\r
+        return this.editGeoService;\r
+    }\r
+\r
+    /**\r
+     * @return\r
+     */\r
+    public ICachedCommonService getCachedCommonService(){\r
+        return this.cachedCommonService;\r
+    }\r
+\r
+\r
+    public ICdmEntitySessionManager getCdmEntitySessionManager() {\r
+        return this.cdmEntitySessionManager;\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setDataSource(javax.sql.DataSource)\r
+     */\r
+    @Override\r
+    public void setDataSource(DataSource dataSource) {\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setTransactionManager(org.springframework.transaction.PlatformTransactionManager)\r
+     */\r
+    @Override\r
+    public void setTransactionManager(PlatformTransactionManager transactionManager) {\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.application.CdmApplicationDefaultConfiguration#setSessionFactory(org.hibernate.SessionFactory)\r
+     */\r
+    @Override\r
+    public void setSessionFactory(SessionFactory sessionFactory) {\r
     }\r
 }\r
index 5473ac141981dafc244e0b157a25e9ab7282a0b5..f3abb5b7d84711f442550c5ba6594c3ad751b676 100644 (file)
@@ -1,8 +1,8 @@
 /**
 * 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.
 */
@@ -24,31 +24,39 @@ import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.api.application.RemotingMonitoredGenericApplicationContext;
 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.taxeditor.remoting.cache.CdmModelCacher;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
+import eu.etaxonomy.taxeditor.session.CdmEntitySessionManager;
+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 = 
+       
+    public static final Resource DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE =
                new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml");
     private final Resource applicationContextResource;
     private final IProgressMonitor progressMonitor;
+
     
     /**
      * Creates new instance of CdmApplicationRemoteController
-     * 
+     *
      * @param applicationContextResource
      * @param remoteSource
      * @param omitTermLoading
@@ -56,21 +64,21 @@ public class CdmApplicationRemoteController  extends CdmApplicationController {
      * @param listeners
      * @return
      */
-    public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource, 
-                       ICdmRemoteSource remoteSource,                          
-                       boolean omitTermLoading, 
-                       IProgressMonitor progressMonitor, 
+    public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource,
+                       ICdmRemoteSource remoteSource,
+                       boolean omitTermLoading,
+                       IProgressMonitor progressMonitor,
                        List<ApplicationListener> listeners) {
-       return new CdmApplicationRemoteController(applicationContextResource, 
-                       remoteSource, 
-                       omitTermLoading, 
-                       progressMonitor, 
+       return new CdmApplicationRemoteController(applicationContextResource,
+                       remoteSource,
+                       omitTermLoading,
+                       progressMonitor,
                                listeners);
-       
+
     }
     /**
      * Creates new instance of CdmApplicationRemoteController
-     * 
+     *
      * @param applicationContextResource
      * @param remoteSource
      * @param omitTermLoading
@@ -78,60 +86,60 @@ public class CdmApplicationRemoteController  extends CdmApplicationController {
      * @param listeners
      * @return
      */
-    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,                            
-                       boolean omitTermLoading, 
-                       IProgressMonitor progressMonitor, 
+    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
+                       boolean omitTermLoading,
+                       IProgressMonitor progressMonitor,
                        List<ApplicationListener> listeners) {
-       
-       return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE, 
-                       remoteSource, 
-                       omitTermLoading, 
-                       progressMonitor, 
+
+       return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
+                       remoteSource,
+                       omitTermLoading,
+                       progressMonitor,
                                listeners);
-       
+
     }
-    
+
        /**
         * Constructs CdmApplicationRemoteController
-        * 
+        *
         * @param applicationContextResource
         * @param remoteSource
         * @param omitTermLoading
         * @param progressMonitor
         * @param listeners
         */
-       private CdmApplicationRemoteController(Resource applicationContextResource, 
-                               ICdmRemoteSource remoteSource,                          
-                               boolean omitTermLoading, 
-                               IProgressMonitor progressMonitor, 
+       private CdmApplicationRemoteController(Resource applicationContextResource,
+                               ICdmRemoteSource remoteSource,
+                               boolean omitTermLoading,
+                               IProgressMonitor progressMonitor,
                                List<ApplicationListener> listeners){
                logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName());
-        this.applicationContextResource = 
+        this.applicationContextResource =
                        applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
         this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
 
         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, 
+    protected boolean setNewRemoteSource(ICdmRemoteSource remoteSource,
+               boolean omitTermLoading,
                List<ApplicationListener> listeners){
 
         logger.info("Connecting to '" + remoteSource.getName() + "'");
 
-        MonitoredGenericApplicationContext applicationContext =  new MonitoredGenericApplicationContext();
+        RemotingMonitoredGenericApplicationContext applicationContext =  new RemotingMonitoredGenericApplicationContext();
         int refreshTasks = 45;
         int nTasks = 5 + refreshTasks;
 
@@ -145,6 +153,7 @@ public class CdmApplicationRemoteController  extends CdmApplicationController {
         properties.setProperty("remoteContext", remoteSource.getContextPath());
         pspc.setProperties(properties);
         applicationContext.addBeanFactoryPostProcessor(pspc);
+        applicationContext.getEnvironment().setActiveProfiles("remoting");
         progressMonitor.worked(1);
 
         XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(applicationContext);
@@ -178,16 +187,22 @@ public class CdmApplicationRemoteController  extends CdmApplicationController {
         progressMonitor.done();
         return true;
     }
-    
+
     /* (non-Javadoc)
      * @see eu.etaxonomy.cdm.api.application.CdmApplicationController#init()
      */
     @Override
-    protected void init(){    
+    protected void init(){
         configuration = (ICdmApplicationConfiguration)applicationContext.getBean("cdmApplicationRemoteConfiguration");
-               AbstractLazyInitializer.setConfiguration(this);
-               AbstractPersistentCollection.setConfiguration(this);
+               AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
+               AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
+               
+               CdmModelCacher cmdmc = new CdmModelCacher();
+               cmdmc.cacheGetterFields();
 
     }
 
+    public ICdmEntitySessionManager getCdmEntitySessionManager() {
+       return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
+    }
 }
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredGenericApplicationContext.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredGenericApplicationContext.java
new file mode 100644 (file)
index 0000000..6ad7ad4
--- /dev/null
@@ -0,0 +1,139 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.api.application;\r
+\r
+import java.util.concurrent.CancellationException;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.beans.BeansException;\r
+import org.springframework.beans.factory.annotation.QualifierAnnotationAutowireCandidateResolver;\r
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;\r
+import org.springframework.context.support.GenericApplicationContext;\r
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;\r
+\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.SubProgressMonitor;\r
+\r
+/**\r
+ * {@link GenericApplicationContext Generic application context} which allows progress monitoring.\r
+ * @author a.mueller\r
+ * @date 29.09.2011\r
+ *\r
+ */\r
+public class RemotingMonitoredGenericApplicationContext extends GenericApplicationContext{\r
+    @SuppressWarnings("unused")\r
+    private static final Logger logger = Logger.getLogger(CdmApplicationController.class);\r
+\r
+    final int countInvokeBeanFactoryPostProcessors = 10;\r
+    final int countFinishBeanFactoryInitialization = 90;\r
+    private final int countTasks = countInvokeBeanFactoryPostProcessors + countFinishBeanFactoryInitialization;\r
+    private IProgressMonitor currentMonitor;\r
+\r
+\r
+\r
+    /**\r
+     * Constructor.\r
+     * @param progressMonitor\r
+     */\r
+    public RemotingMonitoredGenericApplicationContext() {\r
+//             MonitoredListableBeanFactory beanFactory =\r
+        super(new RemotingMonitoredListableBeanFactory());\r
+        //taken from empty constructor of GenericApplicationContext\r
+        ((RemotingMonitoredListableBeanFactory)getBeanFactory()).setSerializationId(getId());\r
+        ((RemotingMonitoredListableBeanFactory)getBeanFactory()).setParameterNameDiscoverer(new LocalVariableTableParameterNameDiscoverer());\r
+        ((RemotingMonitoredListableBeanFactory)getBeanFactory()).setAutowireCandidateResolver(new QualifierAnnotationAutowireCandidateResolver());\r
+    }\r
+\r
+\r
+    public int countTasks(){\r
+        return countTasks;\r
+    }\r
+\r
+    protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory){\r
+        String task = "Invoke bean factory post processors";\r
+        checkMonitorCancelled(currentMonitor);\r
+        currentMonitor.subTask(task);\r
+        super.invokeBeanFactoryPostProcessors(beanFactory);\r
+        currentMonitor.worked(countInvokeBeanFactoryPostProcessors);\r
+        checkMonitorCancelled(currentMonitor);\r
+    }\r
+\r
+    protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory){\r
+        checkMonitorCancelled(currentMonitor);\r
+        String task = "Finish bean factory initialization";\r
+        currentMonitor.subTask(task);\r
+        IProgressMonitor subMonitor    = new SubProgressMonitor(currentMonitor, countFinishBeanFactoryInitialization);\r
+        getMyBeanFactory().setCurrentMonitor(subMonitor);\r
+        super.finishBeanFactoryInitialization(beanFactory);\r
+        checkMonitorCancelled(currentMonitor);\r
+\r
+    }\r
+\r
+    /**\r
+     * @param progressMonitor the progressMonitor to set\r
+     */\r
+    public void setCurrentMonitor(IProgressMonitor monitor) {\r
+        this.currentMonitor = monitor;\r
+    }\r
+\r
+    /**\r
+     *\r
+     */\r
+    public IProgressMonitor getCurrentMonitor() {\r
+        return currentMonitor;\r
+    }\r
+\r
+\r
+    /* (non-Javadoc)\r
+     * @see org.springframework.context.support.AbstractApplicationContext#refresh()\r
+     */\r
+    public void refresh(IProgressMonitor monitor) throws BeansException, IllegalStateException {\r
+        checkMonitorCancelled(monitor);\r
+        String message = "Refresh application context. This might take a while ...";\r
+        currentMonitor = monitor;\r
+        beginTask(message, countTasks);\r
+        super.refresh();\r
+        taskDone();\r
+        checkMonitorCancelled(monitor);\r
+    }\r
+\r
+\r
+    /**\r
+     *\r
+     */\r
+    private void taskDone() {\r
+        if (currentMonitor != null){\r
+            currentMonitor.done();\r
+        }\r
+    }\r
+\r
+\r
+    /**\r
+     * @param monitor\r
+     * @param message\r
+     */\r
+    private void beginTask(String message, int countTasks) {\r
+        if (currentMonitor != null){\r
+            currentMonitor.beginTask(message, countTasks);\r
+        }\r
+    }\r
+\r
+\r
+    private RemotingMonitoredListableBeanFactory getMyBeanFactory(){\r
+        return (RemotingMonitoredListableBeanFactory)getBeanFactory();\r
+    }\r
+\r
+\r
+    private void checkMonitorCancelled(IProgressMonitor monitor) {\r
+        if (monitor != null && monitor.isCanceled()){\r
+            throw new CancellationException();\r
+        }\r
+    }\r
+}\r
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredListableBeanFactory.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/RemotingMonitoredListableBeanFactory.java
new file mode 100644 (file)
index 0000000..4e03ea4
--- /dev/null
@@ -0,0 +1,128 @@
+// $Id$\r
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy \r
+* http://www.e-taxonomy.eu\r
+* \r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.api.application;\r
+\r
+import java.util.Arrays;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+import java.util.concurrent.CancellationException;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.beans.BeansException;\r
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;\r
+import org.springframework.beans.factory.support.RootBeanDefinition;\r
+\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 29.09.2011\r
+ *\r
+ */\r
+public class RemotingMonitoredListableBeanFactory extends DefaultListableBeanFactory {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(RemotingMonitoredListableBeanFactory.class);\r
+       \r
+       private boolean isInitializingBeans = false;\r
+       private IProgressMonitor currentMonitor;\r
+       \r
+       private static List<String> beansToMonitor = Arrays.asList("sessionFactory","defaultBeanInitializer","persistentTermInitializer");\r
+       private Set<String> alreadyMonitoredBeans = new HashSet<String>();\r
+\r
+       public RemotingMonitoredListableBeanFactory(){\r
+       }\r
+       \r
+//     @Override\r
+//     protected RootBeanDefinition getMergedLocalBeanDefinition(String beanName) throws BeansException {\r
+//             if (registeredBeanNames.contains(beanName)){\r
+//                     return super.getMergedLocalBeanDefinition(beanName);\r
+//                             \r
+//             }\r
+////           String message = "Handle bean '%s'";\r
+////           message = String.format(message, beanName);\r
+////           currentMonitor.subTask(message);\r
+//             RootBeanDefinition result = super.getMergedLocalBeanDefinition(beanName);\r
+////           currentMonitor.worked(1);\r
+////           registeredBeanNames.add(beanName);\r
+//             return result;\r
+//     }\r
+       \r
+       public void preInstantiateSingletons() throws BeansException {\r
+               isInitializingBeans = true;\r
+               checkMonitorCancelled(currentMonitor);\r
+               int countBeans = 0;\r
+               for (String beanName : getBeanDefinitionNames()) {\r
+                       RootBeanDefinition bd = getMergedLocalBeanDefinition(beanName);\r
+                       if (!bd.isAbstract() && bd.isSingleton() && !bd.isLazyInit() && beansToMonitor.contains(beanName) ){\r
+                               countBeans++;\r
+                       }\r
+               }\r
+               String message = "preinstantiate singletons";\r
+               currentMonitor.beginTask(message, countBeans);\r
+               super.preInstantiateSingletons();\r
+               isInitializingBeans = false;\r
+               currentMonitor.done();\r
+       }\r
+\r
+//     protected <T> T doGetBean(final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly){\r
+//             boolean doMonitor = isInitializingBeans && !monitoredBeanNames.contains(name);\r
+//             if (doMonitor){\r
+//                     String message = "Handle bean '%s'";\r
+//                     message = String.format(message, name);\r
+//                     currentMonitor.subTask(message);\r
+//                     monitoredBeanNames.add(name);\r
+//             }\r
+//             T result = super.doGetBean(name, requiredType, args, typeCheckOnly);\r
+//             if (doMonitor){\r
+//                     currentMonitor.worked(1);\r
+//             }\r
+//             return result;\r
+//     }\r
+       \r
+       protected Object createBean(final String name, final RootBeanDefinition mbd, final Object[] args){\r
+               boolean doMonitor = isInitializingBeans && beansToMonitor.contains(name) && !alreadyMonitoredBeans.contains(name);\r
+               checkMonitorCancelled(currentMonitor);\r
+               if (doMonitor){\r
+                       String message;\r
+                       if (name.equals("sessionFactory")){\r
+                               message = "Initializing persistence context ...";\r
+                       }else if(name.equals("persistentTermInitializer")){\r
+                               message = "Loading terms ...";\r
+                       }else{\r
+                               message = "Handling '%s'";\r
+                               message = String.format(message, name);\r
+                       }\r
+                       currentMonitor.subTask(message);\r
+                       alreadyMonitoredBeans.add(name);\r
+               }\r
+               Object result = super.createBean(name, mbd, args);\r
+               if (doMonitor){\r
+                       checkMonitorCancelled(currentMonitor);\r
+                       currentMonitor.worked(1);\r
+               }\r
+               return result;\r
+       }\r
+\r
+       \r
+       /**\r
+        * @param mainMonitor the mainMonitor to set\r
+        */\r
+       public void setCurrentMonitor(IProgressMonitor monitor) {\r
+               this.currentMonitor = monitor;\r
+       }\r
+       \r
+       private void checkMonitorCancelled(IProgressMonitor monitor) {\r
+               if (monitor != null && monitor.isCanceled()){\r
+                       throw new CancellationException();\r
+               }       \r
+       }\r
+               \r
+}\r
index f122d18eb3dc948b16be3a74afea317ebdf08f2a..96c94964cc2fb0698048ac580b0051a8d103a068 100644 (file)
@@ -2,11 +2,22 @@ package eu.etaxonomy.cdm.api.cache;
 
 import java.util.UUID;
 
+import net.sf.ehcache.config.CacheConfiguration;
+import net.sf.ehcache.config.SizeOfPolicyConfiguration;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import eu.etaxonomy.cdm.api.service.ITermService;
 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.CdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
 
 /**
  * Class which uses CDM services to cache cdm entities
@@ -20,23 +31,96 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
  * @param <T>
  */
 @Component
-public class CdmServiceCacher<T extends CdmBase> extends CdmCacher<T> {
+public class CdmServiceCacher extends CdmCacher {
+
+    @Autowired
+    ITermService termService;
+
+    @Autowired
+    private CdmEntitySessionManager cdmEntitySessionManager;
+
+    private CdmTransientEntityCacher cdmTransientEntityCacher;
+
+    private CacheLoader cacheLoader;
+
+    @Override
+    protected void setup() {
+        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);
+
+    }
 
-       @Autowired
-       ITermService termService;
+    @Override
+    protected CdmBase findByUuid(UUID uuid) {
+        CdmBase term = termService.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 cdmEntity) {
+        if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
+            return true;
+        }
+        return false;
+    }
+
+    public void setActiveSession(ICdmEntitySession cdmEntitySession) {
+        if(cdmEntitySession != null && cdmEntitySession instanceof CdmEntitySession) {
+            this.cdmTransientEntityCacher = ((CdmEntitySession) cdmEntitySession).getCacher();
+        } else {
+            this.cdmTransientEntityCacher = null;
+        }
+    }
+
+    @Override
+    public CdmBase getFromCache(CdmBase cdmBase) {
+        CdmBase cachedCdmEntity = null;
+        // first we check in the active session cache if the
+        if(!isCachable(cdmBase) && cdmTransientEntityCacher != null) {
+            CdmEntityCacheKey key = CdmTransientEntityCacher.generateKey(cdmBase);
+            cachedCdmEntity = cdmTransientEntityCacher.getFromCache(key);
+
+        }
+        if(cachedCdmEntity == null) {
+            cachedCdmEntity = super.getFromCache(cdmBase);
+        }
+        return cachedCdmEntity;
+    }
 
-       @Override
-       protected T findByUuid(UUID uuid) {
-               return (T)termService.findWithoutFlush(uuid);
-       }
 
     /* (non-Javadoc)
-     * @see eu.etaxonomy.cdm.api.cache.CdmCacher#setup()
+     * @see eu.etaxonomy.cdm.api.cache.CdmCacher#load(eu.etaxonomy.cdm.model.common.CdmBase)
      */
     @Override
-    protected void setup() {
-        // TODO Auto-generated method stub
+    public CdmBase load(CdmBase cdmEntity) {
+        CdmBase cachedCdmEntity = getFromCache(cdmEntity.getUuid());
 
+        if(isCachable(cdmEntity)) {
+            cachedCdmEntity =  cacheLoader.load(cdmEntity, true, false);
+        }
+        return cachedCdmEntity;
     }
 
+
 }
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/lazyloading/CdmLazyLoader.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/lazyloading/CdmLazyLoader.java
deleted file mode 100644 (file)
index e98d40d..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-package eu.etaxonomy.cdm.api.lazyloading;
-
-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 org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
-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.LazyInitializer;
-import org.springframework.beans.factory.annotation.Autowire;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Configurable;
-import org.springframework.stereotype.Component;
-
-import eu.etaxonomy.cdm.api.service.ICommonService;
-import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.cdm.model.common.PersistentMultiLanguageText;
-
-
-@Aspect
-@Component
-@Configurable(autowire = Autowire.BY_TYPE)
-public class CdmLazyLoader {
-
-
-       private Set classes = new HashSet();
-       
-       public static boolean enableWeaving = true;
-       private static Set<String> classesToIgnore = new HashSet<String>();
-       
-       
-       @Autowired
-       private ICommonService commonService;
-
-       public CdmLazyLoader() {
-               //classesToIgnore.add("eu.etaxonomy.cdm.model.common.TermVocabulary");
-               //classesToIgnore.add("eu.etaxonomy.cdm.model.common.OrderedTermVocabulary");
-               
-       }
-       
-       /**
-        *  Point cut for the 'initialize' method of the AbstractLazyInitializer.
-        *  
-        */
-       @Pointcut("execution(* org.hibernate.proxy.AbstractLazyInitializer.initialize())")
-       public void possibleEntityLazyInitializationException() {
-       }
-
-
-       /**
-        *  'Around' advice for the initialization of CDM Entity Objects
-        *  
-        */
-       @Around(value = "possibleEntityLazyInitializationException()")
-       public Object preloadEntityOnDemand(ProceedingJoinPoint pjp) throws Throwable {          
-               if(enableWeaving) {
-                       LazyInitializer ll = (LazyInitializer)pjp.getTarget();          
-                       if(ll.isUninitialized()) {                              
-                               int classid = ((Integer)ll.getIdentifier()).intValue();
-                               System.out.print("--> AspectJ Compile-Time Weaving " + ll.getEntityName() + " with id " + classid);
-                               Class clazz = (Class<? extends CdmBase>) Class.forName(ll.getEntityName());
-                               CdmBase cdmBase = CdmBase.deproxy(commonService.find(clazz,classid),clazz);
-                               ll.setImplementation(cdmBase);
-                               System.out.println("....Done");
-                       }
-               }
-               return pjp.proceed();                             
-       }
-       
-
-       /**
-        *  Point cut for the 'initialize' method of the AbstractPersistentCollection.
-        *  
-        */
-       @Pointcut("execution(protected final void org.hibernate.collection.internal.AbstractPersistentCollection.initialize(..))")
-       public void possibleCollectionLazyInitializationException() {
-       }
-       
-       /**
-        *  'Around' advice for the initialization of Collection objects
-        *  
-        */
-       @Around(value = "possibleCollectionLazyInitializationException()")      
-       public Object preloadCollectionOnDemand(ProceedingJoinPoint pjp) throws Throwable {              
-               if(enableWeaving) {
-                       PersistentCollection ps = (PersistentCollection) pjp.getTarget();
-                       if (ps.getOwner() != null && !classesToIgnore.contains(ps.getOwner().getClass().getName()) && !ps.wasInitialized() &&  !classes.contains(ps.getKey())) {
-                               System.out.print("--> AspectJCompile-Time Weaving " + ps.getRole());                
-                               classes.add(ps.getKey());
-                               try {
-                                       String role = ps.getRole();
-                                       String fieldName = role.substring(role.lastIndexOf(".") + 1);
-                                       System.out.print(", field : " + fieldName);
-                                       Object owner = ps.getOwner();
-
-                                       PersistentCollection col = commonService.initializeCollection(ps); 
-                                       ps.afterInitialize();
-
-                                       Class<?> clazz = ps.getClass();
-                                       if (clazz != null) {    
-                                               CollectionField cf = getCollectionField(col);
-                                               Field field = clazz.getDeclaredField(cf.getFieldName());
-                                               field.setAccessible(true);
-                                               field.set(ps, cf.getCollection());                             
-                                       }               
-                               } catch (Exception ex) {
-                                       ex.printStackTrace();
-                                       System.out.println("Error in ReattachSessionAspect : " + ex.getMessage());
-                               } finally {
-                                       classes.remove(ps.getKey());
-                                       System.out.println("....Done");
-                               }       
-                       }
-               } 
-               return pjp.proceed();
-
-       }
-       
-       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;
-       }
-       
-       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";
-                       }
-               }
-               return null;
-       }
-       
-       private class CollectionField {
-               private Object col;
-               private 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;
-               }
-       }
-
-}
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 (file)
index 0000000..08cc011
--- /dev/null
@@ -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 (file)
index 0000000..13fcb4f
--- /dev/null
@@ -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 (file)
index 0000000..57e7da8
--- /dev/null
@@ -0,0 +1,415 @@
+// $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.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+
+import org.apache.log4j.Logger;
+import org.hibernate.proxy.HibernateProxy;
+import org.hibernate.proxy.LazyInitializer;
+import org.springframework.util.ReflectionUtils;
+
+import eu.etaxonomy.cdm.model.ICdmCacher;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+/**
+ * @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 extends Object> 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<T,T>)obj, recursive, update);
+        } else if (obj instanceof Collection) {
+            return (T) load((Collection<T>)obj, recursive, update);
+        }
+
+        return obj;
+    }
+
+    @SuppressWarnings("unchecked")
+    private <T extends Object> T loadRecursive(T obj, Set<Object> 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<T,T>)obj, alreadyVisitedEntities, update);
+        } else if (obj instanceof Collection) {
+            return (T) load((Collection<T>)obj, alreadyVisitedEntities, update);
+        }
+
+
+        logger.info("No caching yet for type " + obj.getClass().getName());
+
+        return obj;
+    }
+
+    public <T extends Object> Map<T,T> load(Map<T,T> map, boolean recursive, boolean update){
+
+
+        if(isRecursiveEnabled && recursive) {
+            logger.info("---- starting recursive load for cdm entity map");
+            Set<Object> alreadyVisitedEntities = new HashSet<Object>();
+            Map<T,T> 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 <T extends Object> Map<T,T> load(Map<T,T> map, Set<Object> alreadyVisitedEntities, boolean update){
+        //map = (Map<T,T>)deproxy(map);
+
+        if(map == null || map.isEmpty()) {
+            return map;
+        }
+
+        int originalMapSize = map.size();
+        Object[] result = new Object[ map.size() * 2 ];
+        Iterator<Map.Entry<T,T>> iter = map.entrySet().iterator();
+        int i=0;
+        // to avoid ConcurrentModificationException
+        alreadyVisitedEntities.add(map);
+        while ( iter.hasNext() ) {
+            Map.Entry<T,T> e = iter.next();
+            result[i++] = e.getKey();
+            result[i++] = e.getValue();
+        }
+
+        for(i=0; i<result.length;i++) {
+            if(alreadyVisitedEntities == null) {
+                result[i] = load(result[i], false, update);
+            } else {
+                result[i] = loadRecursive(result[i], alreadyVisitedEntities, update);
+            }
+        }
+        map.clear();
+        for(i = 0; i < originalMapSize; i+=2 ) {
+            map.put(
+                    (T)result[i],
+                    (T)result[i+1]
+                    );
+        }
+        return map;
+    }
+
+    public <T extends Object> Collection<T> load(Collection<T> collection, boolean recursive, boolean update){
+
+        Collection<T> loadedCollection;
+        if(isRecursiveEnabled && recursive) {
+            logger.info("---- starting recursive load for cdm entity collection");
+            Set<Object> alreadyVisitedEntities = new HashSet<Object>();
+            Collection<T> 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 <T extends Object> Collection<T> load(Collection<T> collection, Set<Object> alreadyVisitedEntities, boolean update) {
+
+
+
+        if(collection == null || collection.isEmpty()) {
+            return collection;
+        }
+        int length = collection.size();
+        Object[] result = new Object[length];
+        Iterator<T> 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;
+    }
+
+
+    /**
+     * 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());
+            Set<Object> alreadyVisitedEntities = new HashSet<Object>();
+            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());
+
+        cdmEntity = (CdmBase)ProxyUtils.deproxy(cdmEntity);
+
+        cdmCacher.put(cdmEntity);
+
+        return cdmCacher.getFromCache(cdmEntity);
+
+    }
+
+
+    private CdmBase loadRecursive(CdmBase cdmEntity,  Set<Object> 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<String> 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(!alreadyVisitedEntities.contains(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,
+            Set<Object> 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);
+
+            CdmBase cdmEntityInSubGraph = null;
+
+            if(update) {
+                // 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
+                // NOTE : two exceptions to this are 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);
+
+                    Object oldCachedCdmEntityInSubGraph = field.get(cachedCdmEntity);
+                    if(ProxyUtils.isProxy(oldCachedCdmEntityInSubGraph)) {
+                        LazyInitializer hli =
+                                ((HibernateProxy)oldCachedCdmEntityInSubGraph).getHibernateLazyInitializer();
+
+                        if(cdmEntityInSubGraph.getId() == ((Integer)hli.getIdentifier()).intValue()) {
+                            // exception 1 : is the case where
+                            // the earlier value of the field in the cached entity
+                            // was a proxy with the same id then we don't need to
+                            // update it here as it will be updated on demand,
+                            // so we reset it to the earlier proxy
+                            field.set(cachedCdmEntity, oldCachedCdmEntityInSubGraph);
+                            return null;
+                        }
+                    }
+
+                    if(cachedCdmEntityInSubGraph != null) {
+                        if(cachedCdmEntityInSubGraph != cdmEntityInSubGraph) {
+                            // exception 2 : 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 && !alreadyVisitedEntities.contains(o)) {
+                    loadRecursive((Map)o, alreadyVisitedEntities, update);
+                } else if(o instanceof Collection && !alreadyVisitedEntities.contains(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(Set<CdmBase> cbSet, CdmBase cbToCompare) {
+        if(cbToCompare != null) {
+            for(CdmBase cb : cbSet) {
+
+                if(cb == cbToCompare) {
+                    return true;
+                } else {
+                    if(cb.equals(cbToCompare)) {
+                        logger.info("equal but non identical object found of type " + cbToCompare.getUserFriendlyTypeName() + " with id " + cbToCompare.getId());
+                    }
+                }
+            }
+        }
+        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 (file)
index 0000000..e00649f
--- /dev/null
@@ -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 (file)
index 0000000..74e543c
--- /dev/null
@@ -0,0 +1,56 @@
+package eu.etaxonomy.taxeditor.remoting.cache;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+public class CdmEntityCacheKey {
+
+       private Class<? extends CdmBase> persistenceClass;
+       private int persistenceId;
+       
+       public CdmEntityCacheKey(CdmBase cdmBase) {
+               this.persistenceClass = cdmBase.getClass();
+               this.persistenceId = cdmBase.getId();
+       }
+       
+       public CdmEntityCacheKey(Class<? extends CdmBase> clazz, int id) {
+               this.persistenceClass = clazz;
+               this.persistenceId = id;
+       }
+       
+
+       
+       public Class<? extends CdmBase> 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 (file)
index 0000000..2f3d49b
--- /dev/null
@@ -0,0 +1,190 @@
+package eu.etaxonomy.taxeditor.remoting.cache;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+
+import org.apache.log4j.Logger;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.property.Getter;
+
+
+public class CdmModelCacher {
+
+
+       private static final Logger logger = Logger.getLogger(CdmModelCacher.class);
+
+       private final List<CdmModelFieldPropertyFromClass> cmgmfcList = new ArrayList<CdmModelFieldPropertyFromClass>();
+
+       public void cacheGetters() {
+
+               Configuration configuration = new Configuration().configure("/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml");
+               configuration.buildMappings();
+               Iterator<PersistentClass> classMappingIterator = configuration.getClassMappings();
+
+               Cache cache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
+               cache.removeAll();
+
+               while(classMappingIterator.hasNext()) {
+                       PersistentClass persistentClass = classMappingIterator.next();
+                       Class mappedClass = persistentClass.getMappedClass();
+                       String mappedClassName = mappedClass.getName();
+
+                       CdmModelFieldPropertyFromClass cmgmfc = new CdmModelFieldPropertyFromClass(mappedClassName);
+                       Iterator propertyIt = persistentClass.getPropertyIterator();
+
+                       logger.info("Adding class : " + mappedClassName + " to cache");
+
+                       while(propertyIt.hasNext())
+                       {
+                               Property property = (Property)propertyIt.next();
+                               Getter getter = property.getGetter(mappedClass);
+                               if(getter != null && getter.getMember() != null) {
+                                       Field field = (Field)getter.getMember();
+                                       String getMethod = getMethodNameFromFieldName(field.getName(), field.getType().getName());
+                                       logger.info(" - getMethod : " + getMethod + " for type " + field.getType().getName());
+                                       cmgmfc.addGetMethods(getMethod);
+                               }
+                       }
+                       cache.put(new Element(mappedClassName, cmgmfc));
+
+               }
+               cache.flush();
+       }
+
+       public void cacheGetterFields() {
+
+               Configuration configuration = new Configuration().configure("/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml");
+               configuration.buildMappings();
+               Iterator<PersistentClass> classMappingIterator =   configuration.getClassMappings();
+
+               Cache cache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
+               cache.removeAll();
+
+               while(classMappingIterator.hasNext()) {
+                       PersistentClass persistentClass = classMappingIterator.next();
+                       Class mappedClass = persistentClass.getMappedClass();
+                       String mappedClassName = mappedClass.getName();
+
+                       CdmModelFieldPropertyFromClass cmgmfc = new CdmModelFieldPropertyFromClass(mappedClassName);
+                       addGetters(persistentClass, cmgmfc);
+                       logger.info("Adding class : " + mappedClassName + " to cache");
+
+                       cache.put(new Element(mappedClassName, cmgmfc));
+
+               }
+               cache.flush();
+       }
+
+       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();
+                       //String getMethod = getMethodNameFromFieldName(field.getName(), field.getType().getName());
+                       logger.info(" - contains field '" + field.getName() + "' of type '" + field.getType().getName() + "'");
+                       cmgmfc.addGetMethods(field.getName());
+                   }
+               }
+               addGetters(persistentClass.getSuperclass(), cmgmfc);
+           }
+       }
+
+       public void checkGetterMethods() {
+
+               Configuration configuration = new Configuration().configure("/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml");
+               configuration.buildMappings();
+               Iterator<PersistentClass> classMappingIterator =   configuration.getClassMappings();
+
+               Cache cache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
+               cache.removeAll();
+
+               while(classMappingIterator.hasNext()) {
+                       PersistentClass persistentClass = classMappingIterator.next();
+                       Class mappedClass = persistentClass.getMappedClass();
+                       String mappedClassName = mappedClass.getName();
+
+                       Iterator propertyIt = persistentClass.getPropertyIterator();
+
+                       Method[] methods = mappedClass.getMethods();
+
+                       while(propertyIt.hasNext())
+                       {
+                               Property property = (Property)propertyIt.next();
+                               Getter getter = property.getGetter(mappedClass);
+                               if(getter != null && getter.getMember() != null) {
+                                       Field field = (Field)getter.getMember();
+                                       String getMethod = getMethodNameFromFieldName(field.getName(), field.getType().getName());
+
+                                       boolean foundMethod = false;
+                                       for(Method method : methods) {
+                                               if(method.getName().equals(getMethod)) {
+                                                       foundMethod = true;
+                                                       break;
+                                               }
+                                       }
+                                       if(!foundMethod) {
+                                               logger.info("Inferred method " + getMethod + " does not exist in class " + mappedClassName);
+                                               //throw new CdmClientCacheException("Inferred method " + getMethod + " does not exist in class " + mappedClassName);
+                                       }
+                               }
+                       }
+
+
+               }
+
+       }
+
+       public List<CdmModelFieldPropertyFromClass> getCdmModelGetMethodFromClassList() {
+               cmgmfcList.clear();
+               Configuration configuration = new Configuration().configure("/eu/etaxonomy/cdm/mappings/hibernate.cfg.xml");
+               configuration.buildMappings();
+               Iterator<PersistentClass> classMappingIterator =   configuration.getClassMappings();
+
+               while(classMappingIterator.hasNext()) {
+                       PersistentClass persistentClass = classMappingIterator.next();
+                       Class mappedClass = persistentClass.getMappedClass();
+                       String mappedClassName = mappedClass.getName();
+
+                       CdmModelFieldPropertyFromClass cmgmfc = new CdmModelFieldPropertyFromClass(mappedClassName);
+                       Iterator propertyIt = persistentClass.getPropertyIterator();
+
+                       while(propertyIt.hasNext())
+                       {
+                               Property property = (Property)propertyIt.next();
+                               Getter getter = property.getGetter(mappedClass);
+                               if(getter != null && getter.getMember() != null) {
+                                       Field field = (Field)getter.getMember();
+                                       String getMethod = getMethodNameFromFieldName(getter.getMember().getName(),field.getType().getName());
+                                       cmgmfc.addGetMethods(getMethod);
+                               }
+                       }
+                       cmgmfcList.add(cmgmfc);
+               }
+               return cmgmfcList;
+
+       }
+
+       public static String getMethodNameFromFieldName(String fieldName, String type) {
+               String prefix = type != null && type.toLowerCase().endsWith("boolean") ? "is" : "get";
+               String getMethod =  prefix + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
+               return getMethod;
+       }
+
+
+
+
+
+}
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 (file)
index 0000000..e90ec6d
--- /dev/null
@@ -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<String> fields = new ArrayList<String>();
+       
+       
+       public CdmModelFieldPropertyFromClass(String className) {
+               this.setClassName(className);
+       }
+       
+       public String getParentClassName() {
+               return parentClassName;
+       }
+
+       public void setParentClassName(String parentClassName) {
+               this.parentClassName = parentClassName;
+       }
+
+       public List<String> getFields() {
+               return fields;
+       }
+
+       public void setFields(List<String> 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 (file)
index 0000000..6a0a63d
--- /dev/null
@@ -0,0 +1,97 @@
+package eu.etaxonomy.taxeditor.remoting.cache;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.CacheException;
+import net.sf.ehcache.CacheManager;
+
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+
+import eu.etaxonomy.cdm.common.CdmUtils;
+
+
+public class CdmRemoteCacheManager {
+
+       private CacheManager cdmlibModelCacheManager;
+
+       private static CdmRemoteCacheManager cdmRemoteCacheManager = null;
+
+       private final Set<CdmTransientEntityCacher> transientEntityCachers = new HashSet<CdmTransientEntityCacher>();
+
+    public static final Resource CDMLIB_CACHE_MANAGER_CONFIG_RESOURCE =
+            new ClassPathResource("cdmlib-ehcache.xml");
+
+    public static final String CDM_MODEL_CACHE_NAME = "cdmModelGetMethodsCache";
+
+
+    public enum CdmCacheManagerType {
+       CDMLIB_MODEL,
+       DEFAULT
+    }
+
+    public static CdmRemoteCacheManager getInstance(){
+       if(cdmRemoteCacheManager == null) {
+               cdmRemoteCacheManager = new CdmRemoteCacheManager();
+       }
+       return cdmRemoteCacheManager;
+    }
+    private CdmRemoteCacheManager() {
+
+       System.setProperty("ehcache.disk.store.dir", CdmUtils.getCdmHomeDir().getAbsolutePath() + File.separator + "cdmlib-model");
+       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");
+                       cdmlibModelCacheManager = new CacheManager(in);
+
+               } catch (CacheException e) {
+                       throw new CdmClientCacheException(e);
+               }
+//             } catch (IOException e) {
+//                     throw new CdmClientCacheException(e);
+//             }
+    }
+
+       public Cache getCdmModelGetMethodsCache(){
+               return cdmlibModelCacheManager.getCache(CDM_MODEL_CACHE_NAME);
+       }
+
+       public CacheManager getCdmModelGetMethodsCacheManager() {
+           return cdmlibModelCacheManager;
+       }
+
+       public CacheManager getDefaultCacheManager() {
+           return CacheManager.create();
+       }
+
+       public void shutdown(CdmCacheManagerType ccmt) {
+               CacheManager cm;
+               switch(ccmt) {
+               case CDMLIB_MODEL:
+                       cdmlibModelCacheManager.shutdown();
+                       break;
+               case DEFAULT:
+                       cm = CacheManager.create();
+                       cm.shutdown();
+                       break;
+               default:
+                       //do nothing
+               }
+       }
+
+       public static void checkCacheProperties() {
+               String pathToCache = System.getProperty("ehcache.disk.store.dir");
+               if(pathToCache == null || pathToCache.isEmpty()) {
+                       throw new CdmClientCacheException("'ehcache.disk.store.dir' property is not set");
+               }
+       }
+
+
+}
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 (file)
index 0000000..52f18ca
--- /dev/null
@@ -0,0 +1,265 @@
+// $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.List;
+import java.util.Map;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+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.cache.CdmServiceCacher;
+import eu.etaxonomy.cdm.model.ICdmCacher;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+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;
+
+
+
+    public CdmTransientEntityCacher(String cacheId, ICdmEntitySessionManager cdmEntitySessionManager) {
+        this.cacheId = cacheId;
+
+        cache = new Cache(getEntityCacheConfiguration(cacheId));
+
+        CdmRemoteCacheManager.getInstance().getDefaultCacheManager().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(10000);
+        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() {
+        return cache.getLiveCacheStatistics();
+    }
+
+    /**
+     * Returns the cache corresponding to the cache id
+     *
+     * @param cacheId
+     * @return
+     */
+    private Cache getCache() {
+        return  CdmRemoteCacheManager.getInstance().getDefaultCacheManager().getCache(cacheId);
+    }
+
+    public <T extends Object> T load(T obj, boolean update) {
+        return cacheLoader.load(obj, true, update);
+    }
+
+    public <T extends Object> Map<T,T> load(Map<T,T> map, boolean update){
+        return cacheLoader.load(map, true, update);
+    }
+
+    public <T extends Object> Collection<T> load(Collection<T> collection, boolean update){
+        return cacheLoader.load(collection, true, update);
+    }
+
+    public CdmBase load(CdmBase cdmEntity, boolean update) {
+        return cacheLoader.load(cdmEntity, true, update);
+    }
+
+    public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) {
+        return cacheLoader.getFromCdmlibModelCache(className);
+    }
+
+
+
+
+    @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) {
+            getCache().put(new Element(id, cdmEntity));
+            logger.info(" - object of type " + cdmEntity.getClass().getName() + " with id " + cdmEntity.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<? extends CdmBase> clazz, int id) {
+        CdmEntityCacheKey cacheId = generateKey(clazz,id);
+        return getFromCache(cacheId);
+    }
+
+    @Override
+    public CdmBase getFromCache(CdmBase cdmBase) {
+
+        CdmEntityCacheKey cacheId = generateKey(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<? extends CdmBase> clazz) {
+
+        cdmBase = CdmBase.deproxy(cdmBase, clazz);
+        return getFromCache(cdmBase);
+    }
+
+    public List<CdmBase> getAllEntities() {
+        List<CdmBase> entities = new ArrayList<CdmBase>();
+        Map<String, CdmBase> elementsMap = getCache().getAllWithLoader(getCache().getKeys(), null);
+        for (Map.Entry<String, CdmBase> 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() {
+        cache.dispose();
+
+    }
+
+
+    public static CdmEntityCacheKey generateKey(Class<? extends CdmBase> clazz, int id) {
+        return new CdmEntityCacheKey(clazz, id);
+    }
+
+
+    public static CdmEntityCacheKey generateKey(CdmBase cdmBase) {
+        Class<? extends CdmBase> entityClass = cdmBase.getClass();
+        int id = cdmBase.getId();
+        return new CdmEntityCacheKey(entityClass, id);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.model.ICdmCacher#load(eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public CdmBase load(CdmBase cdmEntity) {
+        return load(cdmEntity, true);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.model.ICdmCacher#isCachable(eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public boolean isCachable(CdmBase cdmEntity) {
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.model.ICdmCacher#exists(eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @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 (file)
index 0000000..56e0997
--- /dev/null
@@ -0,0 +1,542 @@
+// $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.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<CdmEntityInfo, CdmEntityInfo> duplicateCdmEntityMap;
+
+    private List<CdmEntityInfo> notInCacheList;
+
+    private CdmTransientEntityCacher cacher;
+
+    private List<CdmEntityInfo> rootElements;
+
+    StringBuilder debugOutput = new StringBuilder();
+
+    public EntityCacherDebugResult() {
+    }
+
+
+    public <T extends CdmBase> EntityCacherDebugResult(CdmTransientEntityCacher cacher, List<T> 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<CdmEntityInfo, CdmEntityInfo>();
+        notInCacheList = new ArrayList<CdmEntityInfo>();
+        rootElements = new ArrayList<CdmEntityInfo>();
+    }
+
+    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<CdmEntityInfo> getRootElements() {
+        return rootElements;
+    }
+
+    private void print(Map<CdmEntityInfo, CdmEntityInfo> duplicateCdmEntityMap,
+            List<CdmEntityInfo> notInCacheList,
+            CdmBase rootEntity) {
+        System.out.println(toString(duplicateCdmEntityMap, notInCacheList, rootEntity));
+    }
+
+
+    @Override
+    public String toString() {
+        return debugOutput.toString();
+    }
+
+    private String toString(Map<CdmEntityInfo, CdmEntityInfo> duplicateCdmEntityMap,
+            List<CdmEntityInfo> 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<CdmEntityInfo, CdmEntityInfo> entry : duplicateCdmEntityMap.entrySet())
+            {
+                sb.append(System.getProperty("line.separator"));
+                CdmEntityInfo cei = entry.getKey();
+                CdmBase cb = (CdmBase) cei.getObject();
+                Object cbParent = cei.getParent().getObject();
+
+
+                sb.append(" - " + cei.getField().getName() + ":" + cb.getUserFriendlyTypeName() + "/" + cb.getId() +
+                        " 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();
+                Object dupCbParent = dupCei.getParent().getObject();
+
+                sb.append(" - " + dupCei.getField().getName() + ":" + dupCb.getUserFriendlyTypeName() + "/" + dupCb.getId() +
+                        " 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 = CdmRemoteCacheManager.getInstance().getDefaultCacheManager().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<CdmEntityInfo> alreadyVisitedEntities = new ArrayList<CdmEntityInfo>();
+        CdmEntityInfo cei = new CdmEntityInfo(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 <T extends Object> void debugRecursive(T obj,
+            List<CdmEntityInfo> alreadyVisitedEntities,
+            CdmEntityInfo cei) {
+        if(obj == null) {
+            return;
+        }
+        if(obj instanceof CdmBase) {
+            debugRecursive((CdmBase)obj, alreadyVisitedEntities, cei);
+        } else if (obj instanceof Map) {
+            debug((Map<T,T>)obj, alreadyVisitedEntities, cei);
+        } else if (obj instanceof Collection) {
+            debug((Collection<T>)obj, alreadyVisitedEntities, cei);
+        }
+
+        logger.info("No caching yet for type " + obj.getClass().getName());
+
+
+    }
+
+    private <T extends Object> void debug(Map<T,T> map,
+            List<CdmEntityInfo> alreadyVisitedEntities,
+            CdmEntityInfo cei) {
+        if(map == null || map.isEmpty()) {
+            return;
+        }
+
+        int originalMapSize = map.size();
+
+        Iterator<Map.Entry<T,T>> iter = map.entrySet().iterator();
+        int i=0;
+        while ( iter.hasNext() ) {
+            Map.Entry<T,T> e = iter.next();
+            CdmEntityInfo childCei = new CdmEntityInfo(e);
+            cei.addChild(childCei);
+            debugRecursive(e.getKey(), alreadyVisitedEntities, childCei);
+            debugRecursive(e.getValue(), alreadyVisitedEntities, childCei);
+        }
+    }
+
+    private <T extends Object> void debug(Collection<T> collection,
+            List<CdmEntityInfo> alreadyVisitedEntities,
+            CdmEntityInfo cei) {
+        int length = collection.size();
+        Object[] result = new Object[length];
+        Iterator<T> collectionItr = collection.iterator();
+
+        while(collectionItr.hasNext()) {
+            Object obj = collectionItr.next();
+            CdmEntityInfo childCei = new CdmEntityInfo(obj);
+            cei.addChild(childCei);
+            debugRecursive(obj, alreadyVisitedEntities, childCei);
+
+        }
+
+    }
+
+    private void debugRecursive(CdmBase cdmEntity,
+            List<CdmEntityInfo> 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<String> 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<CdmEntityInfo> 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);
+
+            CdmBase cdmEntityInSubGraph = null;
+
+            boolean isHibernateProxy = false;
+            boolean isPersistentCollection = false;
+
+            childCei = new CdmEntityInfo(o);
+            cei.addChild(childCei);
+            childCei.setField(field);
+
+            if(o != null) {
+
+                if(o instanceof HibernateProxy) {
+                    LazyInitializer hli = ((HibernateProxy)o).getHibernateLazyInitializer();
+                    if(!hli.isUninitialized()) {
+                        o = hli.getImplementation();
+                    } else {
+                        isHibernateProxy = true;
+                    }
+                }
+
+                if(o instanceof PersistentCollection) {
+                    PersistentCollection pc = ((PersistentCollection)o);
+                    if(pc.wasInitialized()) {
+                        o = ProxyUtils.getObject(pc);
+                    } else {
+                        isPersistentCollection = true;
+                    }
+                }
+                childCei.setObject(o);
+                childCei.setProxy(isHibernateProxy || isPersistentCollection);
+                if(!isHibernateProxy && !isPersistentCollection) {
+
+                    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<CdmEntityInfo> 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<CdmEntityInfo> 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<CdmEntityInfo> children;
+        private Field field;
+        private String label;
+        private boolean isProxy;
+
+        public CdmEntityInfo(Object object) {
+            this.object = object;
+            isProxy = false;
+            children = new ArrayList<CdmEntityInfo>();
+        }
+
+        public CdmEntityInfo getParent() {
+            return parent;
+        }
+
+        public void setParent(CdmEntityInfo parent) {
+            this.parent = parent;
+        }
+
+        public List<CdmEntityInfo> getChildren() {
+            return children;
+        }
+
+        public void setChildren(List<CdmEntityInfo> 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 (file)
index 0000000..c6c5032
--- /dev/null
@@ -0,0 +1,195 @@
+// $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 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.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) {
+                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 ((HibernateProxy) o).getHibernateLazyInitializer().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 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 (file)
index 0000000..33cd998
--- /dev/null
@@ -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);
+    }
+
+}
similarity index 89%
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 a6cd14cd2e1d2d16e6787d30e5f3d2617752dd2b..d8edcbf5f679afe52f0b571c8c0bb744a78b4559 100644 (file)
@@ -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<Attribute> 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,49 @@ 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 +112,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 +128,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 +148,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 +173,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 +194,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 +203,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<CdmPersistentRemoteSource> getAllRemoteSources() throws CdmRemoteSourceException{
                List<CdmPersistentRemoteSource> remoteSources = new ArrayList<CdmPersistentRemoteSource>();
-               
+
                Element root = getBeansRoot(CdmPersistentSourceUtils.getCdmSourceInputStream());
                if (root == null){
                        return null;
                }else{
                List<Element> 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 +229,7 @@ public class CdmPersistentRemoteSource extends CdmRemoteSourceBase implements IC
                }
                return remoteSources;
        }
-       
+
        @Override
        public String toString(){
                if (getName() != null){
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 9dbb34b3abf2d0cad71d8a22736c473603d8e9e2..473cdca0f4d50494ecaf501320df57c353492de8 100644 (file)
@@ -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;
 
similarity index 86%
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 d24baa6ee8717126a7696dcb04f4c10a7f1ad271..425820b543d7500a3f4f5872c5a672283d658189 100644 (file)
@@ -1,12 +1,12 @@
 /**
 * 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;
 
@@ -15,12 +15,11 @@ import org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean;
 import eu.etaxonomy.cdm.api.service.IDatabaseService;
 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 +33,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;
-       
+
        /**
         * Constructs a CdmRemoteSourceBase object with default values.
-        * 
+        *
         */
        protected CdmRemoteSourceBase() {
                setName(DEFAULT_NAME);
@@ -48,42 +47,43 @@ 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);                        
+               setNomenclaturalCode(nomenclaturalCode);
                initDatabaseConnection();
        }
-       
+
        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 
+               // 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");
+           // FIXME:Remoting need to fix this hardcoded url and make it configurable somehow
+           proxy.setServiceUrl(baseUrl + "/remoting-public/database.service");
            proxy.afterPropertiesSet();
            databaseService = (IDatabaseService) proxy.getObject();
 
        }
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.remote.ICdmRemoteSource#getBaseUrl()
         */
@@ -93,11 +93,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 +114,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) {
@@ -146,9 +146,9 @@ 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();
@@ -164,7 +164,7 @@ public class CdmRemoteSourceBase extends CdmSource implements ICdmRemoteSource {
                return "Conncting to Remote CDM Server " + getName();
        }
 
-               
+
        @Override
        public Map<MetaDataPropertyName, String> getMetaDataMap() throws CdmSourceException {
                return databaseService.getCdmMetadataMap();
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 (file)
index 0000000..ec715ab
--- /dev/null
@@ -0,0 +1,258 @@
+// $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.List;
+
+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.util.EntityUtils;
+import org.apache.log4j.Logger;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import eu.etaxonomy.cdm.config.CdmSourceException;
+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 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_TEST = "edit-test";
+    private final static String SERVER_TEST = "test.e-taxonomy.eu";
+
+    private final static String SERVER_LOCALHOST = "localhost";
+    private final static String NAME_LOCALHOST = "localhost";
+    private 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 = "";
+
+    private final String name;
+    private final String server;
+    private final int port;
+    private final List<CdmInstanceInfo> instances;
+
+
+    public CdmServerInfo(String name, String server, int port) {
+        this.name = name;
+        this.server = server;
+        this.port = port;
+        instances = new ArrayList<CdmInstanceInfo>();
+    }
+
+
+    public CdmInstanceInfo addInstance(String name, String basePath) {
+        CdmInstanceInfo cii = new CdmInstanceInfo(name, basePath);
+        instances.add(cii);
+        return cii;
+
+    }
+
+    public void refreshInstances() throws CDMServerException {
+        String url = "http://" + server + ":" + String.valueOf(port) + "/cdmserver/instances.jsp";
+
+        HttpClient client = new DefaultHttpClient();
+        HttpGet httpGet = new HttpGet(url);
+
+        logger.info("Executing request " + httpGet.getRequestLine());
+
+        // Create a custom response handler
+        ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
+
+            @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);
+        }
+
+
+        if(responseBody != null) {
+            try {
+                JSONArray array = new JSONArray(responseBody);
+                for(int i=0;i<array.length();i++) {
+                    JSONObject instance = (JSONObject)array.get(i);
+                    if(instance != null) {
+                        JSONObject conf = (JSONObject)instance.get("configuration");
+                        if(conf != null) {
+                            String instanceName = conf.getString("instanceName");
+                            // we need to remove the first (char) forward slash from
+                            // the base path
+                            String basePath = conf.getString("basePath").substring(1);
+                            addInstance(instanceName, basePath);
+                            logger.info("Added instance with name : " + instanceName + ", basePath : " + basePath);
+                        }
+                    }
+                }
+            } catch (JSONException e) {
+                throw new CDMServerException(e);
+            }
+        }
+
+    }
+
+    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 ICdmRemoteSource getCdmRemoteSource(CdmInstanceInfo instance) {
+        if(instance != null) {
+            return CdmRemoteSource.NewInstance(name,
+                    server,
+                    port,
+                    instance.getBasePath(),
+                    null);
+        }
+        return null;
+    }
+
+    public boolean pingServer(){
+        try {
+            Socket s = new Socket(server, port);
+            logger.info("[CDM-Server] Available @ " + server + ":" + port );
+            return true;
+        } catch (IOException ioe) {
+
+        }
+        return false;
+    }
+
+    public boolean pingInstance(CdmInstanceInfo instance) throws CDMServerException  {
+
+        ICdmRemoteSource crs = getCdmRemoteSource(instance);
+        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 static List<CdmServerInfo> getCdmServers() {
+        List<CdmServerInfo> cdmServerInfoList = new ArrayList<CdmServerInfo>();
+        cdmServerInfoList.add(new CdmServerInfo(NAME_PRODUCTION, SERVER_PRODUCTION, 80));
+        cdmServerInfoList.add(new CdmServerInfo(NAME_INTEGRATION, SERVER_INTEGRATION, 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,8080));
+        return cdmServerInfoList;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getServer() {
+        return server;
+    }
+
+
+    public int getPort() {
+        return port;
+    }
+
+
+    public List<CdmInstanceInfo> getInstances() throws CDMServerException {
+        if(instances.isEmpty()) {
+            refreshInstances();
+        }
+        return instances;
+    }
+
+    public static ICdmRemoteSource getDevServerRemoteSource() {
+        String value=System.getProperty("cdm.server.dev.activate");
+        boolean available = false;
+        CdmInstanceInfo devInstance = null;
+        if(value != null && value.equals("true")) {
+            CdmServerInfo devCii = new CdmServerInfo(NAME_LOCALHOST_DEV, SERVER_LOCALHOST_DEV, PORT_LOCALHOST_DEV);
+            try {
+                devInstance = devCii.addInstance(NAME_INSTANCE_LOCALHOST_DEV, BASEPATH_LOCALHOST_DEV);
+                available = devCii.pingInstance(devInstance);
+                if(available) {
+                    return devCii.getCdmRemoteSource(devInstance);
+                }
+            } catch (Exception e) {
+
+            }
+        }
+        return null;
+    }
+
+    public class CdmInstanceInfo {
+        private final String name;
+        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;
+        }
+    }
+}
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 f278c74689aa3cbe8a0ee2de252e7940d62de8db..39e8886e43b31e6c881b8016a1baeba76d6f4519 100644 (file)
@@ -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 (file)
index 0000000..ddc9244
--- /dev/null
@@ -0,0 +1,136 @@
+// $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 org.hibernate.collection.spi.PersistentCollection;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import eu.etaxonomy.cdm.api.service.ICommonService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils.CollectionField;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+
+/**
+ * @author cmathew
+ * @date 14 Oct 2014
+ *
+ */
+@Component
+public class CachedCommonServiceImpl implements ICachedCommonService {
+
+
+    @Autowired
+    private ICommonService commonService;
+
+    private static boolean cacheEnabled = true;
+
+    @Autowired
+    private ICdmEntitySessionManager cdmEntitySessionManager;
+
+
+    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<? extends CdmBase> clazz, int id) {
+        if(cacheEnabled) {
+            CdmBase cdmEntity = CdmBase.deproxy(commonService.find(clazz, id),clazz);
+            if(cdmEntity == null) {
+                throw new NullPointerException("CDM Entity of type " + clazz.getName() + " with id " + id  + " is null.");
+            }
+            return cdmEntitySessionManager.load(cdmEntity, false);
+        } else {
+            return CdmBase.deproxy(commonService.find(clazz, id),clazz);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#initializeCollection(org.hibernate.collection.spi.PersistentCollection)
+     */
+    @Override
+    public PersistentCollection initializeCollection(PersistentCollection col) {
+           return commonService.initializeCollection(col);
+    }
+
+    @Override
+    public void updatePersistentCollection(CollectionField colf) {
+       if(cacheEnabled) {
+               cdmEntitySessionManager.load(colf.getCollection(), false);
+       }
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#isEmpty(org.hibernate.collection.spi.PersistentCollection)
+     */
+    @Override
+    public boolean isEmpty(PersistentCollection col) {
+            return commonService.isEmpty(col);
+
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#size(org.hibernate.collection.spi.PersistentCollection)
+     */
+    @Override
+    public int size(PersistentCollection col) {
+        return commonService.size(col);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#get(org.hibernate.collection.spi.PersistentCollection, int)
+     */
+    @Override
+    public Object get(PersistentCollection col, int index) {
+        return commonService.get(col, index);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#contains(org.hibernate.collection.spi.PersistentCollection, java.lang.Object)
+     */
+    @Override
+    public boolean contains(PersistentCollection col, Object element) {
+        return commonService.contains(col, element);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#containsKey(org.hibernate.collection.spi.PersistentCollection, java.lang.Object)
+     */
+    @Override
+    public boolean containsKey(PersistentCollection col, Object key) {
+        return commonService.containsKey(col, key);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.remoting.service.ICachedCommonService#containsValue(org.hibernate.collection.spi.PersistentCollection, java.lang.Object)
+     */
+    @Override
+    public boolean containsValue(PersistentCollection col, Object element) {
+        return commonService.containsValue(col, 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 (file)
index 0000000..eae2c28
--- /dev/null
@@ -0,0 +1,44 @@
+// $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.SecurityContextHolder;
+
+/**
+ * @author cmathew
+ * @date 27 Jan 2015
+ *
+ */
+public class CdmAuthenticatedHttpInvokerRequestExecutor extends CommonsHttpInvokerRequestExecutor {
+
+    @Override
+    protected PostMethod createPostMethod(HttpInvokerClientConfiguration config) throws IOException {
+        PostMethod postMethod = super.createPostMethod(config);
+
+        Authentication auth =
+                SecurityContextHolder.getContext().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 (file)
index 0000000..292eda2
--- /dev/null
@@ -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 (file)
index 0000000..d2b19e9
--- /dev/null
@@ -0,0 +1,68 @@
+package eu.etaxonomy.taxeditor.service;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.springframework.beans.factory.annotation.Autowired;
+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.service.UpdateResult;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+
+@Component
+public class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor {
+
+    @Autowired
+    private ICdmEntitySessionManager cdmEntitySessionManager;
+
+       private RemoteInvocation currentRemoteInvocation;
+
+       @Override
+       protected void writeRemoteInvocation(RemoteInvocation invocation, OutputStream os) throws IOException {
+               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 is not null at this point we assume that the
+               // the object has already been loaded in the cache and
+               // does not need to be reloaded
+
+               if(rir == null) {
+                       rir = super.doExecuteRequest(config, baos);
+                       if(rir.getValue() != null && !rir.hasException()) {
+                           if(currentRemoteInvocation.getMethodName().equals("merge")) {
+                               rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue(), true));
+                           } else if(rir.getValue() instanceof UpdateResult){
+                               UpdateResult result = (UpdateResult)rir.getValue();
+                               if(result.isOk()){
+                                   cdmEntitySessionManager.update(result.getCdmEntity(), result.getUpdatedObjects());
+                               }
+                           } 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 (file)
index 0000000..a8095a9
--- /dev/null
@@ -0,0 +1,45 @@
+// $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 org.hibernate.collection.spi.PersistentCollection;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.remoting.cache.ProxyUtils.CollectionField;
+
+/**
+ * @author cmathew
+ * @date 14 Oct 2014
+ *
+ */
+public interface ICachedCommonService {
+
+    public CdmBase find(Class<? extends CdmBase> clazz, int id);
+
+    public PersistentCollection initializeCollection(PersistentCollection col);
+
+       public void updatePersistentCollection(CollectionField colf);
+
+    public boolean isEmpty(PersistentCollection col);
+
+    public int size(PersistentCollection col);
+
+    public Object get(PersistentCollection col, int index);
+
+    public boolean contains(PersistentCollection col, Object element);
+
+    public boolean containsKey(PersistentCollection col, Object key);
+
+    public boolean containsValue(PersistentCollection col, 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 (file)
index 0000000..809cb29
--- /dev/null
@@ -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<TermType, RemoteInvocationResult>  termTypeMap = new
+                       HashMap<TermType, RemoteInvocationResult>();
+
+       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<DefinedTermBase> terms = new HashSet<DefinedTermBase>();
+                       if(rir.getValue() != null) {
+                           terms.addAll((List<DefinedTermBase>)rir.getValue());
+
+                           for(DefinedTermBase<?> term : terms) {
+                               cdmServiceCacher.put(term.getUuid(), 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 (file)
index 0000000..4af9273
--- /dev/null
@@ -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 (file)
index 0000000..e3f6b7b
--- /dev/null
@@ -0,0 +1,334 @@
+// $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.HashSet;
+import java.util.List;
+import java.util.Set;
+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.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmPostDataChangeObservableListener;
+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 final CdmTransientEntityCacher cdmTransientEntityCacher;
+
+    private final List<ICdmEntitySessionEnabled> changeObservers;
+
+    private final Set<CdmBase> newCdmEntities;
+
+
+
+    public CdmEntitySession(ICdmEntitySessionEnabled sessionOwner, CdmEntitySessionManager cdmEntitySessionManager) {
+        this.sessionOwner = sessionOwner;
+        this.cdmTransientEntityCacher = new CdmTransientEntityCacher(sessionOwner, cdmEntitySessionManager);
+        this.cdmEntitySessionManager = cdmEntitySessionManager;
+        this.changeObservers = new ArrayList<ICdmEntitySessionEnabled>();
+        this.newCdmEntities = new HashSet<CdmBase>();
+        cdmEntitySessionManager.addToOwnerSessionMap(sessionOwner, this);
+    }
+
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.lang.Object, boolean)
+     */
+    @Override
+    public  <O extends Object> 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 extends CdmBase> T load(T cdmBase, boolean update) {
+        return (T)cdmTransientEntityCacher.load(cdmBase, update);
+    }
+
+    @Override
+    public <T extends CdmBase> void  update() {
+        List<T> rootEntities = getRootEntities();
+        if(rootEntities != null) {
+            for(T rootEntity : rootEntities) {
+                load(rootEntity, true);
+            }
+        }
+    }
+
+    @Override
+    public <T extends ICdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
+        addEvent(cdmBase, affectedObjects, EventType.UPDATE);
+    }
+
+    @Override
+    public <T extends ICdmBase> void update(T cdmBase, CdmBase affectedObject) {
+        Set<CdmBase> set = new HashSet<CdmBase>();
+        set.add(affectedObject);
+        addEvent(cdmBase, set, EventType.UPDATE);
+    }
+
+
+    @Override
+    public <T extends ICdmBase> void delete(T cdmBase, Set<CdmBase> affectedObjects) {
+        addEvent(cdmBase, affectedObjects, EventType.DELETE);
+    }
+
+    @Override
+    public <T extends ICdmBase> void delete(Set<T> cdmBases, Set<CdmBase> affectedObjects) {
+        addEvent(cdmBases, affectedObjects, EventType.DELETE);
+    }
+
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase) {
+        return debug(Arrays.asList(cdmBase));
+    }
+
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List)
+     */
+    @Override
+    public <T extends CdmBase> EntityCacherDebugResult debug(List<T> cdmBases) {
+        EntityCacherDebugResult entityCacherDebugResult =
+                new EntityCacherDebugResult(cdmTransientEntityCacher, cdmBases);
+        return entityCacherDebugResult;
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug()
+     */
+    @Override
+    public <T extends CdmBase> EntityCacherDebugResult debug() {
+        return debug(getRootEntities());
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection)
+     */
+    @Override
+    public  <T extends CdmBase> Collection<T> load(Collection<T> 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<CdmBase> entities = cdmTransientEntityCacher.getAllEntities();
+        //             for(CdmBase entity : entities) {
+        //                     cdmEntitySessionManager.setEntityAsLatest(entity);
+        //             }
+    }
+
+    /**
+     * Register to get updated after any interaction with the datastore
+     */
+    @Override
+    public void registerForDataStoreChanges(ICdmEntitySessionEnabled observer) {
+        CdmPostDataChangeObservableListener.getDefault().register(observer);
+    }
+
+    /**
+     * Register to get updated after any interaction with the datastore
+     */
+    @Override
+    public void unregisterForDataStoreChanges(ICdmEntitySessionEnabled observer) {
+        CdmPostDataChangeObservableListener.getDefault().unregister(observer);
+    }
+
+
+
+    @Override
+    public void bind() {
+        logger.info("Binding session with owner " + sessionOwner.toString());
+        cdmEntitySessionManager.bind(sessionOwner);
+        cdmEntitySessionManager.notifyObservers();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#dispose()
+     */
+    @Override
+    public void dispose() {
+
+        cdmTransientEntityCacher.dispose();
+        for(ICdmEntitySessionEnabled observer : changeObservers) {
+            CdmPostDataChangeObservableListener.getDefault().unregister(observer);
+        }
+        changeObservers.clear();
+        cdmEntitySessionManager.remove(sessionOwner);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
+     */
+    @Override
+    public void addEvent(ICdmBase cdmBase, Set<CdmBase> affectedObjects, EventType eventType) {
+        affectedObjects = (Set<CdmBase>) load(affectedObjects, true);
+        CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, affectedObjects, eventType);
+        CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#notify(java.util.Collection, eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType)
+     */
+    @Override
+    public  <T extends ICdmBase>  void addEvent(Collection <T> cdmBases, Set<CdmBase> affectedObjects, EventType eventType) {
+        affectedObjects = (Set<CdmBase>) load(affectedObjects, true);
+        for(ICdmBase cdmBase : cdmBases) {
+            CdmDataChangeEvent cdce = CdmDataChangeEvent.NewInstance((CdmBase)cdmBase, affectedObjects, eventType);
+            CdmPostDataChangeObservableListener.getDefault().notifyObservers(cdce);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
+     */
+    @Override
+    public void fireNotifications() {
+        CdmPostDataChangeObservableListener.getDefault().delayedNotify();
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, java.lang.Class)
+     */
+    @Override
+    public  <T extends CdmBase>  T remoteLoad(IService<T> 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 extends CdmBase>  T remoteLoad(IService<T> service, UUID uuid, List<String> 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 <T extends CdmBase> UUID remoteSave(IService<T> service, T cdmBase) {
+        UUID uuid = service.save(cdmBase);
+        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 extends CdmBase> T remoteUpdate(IService<T> service, T cdmBase) {
+        T mergedCdmBase = service.merge(cdmBase);
+        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 <T extends CdmBase> List<T> getRootEntities() {
+        return sessionOwner.getRootEntities();
+    }
+
+    public CdmTransientEntityCacher getCacher() {
+        return cdmTransientEntityCacher;
+    }
+
+
+
+
+
+
+
+
+
+
+
+}
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 (file)
index 0000000..5e43249
--- /dev/null
@@ -0,0 +1,221 @@
+// $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.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+
+/**
+ * @author cmathew
+ * @date 16 Oct 2014
+ *
+ */
+@Component
+public class CdmEntitySessionManager implements ICdmEntitySessionManager {
+    private static final Logger logger = Logger.getLogger(CdmEntitySessionManager.class);
+
+    private final Map<ICdmEntitySessionEnabled, ICdmEntitySession> ownerSessionMap =
+            new HashMap<ICdmEntitySessionEnabled, ICdmEntitySession>();
+
+    private final List<ICdmEntitySessionManagerObserver> sessionObservers = new ArrayList<ICdmEntitySessionManagerObserver>();
+
+    private ICdmEntitySession activeSession;
+
+    @Autowired
+    private CdmServiceCacher cdmServiceCacher;
+
+    @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 getActiveSession() {
+        return activeSession;
+    }
+
+    private void setActiveSession(ICdmEntitySession activeSession) {
+        this.activeSession = activeSession;
+        cdmServiceCacher.setActiveSession(activeSession);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#getSessions()
+     */
+    @Override
+    public Collection<ICdmEntitySession> 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) {
+            session = newSession(sessionOwner,true);
+        }
+
+        setActiveSession(session);
+
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
+     */
+    @Override
+    public <T extends Object> T load(T obj, boolean update) {
+        if(activeSession == null) {
+            return obj;
+        } else {
+            return activeSession.load(obj, update);
+        }
+    }
+
+    @Override
+    public <T extends CdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
+        if(activeSession != null) {
+            activeSession.addEvent(cdmBase, affectedObjects, EventType.UPDATE);
+        }
+    }
+
+    @Override
+    public <T extends CdmBase> void update() {
+        if(activeSession != null) {
+            activeSession.update();
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(T)
+     */
+    @Override
+    public <T extends CdmBase> T load(T cdmBase, boolean update) {
+        if(activeSession == null) {
+            return cdmBase;
+        }
+        return activeSession.load(cdmBase, update);
+    }
+
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#load(java.util.Collection)
+     */
+    @Override
+    public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update) {
+        if(activeSession == null) {
+            return cdmBaseList;
+        }
+        return activeSession.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 == activeSession) {
+            setActiveSession(null);
+        }
+        ownerSessionMap.remove(owner);
+
+    }
+
+    @Override
+    public void dispose(ICdmEntitySessionEnabled owner) {
+        ICdmEntitySession session = ownerSessionMap.get(owner);
+        if(session != null) {
+            session.dispose();
+        }
+        notifyObservers();
+    }
+
+    @Override
+    public void disposeAll() {
+        Set<ICdmEntitySessionEnabled> owners =
+                new HashSet<ICdmEntitySessionEnabled>(ownerSessionMap.keySet());
+        for(ICdmEntitySessionEnabled owner : owners) {
+            ICdmEntitySession session = ownerSessionMap.get(owner);
+            if(session != null) {
+                session.dispose();
+            }
+        }
+        notifyObservers();
+    }
+
+    void addToOwnerSessionMap(ICdmEntitySessionEnabled owner, ICdmEntitySession session) {
+        ownerSessionMap.put(owner, session);
+    }
+
+    /* (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/ICdmEntitySession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/ICdmEntitySession.java
new file mode 100644 (file)
index 0000000..1b8c63a
--- /dev/null
@@ -0,0 +1,97 @@
+package eu.etaxonomy.taxeditor.session;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import net.sf.ehcache.statistics.LiveCacheStatistics;
+import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
+
+public interface ICdmEntitySession {
+
+    public ICdmEntitySessionEnabled getOwner();
+
+    public LiveCacheStatistics getCacheStatistics();
+
+       public  <O extends Object> O load(O obj, boolean update);
+
+       public  <T extends CdmBase> T load(T cdmBase, boolean update);
+
+       public <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase);
+
+       public <T extends CdmBase> EntityCacherDebugResult debug(List<T> cdmBase);
+
+       public <T extends CdmBase> EntityCacherDebugResult debug();
+
+       public <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update);
+
+       public  void setEntitiesAsLatest();
+
+       public <T extends CdmBase> List<T> getRootEntities();
+
+       public  void dispose();
+
+    public void bind();
+
+    public void registerForDataStoreChanges(ICdmEntitySessionEnabled observer);
+
+    public void unregisterForDataStoreChanges(ICdmEntitySessionEnabled observer);
+
+    public void addEvent(ICdmBase cdmBase, Set<CdmBase> affectedObjects, EventType eventType);
+
+    public  <T extends ICdmBase> void addEvent(Collection <T> cdmBases, Set<CdmBase> affectedObjects, EventType eventType);
+
+    public  <T extends CdmBase> T remoteLoad(IService<T> service, UUID uuid);
+
+    public  <T extends CdmBase> T remoteLoad(IService<T> service, UUID uuid, List<String> propertyPaths);
+
+    public <T extends CdmBase> UUID remoteSave(IService<T> service, T cdmBase);
+
+    public <T extends CdmBase> T remoteUpdate(IService<T> service, T cdmBase);
+
+
+    /**
+     * @param cdmBase
+     * @param affectedObjects
+     */
+    public <T extends ICdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects);
+
+    /**
+     * @param cdmBase
+     * @param affectedObjects
+     */
+    public <T extends ICdmBase> void delete(T cdmBase, Set<CdmBase> affectedObjects);
+
+    /**
+     * @param cdmBase
+     * @param affectedObjects
+     */
+    public <T extends ICdmBase> void delete(Set<T> cdmBases, Set<CdmBase> affectedObjects);
+
+    /**
+     *
+     */
+    public void fireNotifications();
+
+    public boolean isActive();
+
+    /**
+     * @param cdmBase
+     * @param affectedObject
+     */
+    public <T extends ICdmBase> void update(T cdmBase, CdmBase affectedObject);
+
+    /**
+     *
+     */
+    public <T extends CdmBase> void update();
+
+
+
+
+}
\ 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 (file)
index 0000000..ba70991
--- /dev/null
@@ -0,0 +1,14 @@
+package eu.etaxonomy.taxeditor.session;
+
+import java.util.List;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver;
+
+public interface ICdmEntitySessionEnabled extends ICdmPostDataChangeObserver {
+
+    public ICdmEntitySession getCdmEntitySession();
+
+    public <T extends CdmBase> List<T> getRootEntities();
+
+}
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 (file)
index 0000000..e8f2157
--- /dev/null
@@ -0,0 +1,60 @@
+package eu.etaxonomy.taxeditor.session;
+
+import java.util.Collection;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+
+public interface ICdmEntitySessionManager {
+
+    public abstract ICdmEntitySession newSession(ICdmEntitySessionEnabled sessionOwner, boolean setAsActive);
+
+       public abstract void bind(ICdmEntitySessionEnabled sessionOwner);
+
+
+       public abstract <T extends Object> T load(T obj, boolean update);
+
+
+       public abstract <T extends CdmBase> T load(T cdmBase, boolean update);
+
+
+       public abstract <T extends CdmBase> Collection<T> load(Collection<T> cdmBaseList, boolean update);
+
+
+    /**
+     * @return
+     */
+    public ICdmEntitySession getActiveSession();
+
+    public Collection<ICdmEntitySession> getSessions();
+
+    public void addSessionObserver(ICdmEntitySessionManagerObserver sessionObserver);
+
+
+
+
+    public boolean isRemoting();
+
+    /**
+     * @param owner
+     */
+    public void dispose(ICdmEntitySessionEnabled owner);
+
+    /**
+     *
+     */
+    public void disposeAll();
+
+    /**
+     * @param cdmBase
+     * @param affectedObjects
+     */
+    public <T extends CdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects);
+
+    /**
+     *
+     */
+    public <T extends CdmBase> void update();
+
+
+}
\ 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 (file)
index 0000000..d2e3252
--- /dev/null
@@ -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/mock/MockCdmEntitySession.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/mock/MockCdmEntitySession.java
new file mode 100644 (file)
index 0000000..369a82c
--- /dev/null
@@ -0,0 +1,266 @@
+// $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.Set;
+import java.util.UUID;
+
+import net.sf.ehcache.statistics.LiveCacheStatistics;
+import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
+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 extends Object> 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 extends CdmBase> T load(T cdmBase, boolean update) {
+        return cdmBase;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.Collection)
+     */
+    @Override
+    public  <T extends CdmBase> Collection<T> load(Collection<T> 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#registerForDataStoreChanges(eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled)
+     */
+    @Override
+    public void registerForDataStoreChanges(ICdmEntitySessionEnabled observer) {
+
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#unregisterForDataStoreChanges(eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled)
+     */
+    @Override
+    public void unregisterForDataStoreChanges(ICdmEntitySessionEnabled observer) {
+
+    }
+
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#commit()
+     */
+    @Override
+    public void fireNotifications() {
+
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public  <T extends CdmBase> EntityCacherDebugResult debug(T cdmBase) {
+
+        return new EntityCacherDebugResult();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addEvent(eu.etaxonomy.cdm.model.common.ICdmBase, eu.etaxonomy.cdm.model.common.CdmBase[], eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType)
+     */
+    @Override
+    public void addEvent(ICdmBase cdmBase, Set<CdmBase> affectedObjects, EventType eventType) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#addEvent(java.util.Collection, eu.etaxonomy.cdm.model.common.CdmBase[], eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType)
+     */
+    @Override
+    public  <T extends ICdmBase> void addEvent(Collection<T> cdmBases, Set<CdmBase> affectedObjects, EventType eventType) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#load(java.util.UUID, eu.etaxonomy.cdm.api.service.IService)
+     */
+    @Override
+    public <T extends CdmBase> T remoteLoad(IService<T> 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 extends CdmBase> T remoteLoad(IService<T> service, UUID uuid, List<String> 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 <T extends CdmBase> UUID remoteSave(IService<T> service, T cdmBase) {
+        return service.save(cdmBase);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.api.service.IService, eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public <T extends CdmBase> T remoteUpdate(IService<T> service, T cdmBase) {
+        return cdmBase;
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.model.common.ICdmBase, java.util.Set)
+     */
+    @Override
+    public <T extends ICdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#delete(eu.etaxonomy.cdm.model.common.ICdmBase, java.util.Set)
+     */
+    @Override
+    public <T extends ICdmBase> void delete(T cdmBase, Set<CdmBase> affectedObjects) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#delete(java.util.Set, java.util.Set)
+     */
+    @Override
+    public <T extends ICdmBase> void delete(Set<T> cdmBases, Set<CdmBase> affectedObjects) {
+        // TODO Auto-generated method stub
+
+    }
+
+    /* (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 <T extends CdmBase> List<T> getRootEntities() {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug(java.util.List)
+     */
+    @Override
+    public <T extends CdmBase> EntityCacherDebugResult debug(List<T> cdmBase) {
+
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#debug()
+     */
+    @Override
+    public <T extends CdmBase> EntityCacherDebugResult debug() {
+
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update(eu.etaxonomy.cdm.model.common.ICdmBase, eu.etaxonomy.cdm.model.common.CdmBase)
+     */
+    @Override
+    public <T extends ICdmBase> void update(T cdmBase, CdmBase affectedObject) {
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySession#update()
+     */
+    @Override
+    public <T extends CdmBase> void update() {
+        // TODO Auto-generated method stub
+
+    }
+
+
+}
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 (file)
index 0000000..58438a0
--- /dev/null
@@ -0,0 +1,113 @@
+package eu.etaxonomy.taxeditor.session.mock;
+
+import java.util.Collection;
+import java.util.Set;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+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> T load(T obj, boolean update) {
+               return obj;
+       }
+
+       @Override
+       public <T extends CdmBase> T load(T obj, boolean update) {
+               return obj;
+       }
+
+
+       @Override
+       public <T extends CdmBase> Collection<T> load(Collection<T> 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<ICdmEntitySession> 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(eu.etaxonomy.cdm.model.common.CdmBase, java.util.Set)
+     */
+    @Override
+    public <T extends CdmBase> void update(T cdmBase, Set<CdmBase> affectedObjects) {
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager#update()
+     */
+    @Override
+    public <T extends CdmBase> void update() {
+        // TODO Auto-generated method stub
+
+    }
+
+
+}
index e6841035b006c86e34fadc4ffca125640c6a7789..7f2110d38fa0ab8cebc2ec6a6c1e27eefadb9751 100644 (file)
@@ -30,15 +30,10 @@ 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;
 
@@ -64,10 +59,10 @@ 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.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}
@@ -78,7 +73,7 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        private static final Logger log = Logger.getLogger( AbstractPersistentCollection.class );
 
        private static final long serialVersionUID = -7238232378593030571L;
-       
+
        private transient SessionImplementor session;
        private boolean initialized;
        private transient List<DelayedOperation> operationQueue;
@@ -97,31 +92,38 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        private String sessionFactoryUuid;
        private boolean specjLazyLoad = false;
 
-       public final String getRole() {
+       @Override
+    public final String getRole() {
                return role;
        }
 
-       public final Serializable getKey() {
+       @Override
+    public final Serializable getKey() {
                return key;
        }
 
-       public final boolean isUnreferenced() {
+       @Override
+    public final boolean isUnreferenced() {
                return role == null;
        }
 
-       public final boolean isDirty() {
+       @Override
+    public final boolean isDirty() {
                return dirty;
        }
 
-       public final void clearDirty() {
+       @Override
+    public final void clearDirty() {
                dirty = false;
        }
 
-       public final void dirty() {
+       @Override
+    public final void dirty() {
                dirty = true;
        }
 
-       public final Serializable getStoredSnapshot() {
+       @Override
+    public final Serializable getStoredSnapshot() {
                return storedSnapshot;
        }
 
@@ -130,7 +132,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * Is the initialized collection empty?
         */
-       public abstract boolean empty();
+       @Override
+    public abstract boolean empty();
 
        /**
         * Called by any read-only method of the collection interface
@@ -151,9 +154,9 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        else {
                                // In remoting we are sure that session is null
                                // both when using property paths and switching off conversations
-                               if(session == null && remoting) {                               
+                               if(session == null && remoting) {
                                        log.info("--> readSize, of " + getRole() + " with key " + getKey());
-                                       read();                                                         
+                                       read();
                                } else {
                                        boolean isExtraLazy = withTemporarySessionIfNeeded(
                                                        new LazyInitializationWork<Boolean>() {
@@ -236,7 +239,7 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                                        .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
@@ -245,7 +248,7 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                                // multiple transactions.
                                ( ( Session) session ).beginTransaction();
                        }
-                       
+
                        session.getPersistenceContext().addUninitializedDetachedCollection(
                                        session.getFactory().getCollectionPersister( getRole() ),
                                        this
@@ -286,9 +289,9 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                if ( !initialized ) {
                        // In remoting we are sure that session is null
                        // both when using property paths and switching off conversations
-                       if(session == null && remoting) {                       
+                       if(session == null && remoting) {
                                log.info("--> readIndexExistence, of " + getRole() + " with key " + getKey());
-                               read();                                                                         
+                               read();
                        } else {
                                Boolean extraLazyExistenceCheck = withTemporarySessionIfNeeded(
                                                new LazyInitializationWork<Boolean>() {
@@ -323,8 +326,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        // both when using property paths and switching off conversations
                        if(session == null && remoting) {
                                log.info("--> readElementExistence, of " + getRole() + " with key " + getKey());
-                               read();                         
-                               
+                               read();
+
                        } else {
                                Boolean extraLazyExistenceCheck = withTemporarySessionIfNeeded(
                                                new LazyInitializationWork<Boolean>() {
@@ -359,10 +362,10 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                if ( !initialized ) {
                        // In remoting we are sure that session is null
                        // both when using property paths and switching off conversations
-                       if(session == null && remoting) {                               
+                       if(session == null && remoting) {
                                log.info("--> readElementByIndex, of " + getRole() + " with key " + getKey());
-                               read();                         
-                               
+                               read();
+
                        } else {
                                class ExtraLazyElementByIndexReader implements LazyInitializationWork {
                                        private boolean isExtraLazy;
@@ -510,7 +513,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * After flushing, re-init snapshot state.
         */
-       public void setSnapshot(Serializable key, String role, Serializable snapshot) {
+       @Override
+    public void setSnapshot(Serializable key, String role, Serializable snapshot) {
                this.key = key;
                this.role = role;
                this.storedSnapshot = snapshot;
@@ -520,7 +524,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         * After flushing, clear any "queued" additions, since the
         * database state is now synchronized with the memory state.
         */
-       public void postAction() {
+       @Override
+    public void postAction() {
                operationQueue = null;
                cachedSize = -1;
                clearDirty();
@@ -540,14 +545,16 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * return the user-visible collection (or array) instance
         */
-       public Object getValue() {
+       @Override
+    public Object getValue() {
                return this;
        }
 
        /**
         * Called just before reading any rows from the JDBC result set
         */
-       public void beginRead() {
+       @Override
+    public void beginRead() {
                // override on some subclasses
                initializing = true;
        }
@@ -555,12 +562,14 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * Called after reading all rows from the JDBC result set
         */
-       public boolean endRead() {
+       @Override
+    public boolean endRead() {
                //override on some subclasses
                return afterInitialize();
        }
 
-       public boolean afterInitialize() {
+       @Override
+    public boolean afterInitialize() {
                setInitialized();
                //do this bit after setting initialized to true or it will recurse
                if ( operationQueue != null ) {
@@ -583,26 +592,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<Object>() {
-                                       @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<Object>() {
+                           @Override
+                           public Object doWork() {
+                               session.initializeCollection( AbstractPersistentCollection.this, writing );
+                               return null;
+                           }
+                       }
+                       );
+           }
        }
 
        private void throwLazyInitializationExceptionIfNotConnected() {
@@ -635,7 +643,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         * Could the application possibly have a direct reference to
         * the underlying collection implementation?
         */
-       public boolean isDirectlyAccessible() {
+       @Override
+    public boolean isDirectlyAccessible() {
                return directlyAccessible;
        }
 
@@ -644,7 +653,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         *
         * @return true if this was currently associated with the given session
         */
-       public final boolean unsetSession(SessionImplementor currentSession) {
+       @Override
+    public final boolean unsetSession(SessionImplementor currentSession) {
                prepareForPossibleSpecialSpecjInitialization();
                if ( currentSession == this.session ) {
                        this.session = null;
@@ -679,7 +689,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         * @throws HibernateException if the collection was already associated
         * with another open session
         */
-       public final boolean setCurrentSession(SessionImplementor session) throws HibernateException {
+       @Override
+    public final boolean setCurrentSession(SessionImplementor session) throws HibernateException {
                if ( session == this.session ) {
                        return false;
                }
@@ -711,7 +722,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * Do we need to completely recreate this collection when it changes?
         */
-       public boolean needsRecreate(CollectionPersister persister) {
+       @Override
+    public boolean needsRecreate(CollectionPersister persister) {
                return false;
        }
 
@@ -719,7 +731,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         * To be called internally by the session, forcing
         * immediate initialization.
         */
-       public final void forceInitialization() throws HibernateException {
+       @Override
+    public final void forceInitialization() throws HibernateException {
                if ( !initialized ) {
                        if ( initializing ) {
                                throw new AssertionFailure( "force initialize loading collection" );
@@ -746,38 +759,45 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * Is this instance initialized?
         */
-       public final boolean wasInitialized() {
+       @Override
+    public final boolean wasInitialized() {
                return initialized;
        }
 
-       public boolean isRowUpdatePossible() {
+       @Override
+    public boolean isRowUpdatePossible() {
                return true;
        }
 
        /**
         * Does this instance have any "queued" additions?
         */
-       public final boolean hasQueuedOperations() {
+       @Override
+    public final boolean hasQueuedOperations() {
                return operationQueue != null;
        }
 
        /**
         * Iterate the "queued" additions
         */
-       public final Iterator queuedAdditionIterator() {
+       @Override
+    public final Iterator queuedAdditionIterator() {
                if ( hasQueuedOperations() ) {
                        return new Iterator() {
                                int i = 0;
 
-                               public Object next() {
+                               @Override
+                public Object next() {
                                        return operationQueue.get( i++ ).getAddedInstance();
                                }
 
-                               public boolean hasNext() {
+                               @Override
+                public boolean hasNext() {
                                        return i < operationQueue.size();
                                }
 
-                               public void remove() {
+                               @Override
+                public void remove() {
                                        throw new UnsupportedOperationException();
                                }
                        };
@@ -790,7 +810,8 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
        /**
         * Iterate the "queued" additions
         */
-       @SuppressWarnings({"unchecked"})
+       @Override
+    @SuppressWarnings({"unchecked"})
        public final Collection getQueuedOrphans(String entityName) {
                if ( hasQueuedOperations() ) {
                        Collection additions = new ArrayList( operationQueue.size() );
@@ -810,19 +831,22 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
         * Called before inserting rows, to ensure that any surrogate keys
         * are fully generated
         */
-       public void preInsert(CollectionPersister persister) throws HibernateException {
+       @Override
+    public void preInsert(CollectionPersister persister) throws HibernateException {
        }
 
        /**
         * Called after inserting a row, to fetch the natively generated id
         */
-       public void afterRowInsert(CollectionPersister persister, Object entry, int i) throws HibernateException {
+       @Override
+    public void afterRowInsert(CollectionPersister persister, Object entry, int i) throws HibernateException {
        }
 
        /**
         * get all "orphaned" elements
         */
-       public abstract Collection getOrphans(Serializable snapshot, String entityName) throws HibernateException;
+       @Override
+    public abstract Collection getOrphans(Serializable snapshot, String entityName) throws HibernateException;
 
        /**
         * Get the current session
@@ -839,15 +863,18 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        this.itr = itr;
                }
 
-               public boolean hasNext() {
+               @Override
+        public boolean hasNext() {
                        return itr.hasNext();
                }
 
-               public Object next() {
+               @Override
+        public Object next() {
                        return itr.next();
                }
 
-               public void remove() {
+               @Override
+        public void remove() {
                        write();
                        itr.remove();
                }
@@ -861,42 +888,51 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        this.itr = itr;
                }
 
-               @SuppressWarnings({"unchecked"})
+               @Override
+        @SuppressWarnings({"unchecked"})
                public void add(Object o) {
                        write();
                        itr.add( o );
                }
 
-               public boolean hasNext() {
+               @Override
+        public boolean hasNext() {
                        return itr.hasNext();
                }
 
-               public boolean hasPrevious() {
+               @Override
+        public boolean hasPrevious() {
                        return itr.hasPrevious();
                }
 
-               public Object next() {
+               @Override
+        public Object next() {
                        return itr.next();
                }
 
-               public int nextIndex() {
+               @Override
+        public int nextIndex() {
                        return itr.nextIndex();
                }
 
-               public Object previous() {
+               @Override
+        public Object previous() {
                        return itr.previous();
                }
 
-               public int previousIndex() {
+               @Override
+        public int previousIndex() {
                        return itr.previousIndex();
                }
 
-               public void remove() {
+               @Override
+        public void remove() {
                        write();
                        itr.remove();
                }
 
-               @SuppressWarnings({"unchecked"})
+               @Override
+        @SuppressWarnings({"unchecked"})
                public void set(Object o) {
                        write();
                        itr.set( o );
@@ -911,63 +947,76 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                        this.set = set;
                }
 
-               @SuppressWarnings({"unchecked"})
+               @Override
+        @SuppressWarnings({"unchecked"})
                public boolean add(Object o) {
                        write();
                        return set.add( o );
                }
 
-               @SuppressWarnings({"unchecked"})
+               @Override
+        @SuppressWarnings({"unchecked"})
                public boolean addAll(Collection c) {
                        write();
                        return set.addAll( c );
                }
 
-               public void clear() {
+               @Override
+        public void clear() {
                        write();
                        set.clear();
                }
 
-               public boolean contains(Object o) {
+               @Override
+        public boolean contains(Object o) {
                        return set.contains( o );
                }
 
-               public boolean containsAll(Collection c) {
+               @Override
+        public boolean containsAll(Collection c) {
                        return set.containsAll( c );
                }
 
-               public boolean isEmpty() {
+               @Override
+        public boolean isEmpty() {
                        return set.isEmpty();
                }
 
-               public Iterator iterator() {
+               @Override
+        public Iterator iterator() {
                        return new IteratorProxy( set.iterator() );
                }
 
-               public boolean remove(Object o) {
+               @Override
+        public boolean remove(Object o) {
                        write();
                        return set.remove( o );
                }
 
-               public boolean removeAll(Collection c) {
+               @Override
+        public boolean removeAll(Collection c) {
                        write();
                        return set.removeAll( c );
                }
 
-               public boolean retainAll(Collection c) {
+               @Override
+        public boolean retainAll(Collection c) {
                        write();
                        return set.retainAll( c );
                }
 
-               public int size() {
+               @Override
+        public int size() {
                        return set.size();
                }
 
-               public Object[] toArray() {
+               @Override
+        public Object[] toArray() {
                        return set.toArray();
                }
 
-               @SuppressWarnings({"unchecked"})
+               @Override
+        @SuppressWarnings({"unchecked"})
                public Object[] toArray(Object[] array) {
                        return set.toArray( array );
                }
@@ -1207,163 +1256,77 @@ public abstract class AbstractPersistentCollection implements Serializable, Pers
                }
        }
 
-       public Object getIdentifier(Object entry, int i) {
+       @Override
+    public Object getIdentifier(Object entry, int i) {
                throw new UnsupportedOperationException();
        }
 
-       public Object getOwner() {
+       @Override
+    public Object getOwner() {
                return owner;
        }
 
-       public void setOwner(Object owner) {
+       @Override
+    public void setOwner(Object owner) {
                this.owner = owner;
        }
 
        /** ------ Below is section of code which makes remote service calls ----- */
-       // The affected methods are : 
+       // The affected methods are :
        // initialize(final boolean writing)
        // readSize()
        // readIndexExistence(final Object index)
        // readElementExistence(final Object element)
-       // readElementByIndex(final Object index) 
-       
-       private static ICdmApplicationConfiguration configuration;
+       // readElementByIndex(final Object index)
+
+       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;
-               }
        }
-       
-       
+
+
        private void remoteInitialize() {
-               
-               if (getOwner() != null && !initialized) {                       
-                       
+
+               if (getOwner() != null && !initialized) {
+
                        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() + " , key : " + getKey() + " , field : " + fieldName);
                                Object owner = getOwner();
-                               
+
                                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); 
+
+                               Object obj = ProxyUtils.deproxy(cachedCommonService.initializeCollection(this));
                                afterInitialize();
 
                                Class<?> clazz = getClass();
-                               if (clazz != null) {    
-                                       CollectionField cf = getCollectionField(col);
-                                       Field field = clazz.getDeclaredField(cf.getFieldName());
+                               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, cf.getCollection());                           
-                               }               
+                                       field.set(this, obj);
+                                       ProxyUtils.setRoleValueInOwner(owner, role, obj);
+
+                               }
                        } catch (Exception ex) {
-                               log.warn(ex.getMessage());
-                       }                       
-               }
-       }
-       
-       
-       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");
+                               throw new CdmEagerLoadingException(ex);
                        }
                }
-               return null;
-       }
-       
-       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";
-                       }
-               }
-               return null;
-       }
-       
-       private class CollectionField {
-               private Object col;
-               private 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;
-       }
-       
-       //FIXME:Remoting These methods may no longer be required since we are 
-       //               initialising collections as default behaviour
-       private int remoteSize() {
-               int size = configuration.getCommonService().size(this);
-               log.debug("--> Remote Lazy Initializing size of " + getRole() + " to " + size);
-               if(size == -1) {
-                       throw new HibernateException("size of " + getClass() + " could not be retrieved from remote service");
-               }
-               return size;
-       }
-       
-       private Object remoteReadElementByIndex(int index) {
-               Object element = configuration.getCommonService().get(this,index);
-               log.debug("--> Remote Lazy Initializing element from " + getRole() + " at index " + index);
-               return element;
-       }
-       
-       private boolean remoteReadElementExistence(Object element) {
-               return configuration.getCommonService().contains(this,element);
-       }
-       
-       private boolean remoteReadIndexExistence(Object index) {
-               return false;
        }
+
+
+
 }
 
index 4d2db1551f9dc872e5a57a94573326f1870cb469..ecb9959cbcadb7c77aa575cd82b66a723cd0f743 100644 (file)
@@ -24,7 +24,6 @@
 package org.hibernate.proxy;
 
 import java.io.Serializable;
-import java.util.Set;
 
 import javax.naming.NamingException;
 
@@ -33,21 +32,16 @@ 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.service.ICachedCommonService;
 
 /**
  * Convenience base class for lazy initialization handlers.  Centralizes the basic plumbing of doing lazy
@@ -56,8 +50,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 +199,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 +414,43 @@ 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<? extends CdmBase>) 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);
                        setImplementation(cdmBase);
-                       
+
                }
        }
-       
+
        public static boolean isInitialized(AbstractLazyInitializer obj) {
                return obj.initialized;
        }
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/cdmlib-ehcache.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/cdmlib-ehcache.xml
new file mode 100644 (file)
index 0000000..36e1fe0
--- /dev/null
@@ -0,0 +1,7 @@
+<ehcache name="cdmlibModelCacheManager">
+       <diskStore path="ehcache.disk.store.dir/cdmlib" />
+       <cache name="cdmModelGetMethodsCache" maxElementsInMemory="1" maxElementsOnDisk="0" eternal="true"
+               overflowToDisk="true" diskPersistent="true" memoryStoreEvictionPolicy="LRU" statistics="true">
+        <sizeOfPolicy maxDepth="1000" maxDepthExceededBehavior="abort"/>         
+       </cache>
+</ehcache>
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/.svnignore b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/.svnignore
new file mode 100644 (file)
index 0000000..a09ae97
--- /dev/null
@@ -0,0 +1 @@
+cdmlib-remote-webapp.war
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war
new file mode 100644 (file)
index 0000000..5257c8d
Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/cdmlib-remote-webapp.war differ
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar
new file mode 100644 (file)
index 0000000..91c88d6
Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/jetty-runner-9.2.3.v20140905.jar differ
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar
new file mode 100644 (file)
index 0000000..ef2faaf
Binary files /dev/null and b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/etc/jetty/start-9.2.3.v20140905.jar differ
index e3c0f9fd8ef75e7c6a175a3d9c1a5fd0d74c6dba..4efa1d39acb4a356dc567fe05f622ce383c4734d 100644 (file)
 <?xml version="1.0" encoding="UTF-8"?>\r
 <beans xmlns="http://www.springframework.org/schema/beans"\r
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-       xmlns:context="http://www.springframework.org/schema/context"\r
-       xmlns:tx="http://www.springframework.org/schema/tx"\r
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"\r
+  xmlns:tx="http://www.springframework.org/schema/tx"\r
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd\r
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd\r
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">\r
 \r
-       \r
-   <bean id="agentService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IAgentService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="annotationService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IAnnotationService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="auditeventService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IAuditEventService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="classificationService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IClassificationService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="collectionService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ICollectionService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="commonService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ICommonService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="descriptionService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IDescriptionService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="editGeoService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.ext.geo.IEditGeoService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="featureNodeService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IFeatureNodeService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="featureTreeService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IFeatureTreeService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="groupService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IGroupService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="identificationKeyService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IIdentificationKeyService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="locationService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ILocationService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="markerService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IMarkerService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="mediaService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IMediaService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="nameService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.INameService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="occurrenceService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IOccurrenceService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="polytomousKeyNodeService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="polytomousKeyService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="referenceService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IReferenceService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-<!-- \r
-   <bean id="serviceService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/service.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IService</value>\r
-               </property>\r
-       </bean>\r
- -->\r
\r
-   <bean id="taxonNodeService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ITaxonNodeService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="taxonService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ITaxonService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="termService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.ITermService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="userService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/user.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IUserService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="vocabularyService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IVocabularyService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-   <bean id="workingSetService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IWorkingSetService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="grantedAuthorityService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IGrantedAuthorityService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="databaseService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/database.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.IDatabaseService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="lsidAuthorityService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="lsidMetadataService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-   <bean id="lsiDataService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.lsid.LSIDDataService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-\r
-       <bean id="providerManager"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/authenticationManager.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>org.springframework.security.authentication.AuthenticationManager</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-       <bean id="primerService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.molecular.IPrimerService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-       <bean id="amplificationService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.molecular.IAmplificationService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
-       \r
-       <bean id="sequenceService"\r
-               class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
-               <property name="serviceUrl">\r
-                       <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service</value>\r
-               </property>\r
-               <property name="serviceInterface">\r
-                       <value>eu.etaxonomy.cdm.api.service.molecular.ISequenceService</value>\r
-               </property>\r
-               <property name="httpInvokerRequestExecutor">\r
-                       <bean class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
-               </property>\r
-       </bean>\r
+\r
+  <bean id="agentService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/agent.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IAgentService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="annotationService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/annotation.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IAnnotationService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="auditeventService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/auditevent.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IAuditEventService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="classificationService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/classification.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IClassificationService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="collectionService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/collection.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ICollectionService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="commonService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/common.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ICommonService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="descriptionService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/description.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IDescriptionService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="editGeoService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/editgeo.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.ext.geo.IEditGeoService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="featureNodeService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featurenode.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IFeatureNodeService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="featureTreeService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/featuretree.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IFeatureTreeService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="groupService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/group.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IGroupService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="identificationKeyService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/identificationkey.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IIdentificationKeyService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="locationService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/location.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ILocationService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="markerService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/marker.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IMarkerService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="mediaService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/media.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IMediaService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="nameService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/name.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.INameService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="occurrenceService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/occurrence.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IOccurrenceService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="polytomousKeyNodeService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskeynode.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="polytomousKeyService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/polytomouskey.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IPolytomousKeyService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="referenceService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/reference.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IReferenceService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <!-- <bean id="serviceService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> \r
+    <property name="serviceUrl"> <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/service.service</value> \r
+    </property> <property name="serviceInterface"> <value>eu.etaxonomy.cdm.api.service.IService</value> \r
+    </property> </bean> -->\r
+\r
+  <bean id="taxonNodeService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxonnode.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ITaxonNodeService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="taxonService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/taxon.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ITaxonService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="termService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/term.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.ITermService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean class="eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="userService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting-public/user.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IUserService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="vocabularyService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/vocabulary.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IVocabularyService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="workingSetService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/workingset.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IWorkingSetService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="grantedAuthorityService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/grantedauthority.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IGrantedAuthorityService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="databaseService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting-public/database.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IDatabaseService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="lsidAuthorityService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidauthoruty.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDAuthorityService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="lsidMetadataService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsidmetadata.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDMetadataService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="lsiDataService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/lsiddata.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.lsid.LSIDDataService</value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="providerManager"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/authenticationManager.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>org.springframework.security.authentication.AuthenticationManager\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="primerService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/primer.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.molecular.IPrimerService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="amplificationService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/amplification.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.molecular.IAmplificationService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="sequenceService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/sequence.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.molecular.ISequenceService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="entityValidationResultService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityvalidationresult.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IEntityValidationResultService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
+\r
+  <bean id="entityConstraintViolationService"\r
+    class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">\r
+    <property name="serviceUrl">\r
+      <value>http://${remoteServer}:${remotePort}/${remoteContext}/remoting/entityconstraintviolation.service</value>\r
+    </property>\r
+    <property name="serviceInterface">\r
+      <value>eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService\r
+      </value>\r
+    </property>\r
+    <property name="httpInvokerRequestExecutor">\r
+      <bean\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
+    </property>\r
+  </bean>\r
 \r
 \r
 \r
index 524d83c4ddd1ff18324aa3de9035021bdb620b29..4a4f2ec46cd1e84dca584ab42c16e44d1a5e6a8f 100644 (file)
@@ -27,5 +27,6 @@
     <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.remote\.controller\..*Portal.*" /> 
   </context:component-scan>
   
+  <context:component-scan base-package="eu/etaxonomy/taxeditor/remoting/session/mock" />
 
 </beans>
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 (file)
index 0000000..9b9aea0
--- /dev/null
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!DOCTYPE hibernate-configuration PUBLIC\r
+ "-//Hibernate/Hibernate Configuration DTD 3.0//EN"\r
+ "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">\r
+\r
+<hibernate-configuration>\r
+    <session-factory>\r
+\r
+      <property name="connection.release_mode">after_transaction</property>\r
+         <property name="show_sql">true</property>\r
+               <property name="format_sql">true</property>\r
+               <property name="use_sql_comments">true</property>\r
+\r
+      <!-- Connection Pooling -->\r
+<!--       <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property> -->\r
+      <property name="hibernate.connection.provider_class">org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl</property>\r
+           <!--\r
+          Configuring the C3P0ConnectionProvider\r
+          ========================================\r
+          see http://www.mchange.com/projects/c3p0/index.html#hibernate-specific\r
+          and also org.springframework.orm.hibernate3.AbstractSessionFactoryBean.setDataSource(DataSource dataSource)\r
+\r
+          IMPORTANT:\r
+          Because of the constraint (1) the org.hibernate.connection.C3P0ConnectionProvider are not be used\r
+          for the Cdm Library because it requires the dataSource bean in some cases.\r
+\r
+          (1)\r
+          Do NOT specify the dataSource in the sessionFactory for example in the\r
+          org.springframework.orm.hibernate3.LocalSessionFactoryBean\r
+          !!!==> If *dataSource* is set, this will override corresponding settings in Hibernate properties.!!!\r
+                         If this is set, the Hibernate settings should not define a connection provider to\r
+                     avoid meaningless double configuration.\r
+          (2)\r
+          Hibernate uses the hibernate.c3p0.max_size property to determine if c3p0\r
+          is beeing used.  Therefore the max_size property MUST be set. - maybe not need in hibernate 3.4 +\r
+\r
+          (3) If you are using Hibernate's C3P0ConnectionProvider you must set the following properties\r
+          in your hibernate configuration, using hibernate-specific configuration keys.\r
+          All other properties must be defined as usual in a c3p0.properties file.\r
+          This is confusing, and will hopefully be simplified some time in the future, but for now...\r
+\r
+            hibernate.c3p0.acquire_increment\r
+                       hibernate.c3p0.idle_test_period\r
+                       hibernate.c3p0.timeout\r
+                       hibernate.c3p0.max_size\r
+                       hibernate.c3p0.max_statements\r
+                       hibernate.c3p0.min_size\r
+                       hibernate.c3p0.validate\r
+      -->\r
+      <mapping package="eu.etaxonomy.cdm.model.common"/>\r
+      <!-- Annotation Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.Address"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.AgentBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.Contact"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.Institution"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.InstitutionalMembership"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.Person"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.Team"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.agent.TeamOrPersonBase"/>\r
+      <!-- Common Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Annotation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.AnnotationType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Credit"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.DefinedTerm"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.DefinedTermBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Extension"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.ExtensionType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.IdentifiableSource"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Identifier"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Group"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Language"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.LanguageString"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.LSID"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.LSIDAuthority"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Marker"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.MarkerType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.OrderedTerm"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.OrderedTermBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.OrderedTermVocabulary"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.OriginalSourceBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.RelationshipTermBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.Representation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.TermVocabulary"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.common.User"/>\r
+      <!-- Description Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.description.CategoricalData"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.CommonTaxonName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.DescriptionBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.DescriptionElementBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.DescriptionElementSource"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.Distribution"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.Feature"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.FeatureNode"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.FeatureTree"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.KeyStatement"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.MediaKey"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.IndividualsAssociation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.MeasurementUnit"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.MultiAccessKey"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.PolytomousKey"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.PolytomousKeyNode"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.QuantitativeData"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.SpecimenDescription"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.State"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.StateData"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.StatisticalMeasure"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.TaxonDescription"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.TaxonInteraction"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.TaxonNameDescription"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.TextData"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.TextFormat"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.description.WorkingSet"/>\r
+      <!-- Location Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.location.NamedArea"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.location.NamedAreaLevel"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.location.NamedAreaType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.location.ReferenceSystem"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.location.Point"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.location.Country"/>\r
+      <!-- Media Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.media.AudioFile"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.ImageFile"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.Media"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.MediaRepresentation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.MediaRepresentationPart"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.MovieFile"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.Rights"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.media.RightsType"/>\r
+      <!-- Meta Data Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.metadata.CdmMetaData"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.metadata.CdmPreference"/>\r
+      <!-- Molecular Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.PhylogeneticTree"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.DnaQuality"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.DnaSample"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.Amplification"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.AmplificationResult"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.Primer"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.Sequence"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.SequenceString"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.SingleRead"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.SingleReadAlignment"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.molecular.Cloning"/>\r
+      <!-- Name Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.name.BacterialName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.BotanicalName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.CultivarPlantName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.HomotypicalGroup"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.HybridRelationship"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.HybridRelationshipType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NameRelationship"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NameRelationshipType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NameTypeDesignation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NomenclaturalCode"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NomenclaturalStatus"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NomenclaturalStatusType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.NonViralName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.Rank"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.TaxonNameBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.TypeDesignationBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.ViralName"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.name.ZoologicalName"/>\r
+      <!-- Occurrence Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.Collection"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.DerivationEvent"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.DerivationEventType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.DerivedUnit"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.MediaSpecimen"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.DeterminationEvent"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.FieldUnit"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.GatheringEvent"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.PreservationMethod"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase"/>\r
+      <!-- Reference Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.reference.Reference"/>\r
+\r
+      <!-- Taxon Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.Synonym"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.SynonymRelationship"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.Taxon"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonBase"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonNode"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.Classification"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonRelationship"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType"/>\r
+      \r
+      <!-- Validation Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.validation.EntityValidationResult"/>\r
+      <mapping class="eu.etaxonomy.cdm.model.validation.EntityConstraintViolation"/>\r
+      \r
+      <!-- View Package -->\r
+      <mapping class="eu.etaxonomy.cdm.model.view.AuditEvent"/>\r
+      \r
+      <!-- for filling caches -->\r
+      <!-- since hibernate 4 listeners are not handled via hibernate.cfg.xml anymore -->\r
+      <!--  http://stackoverflow.com/questions/8616146/eventlisteners-using-hibernate-4-0-with-spring-3-1-0-release\r
+            https://community.jboss.org/wiki/HibernateCoreMigrationGuide40 -->\r
+\r
+    </session-factory>\r
+</hibernate-configuration>
\ No newline at end of file
index e67e9b4534c51d886c6815d8e473d40bdebce036..2556cbdc09f1812a5d89c64c7efc855f4343c3cb 100644 (file)
@@ -1,39 +1,47 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <beans xmlns="http://www.springframework.org/schema/beans"\r
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \r
        xmlns:context="http://www.springframework.org/schema/context"\r
-       xmlns:tx="http://www.springframework.org/schema/tx"\r
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
-    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">\r
-       \r
-       \r
-    <!--  <bean id="remoteTermInitializer" class="eu.etaxonomy.cdm.remote.service.RemoteTermInitializer"/>-->\r
-        \r
-       <context:annotation-config/>\r
-    \r
-    <import resource="classpath:/eu/etaxonomy/cdm/httpInvokerServiceClients.xml"/>\r
-    \r
-    <bean id="cdmApplicationRemoteConfiguration" class="eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration"/>    \r
-    \r
-       <import resource="classpath:/eu/etaxonomy/cdm/remoting_services_security.xml"/>         \r
-       \r
-       <bean id="cdmTermCacher" class="eu.etaxonomy.cdm.api.cache.CdmTermCacher"/>\r
-       \r
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+    http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-2.5.xsd">\r
+\r
+\r
+       <!-- <bean id="remoteTermInitializer" class="eu.etaxonomy.cdm.remote.service.RemoteTermInitializer"/> -->\r
+\r
+       <context:annotation-config />\r
+\r
+       <import resource="classpath:/eu/etaxonomy/cdm/httpInvokerServiceClients.xml" />\r
+\r
+       <context:component-scan base-package="eu/etaxonomy/taxeditor/session" />\r
+\r
+       <bean id="cdmApplicationRemoteConfiguration"\r
+               class="eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration" />\r
+\r
+       <import resource="classpath:/eu/etaxonomy/cdm/remoting_services_security.xml" />\r
+\r
+       <context:component-scan base-package="eu.etaxonomy.cdm.api.cache">\r
+               <!-- FIXME:Remoting Temp workaround to make remoting work -->\r
+               <context:exclude-filter type="regex"\r
+                       expression="eu\.etaxonomy\.cdm\.api\.cache\.CdmTermCacher" />\r
+       </context:component-scan>\r
+\r
+       <context:component-scan base-package="eu.etaxonomy.taxeditor.service"/>\r
+
        \r
-       <!-- EditGeoService was moved to ext. Therefore it will not be found by the default component scan.
-       We added it here because the Editor needs it. However, this is only a temporary solution.
-       In the future we want to pass in an application context with the editor. -->\r
+       <!-- EditGeoService was moved to ext. Therefore it will not be found by \r
+               the default component scan. We added it here because the Editor needs it. \r
+               However, this is only a temporary solution. In the future we want to pass \r
+               in an application context with the editor. -->\r
 \r
 \r
-       <!-- <bean id="conversationHolder" class="eu.etaxonomy.cdm.api.conversation.ConversationHolder" scope="prototype"/> -->\r
+       <!-- <bean id="conversationHolder" class="eu.etaxonomy.cdm.api.conversation.ConversationHolder" \r
+               scope="prototype"/> -->\r
 \r
        <!-- TODO move to io -->\r
-<!-- \r
-       <context:component-scan base-package="eu/etaxonomy/cdm/io">\r
-               <context:exclude-filter type="regex" expression="eu\.etaxonomy\.cdm\.io\.berlinModel.*" />\r
-       </context:component-scan>\r
- -->\r
+       <!-- <context:component-scan base-package="eu/etaxonomy/cdm/io"> <context:exclude-filter \r
+               type="regex" expression="eu\.etaxonomy\.cdm\.io\.berlinModel.*" /> </context:component-scan> -->\r
        <!-- enable the configuration of transactional behavior based on annotations -->\r
        <!-- <tx:annotation-driven transaction-manager="transactionManager"/> -->\r
 \r
diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/log4j.properties
new file mode 100644 (file)
index 0000000..6be7d0e
--- /dev/null
@@ -0,0 +1,28 @@
+#\r
+#\r
+# If you are having problems with logging you may debug Log4J initialization,\r
+# start the application with a system property log4j.configDebug set to "true".\r
+# E.g.:\r
+#\r
+#     java -Dlog4j.configDebug=true\r
+#\r
+\r
+log4j.rootLogger=WARN, stdout\r
+\r
+\r
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender\r
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout\r
+log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n\r
+\r
+##\r
+## NOTICE !!!!\r
+## no need to configure a FileAppender here\r
+## use eu.etaxonomy.cdm.remote.config.LoggingConfigurer instead\r
+##\r
+\r
+###\r
+# cdm\r
+###\r
+log4j.logger.eu.etaxonomy.cdm = INFO\r
+log4j.logger.eu.etaxonomy.taxeditor.remoting.source = INFO\r
+log4j.logger.eu.etaxonomy.taxeditor.remoting.cache = INFO\r
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 (file)
index f306cad..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:context="http://www.springframework.org/schema/context"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans 
-    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-    http://www.springframework.org/schema/context
-    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
-
-       <bean id="defaultRemoteSource">
-        <property name="server" value="127.0.0.1"/>
-        <property name="port" value="8080"/>
-        <property name="contextPath" value=""/>
-    </bean>        
-    
-    <bean id="incompleteRemoteSource">
-        <property name="server" value="127.0.0.1"/>
-        <property name="contextPath" value=""/>
-    </bean>      
-       
-</beans>
\ No newline at end of file
index b26b72184252c4ace4eae45d2ccbe03f684b2f6e..7d14232f8f4c44d6ca15b63dc4ee2a693b7479b8 100644 (file)
@@ -11,6 +11,7 @@ Export-Package: eu.etaxonomy.taxeditor.editor,
  eu.etaxonomy.taxeditor.editor.internal,
  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.descriptive,
diff --git a/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmEntitySessionInput.java b/eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/CdmEntitySessionInput.java
new file mode 100644 (file)
index 0000000..f55e1b3
--- /dev/null
@@ -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.editor;
+
+import eu.etaxonomy.cdm.api.service.IService;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author cmathew
+ * @date 5 Feb 2015
+ *
+ */
+public abstract class CdmEntitySessionInput implements ICdmEntitySessionEnabled {
+
+    private final ICdmEntitySession cdmEntitySession;
+
+    public CdmEntitySessionInput() {
+        cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+     */
+    @Override
+    public void update(CdmDataChangeMap changeEvents) {
+       // do nothing
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+       return cdmEntitySession;
+    }
+
+    public <T extends CdmBase> void update(IService<T> service, T cdmBase) {
+        cdmEntitySession.remoteUpdate(service, cdmBase);
+    }
+
+    public abstract  <T extends CdmBase> IService<T> getService();
+
+    public <T extends CdmBase> void update(T cdmBase) {
+        cdmEntitySession.remoteUpdate(getService(), cdmBase);
+    }
+
+
+    public abstract <T extends CdmBase> void update();
+}
index 94107c24aa62579a0771388f9ed03a5724d1d099..945380745a30ef73e717d6a39793532a8d68151f 100644 (file)
@@ -29,6 +29,7 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 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.internal.TaxeditorEditorPlugin;
 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
@@ -42,6 +43,8 @@ import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
 import eu.etaxonomy.taxeditor.model.IPartContentHasMedia;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 
 /**
  *
@@ -54,77 +57,82 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  * @version 1.0
  */
 public class MultiPageTaxonEditor extends FormEditor implements
-        IPartContentHasFactualData, IConversationEnabled, IPostOperationEnabled,
-               IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
-
-       /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
-       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;
-
-       /**
-        * <p>
-        * Constructor for MultiPageTaxonEditor.
-        * </p>
-        */
-       public MultiPageTaxonEditor() {
-               super();
-               undoContext = new UndoContext();
-       }
-
-       /** {@inheritDoc} */
-       @Override
-       public void 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);
+IPartContentHasFactualData, IConversationEnabled, ICdmEntitySessionEnabled, IPostOperationEnabled,
+IDirtyMarkable, IPartContentHasDetails, ISecuredEditor, IPartContentHasMedia {
+
+    /** Constant <code>ID="eu.etaxonomy.taxeditor.editor.taxon"{trunked}</code> */
+    public static final String ID = "eu.etaxonomy.taxeditor.editor.taxon";
+
+    private boolean dirty;
+
+    private ICdmEntitySession cdmEntitySession;
+    private ConversationHolder conversation;
+    private IDataChangeBehavior dataChangeBehavior;
+    private IUndoContext undoContext;
+
+    private TaxonEditorInput input;
+
+    /**
+     * <p>
+     * Constructor for MultiPageTaxonEditor.
+     * </p>
+     */
+    public MultiPageTaxonEditor() {
+        super();
+        undoContext = new UndoContext();
+
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void dispose() {
+        if(cdmEntitySession != null) {
+            cdmEntitySession.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);
+        cdmEntitySession.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) {
@@ -140,9 +148,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.update();
+            conversation.commit(true);
+            monitor.worked(1);
 
             this.setDirty(false);
             monitor.worked(1);
@@ -153,141 +163,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);
-       }
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.MultiPageEditorPart#isDirty()
-        */
-       /**
-        * <p>
-        * isDirty
-        * </p>
-        *
-        * @return a boolean.
-        */
-       @Override
+    }
+
+    private void disableEditor(boolean isOnError) {
+        for (IMultiPageTaxonEditorPage editorPage : getPages()) {
+            if(isOnError){
+                editorPage.setOnError();
+            }else {
+                editorPage.setDisabled();
+            }
+        }
+        cdmEntitySession.unregisterForDataStoreChanges(this);
+        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()
+     */
+    /**
+     * <p>
+     * isDirty
+     * </p>
+     *
+     * @return a boolean.
+     */
+    @Override
     public boolean isDirty() {
-               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
-        * <code>firePropertyChange(PROP_DIRTY)</code> to signal an edit has taken
-        * place before passing property change along to
-        * <code>super.handlePropertyChange(int propertyId)</code>.
-        */
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.ui.part.MultiPageEditorPart#handlePropertyChange(int)
-        */
-       @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
+     * <code>firePropertyChange(PROP_DIRTY)</code> to signal an edit has taken
+     * place before passing property change along to
+     * <code>super.handlePropertyChange(int propertyId)</code>.
+     */
+    /*
+     * (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 <code>MultiPageEditorPart.setPartName(String partName)</code> 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);
-       }
+        this.input = (TaxonEditorInput) input;
+        cdmEntitySession = this.input.getCdmEntitySession();
+
+        // 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 <code>MultiPageEditorPart.setPartName(String partName)</code> 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);
+    }
 
     /**
      * {@inheritDoc}
@@ -320,82 +332,85 @@ public class MultiPageTaxonEditor extends FormEditor implements
         changed(null);
     }
 
-       /**
-        * The accepted taxon that is the input for this editor
-        *
-        * @return the accepted taxon
-        */
-       public Taxon getTaxon() {
-               return input.getTaxon();
-       }
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
-        * ()
-        */
-       /**
-        * <p>
-        * getConversationHolder
-        * </p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
-        *         object.
-        */
-       @Override
+    /**
+     * The accepted taxon that is the input for this editor
+     *
+     * @return the accepted taxon
+     */
+    public Taxon getTaxon() {
+        return input.getTaxon();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
+     * ()
+     */
+    /**
+     * <p>
+     * getConversationHolder
+     * </p>
+     *
+     * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+     *         object.
+     */
+    @Override
     public ConversationHolder getConversationHolder() {
-               return conversation;
-       }
-
-       /**
-        * <p>
-        * setConversationHolder
-        * </p>
-        *
-        * @param conversation
-        *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
-        *            object.
-        */
-       public void setConversationHolder(ConversationHolder conversation) {
-               this.conversation = conversation;
-       }
-
-       /**
-        * <p>
-        * Getter for the field <code>undoContext</code>.
-        * </p>
-        *
-        * @return a {@link org.eclipse.core.commands.operations.IUndoContext}
-        *         object.
-        */
-       public IUndoContext getUndoContext() {
-               return undoContext;
-       }
-
-       /**
-        * <p>
-        * Setter for the field <code>undoContext</code>.
-        * </p>
-        *
-        * @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();
-               // pass focus to the active editor page
-               getActiveEditor().setFocus();
-       }
+        return conversation;
+    }
+
+    /**
+     * <p>
+     * setConversationHolder
+     * </p>
+     *
+     * @param conversation
+     *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
+     *            object.
+     */
+    public void setConversationHolder(ConversationHolder conversation) {
+        this.conversation = conversation;
+    }
+
+    /**
+     * <p>
+     * Getter for the field <code>undoContext</code>.
+     * </p>
+     *
+     * @return a {@link org.eclipse.core.commands.operations.IUndoContext}
+     *         object.
+     */
+    public IUndoContext getUndoContext() {
+        return undoContext;
+    }
+
+    /**
+     * <p>
+     * Setter for the field <code>undoContext</code>.
+     * </p>
+     *
+     * @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();
+        if(cdmEntitySession != null) {
+            cdmEntitySession.bind();
+        }
+        // pass focus to the active editor page
+        getActiveEditor().setFocus();
+    }
 
     /*
      * (non-Javadoc)
@@ -438,75 +453,75 @@ public class MultiPageTaxonEditor extends FormEditor implements
         return false;
     }
 
-       /**
-        * Returns an <code>IEditorPart</code> 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 <code>AbstractTaxonEditor</code>s registered with this
-        * <code>MultiPageTaxonEditor</code>.
-        *
-        * @return a {@link java.util.List} object.
-        */
-       public List<IMultiPageTaxonEditorPage> getPages() {
-               ArrayList<IMultiPageTaxonEditorPage> editors = new ArrayList<IMultiPageTaxonEditorPage>();
-               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);
-       }
-
-       /**
-        * <p>
-        * onComplete
-        * </p>
-        *
-        * @return a boolean.
-        */
-       @Override
+    /**
+     * Returns an <code>IEditorPart</code> 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 <code>AbstractTaxonEditor</code>s registered with this
+     * <code>MultiPageTaxonEditor</code>.
+     *
+     * @return a {@link java.util.List} object.
+     */
+    public List<IMultiPageTaxonEditorPage> getPages() {
+        ArrayList<IMultiPageTaxonEditorPage> editors = new ArrayList<IMultiPageTaxonEditorPage>();
+        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);
+    }
+
+    /**
+     * <p>
+     * onComplete
+     * </p>
+     *
+     * @return a boolean.
+     */
+    @Override
     public boolean onComplete() {
-               return false;
-       }
+        return false;
+    }
 
     /**
      * Reloads the data for this
@@ -536,17 +551,33 @@ public class MultiPageTaxonEditor extends FormEditor implements
         }
     }
 
-       @Override
-       public String toString() {
-               return String.format("%s[%s]", this.getClass().getSimpleName(), getEditorInput());
-       }
+    @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.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        return cdmEntitySession;
+    }
 
-       @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.session.ICdmEntitySessionEnabled#getRootEntities()
+     */
+    @Override
+    public List<TaxonNode> getRootEntities() {
+        return input.getRootEntities();
+    }
 }
index 3f79f3a00a4566070076ad876293795714767a58..16257e4a501a68ce513bac45dfbf109172e92e46 100644 (file)
@@ -1,15 +1,17 @@
 /**
-* 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.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
@@ -46,345 +48,372 @@ 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 final ITaxonNodeService service;
+
+    private enum CdmType {
+        TAXON_NODE,
+        TAXON_BASE,
+        PARENT_TAXON_NODE
+    }
 
+    private TaxonEditorInput(UUID uuid, CdmType type) {
+        this.conversation = CdmStore.createConversation();
+        service = CdmStore.getService(ITaxonNodeService.class);
+        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;
+    }
 
-       /**
-        * <p>NewInstance</p>
-        *
-        * @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;
-               }
-       }
 
     /**
+     * <p>NewInstance</p>
      *
-     * @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 = getCdmEntitySession().remoteLoad(service,taxonNodeUuid, null);
 
-       TaxonNode taxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNodeUuid, null);
+        if(taxonNode == null){
+            MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase.");
+        }
+        init(taxonNode);
 
-               if(taxonNode == null){
-                       MessagingUtils.warningDialog("Not yet implemented", TaxonEditorInput.class, "Selected element is not type TaxonBase.");
-                       return null;
-               }
+    }
 
-       return new TaxonEditorInput(taxonNode, conversation);
+    private void initForTaxonBase(UUID taxonBaseUuid) {
+
+        TaxonBase taxonBase = getCdmEntitySession().remoteLoad(CdmStore.getService(ITaxonService.class),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 Mispplied Name ");
+
+                    Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
+                    Set<TaxonRelationship> 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<Taxon> taxa = synonym.getAcceptedTaxa();
+                setInputForMultipleTaxa(conversation, taxa);
+            }
+        }
     }
 
+
     /**
-     * <p>NewInstanceFromTaxonBase</p>
+     * <p>NewEmptyInstance</p>
      *
-     * @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 Mispplied Name ");
-
-                               Set<Taxon> acceptedTaxa = new HashSet<Taxon>();
-                               Set<TaxonRelationship> 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<Taxon> 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 = getCdmEntitySession().remoteSave(CdmStore.getService(ITaxonNodeService.class),newTaxonNode);
+
+        initForTaxonNode(newTaxonNodeUuid);
     }
 
-       private static TaxonEditorInput getInputForMultipleNodes(ConversationHolder conversation, Set<TaxonNode> 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<TaxonNode> 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<Taxon> taxa){
-       if(taxa.size() == 1){
-               Taxon taxon = taxa.iterator().next();
-               Set<TaxonNode> nodes = taxon.getTaxonNodes();
-               return getInputForMultipleNodes(conversation, nodes);
-       }else if(taxa.size() > 1){
-               Set<TaxonNode> taxonNodes = new HashSet<TaxonNode>();
-                       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<Taxon> taxa){
+        if(taxa.size() == 1){
+            Taxon taxon = taxa.iterator().next();
+            Set<TaxonNode> nodes = taxon.getTaxonNodes();
+            setInputForMultipleNodes(conversation, nodes);
+        }else if(taxa.size() > 1){
+            Set<TaxonNode> taxonNodes = new HashSet<TaxonNode>();
+            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.");
+        }
     }
 
     /**
-     * <p>NewEmptyInstance</p>
+     * <p>NewInstance</p>
      *
-     * @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);
+    }
+
+    /**
+     * <p>NewInstanceFromTaxonBase</p>
+     *
+     * @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);
+    }
 
-               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);
 
-               return new TaxonEditorInput(newTaxonNode, conversation);
+
+    /**
+     * <p>NewEmptyInstance</p>
+     *
+     * @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()
-        */
-       /**
-        * <p>exists</p>
-        *
-        * @return a boolean.
-        */
-       @Override
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IEditorInput#exists()
+     */
+    /**
+     * <p>exists</p>
+     *
+     * @return a boolean.
+     */
+    @Override
     public boolean exists() {
-               return taxonNode != null;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
-        */
-       /**
-        * <p>getImageDescriptor</p>
-        *
-        * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object.
-        */
-       @Override
+        return taxonNode != null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+     */
+    /**
+     * <p>getImageDescriptor</p>
+     *
+     * @return a {@link org.eclipse.jface.resource.ImageDescriptor} object.
+     */
+    @Override
     public ImageDescriptor getImageDescriptor() {
-               return null;
-       }
-
-       /* (non-Javadoc)
-        * @see org.eclipse.ui.IEditorInput#getName()
-        */
-       /**
-        * <p>getName</p>
-        *
-        * @return a {@link java.lang.String} object.
-        */
-       @Override
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IEditorInput#getName()
+     */
+    /**
+     * <p>getName</p>
+     *
+     * @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()
-        */
-       /**
-        * <p>getPersistable</p>
-        *
-        * @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()
+     */
+    /**
+     * <p>getPersistable</p>
+     *
+     * @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()
-        */
-       /**
-        * <p>getToolTipText</p>
-        *
-        * @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()
+     */
+    /**
+     * <p>getToolTipText</p>
+     *
+     * @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;
-       }
-
-       /**
-        * <p>getTaxon</p>
-        *
-        * @return the taxon
-        */
-       public Taxon getTaxon(){
-               return taxonNode.getTaxon();
-       }
-
-       /**
-        * <p>Getter for the field <code>taxonNode</code>.</p>
-        *
-        * @return the taxonNode
-        */
-       public TaxonNode getTaxonNode() {
-               return taxonNode;
-       }
-
-       /*
-        * (non-Javadoc)
-        * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
-        */
-       /**
-        * <p>getConversationHolder</p>
-        *
-        * @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;
+    }
+
+    /**
+     * <p>getTaxon</p>
+     *
+     * @return the taxon
+     */
+    public Taxon getTaxon(){
+        Taxon taxon = CdmBase.deproxy(taxonNode.getTaxon(), Taxon.class);
+        return taxon;
+    }
+
+    /**
+     * <p>Getter for the field <code>taxonNode</code>.</p>
+     *
+     * @return the taxonNode
+     */
+    public TaxonNode getTaxonNode() {
+        return taxonNode;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
+     */
+    /**
+     * <p>getConversationHolder</p>
+     *
+     * @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()
-        */
-       /**
-        * <p>getFactoryId</p>
-        *
-        * @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()
+     */
+    /**
+     * <p>getFactoryId</p>
+     *
+     * @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 +422,46 @@ 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;
-       }
-
-       /**
-        * <p>Getter for the field <code>initiallySelectedTaxonBase</code>.</p>
-        *
-        * @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;
+    }
+
+    /**
+     * <p>Getter for the field <code>initiallySelectedTaxonBase</code>.</p>
+     *
+     * @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.editor.CdmEntitySessionInput#getService()
+     */
+    @Override
+    public ITaxonNodeService getService() {
+        return service;
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#getRootEntities()
+     */
+    @Override
+    public  List<TaxonNode> getRootEntities() {
+        return Arrays.asList(taxonNode);
+    }
+
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.editor.CdmEntitySessionInput#update()
+     */
+    @Override
+    public <T extends CdmBase> void update() {
+        taxonNode = getCdmEntitySession().remoteUpdate(service, taxonNode);
+    }
 }
index 5fc0b2b9a7398afbfecf0dc27e8f399364f39646..4eff25498ac629ef7b47a4b3fb3851f0c533b5e5 100644 (file)
@@ -17,14 +17,17 @@ import org.eclipse.ui.forms.editor.FormEditor;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
+import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
@@ -54,6 +57,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
                        monitor.beginTask("Saving Editor", 1);
                        getConversationHolder().bind();
                        getConversationHolder().commit(true);
+                       CdmStore.getService(IPolytomousKeyService.class).merge(((PolytomousKeyEditorInput)getEditorInput()).getKey());
                        setDirty(false);
                        monitor.worked(1);
                } finally {
@@ -180,6 +184,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
        public void dispose() {
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
+               ((PolytomousKeyEditorInput)getEditorInput()).dispose();
                super.dispose();
        }
 
@@ -217,4 +222,7 @@ public class KeyEditor extends FormEditor implements IConversationEnabled,
                PolytomousKey key = (PolytomousKey) input.getKey();
                setPartName(key.getTitleCache());
        }
+       
+       
+
 }
index 73d84ec90dedf96b50cbcba5d7f81de54e56c36f..68428b6f5d8ffc5e12913b05c6e83273f52d5621 100644 (file)
@@ -1,48 +1,55 @@
 /**
- * 
+ *
  */
 package eu.etaxonomy.taxeditor.editor.key.polytomous;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.UUID;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
 import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.taxeditor.editor.key.AbstractIdentificationEditorInput;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
  *
  */
-public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput<PolytomousKey> {
+public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput<PolytomousKey> implements ICdmEntitySessionEnabled {
 
-       private PolytomousKey key;
+       private final PolytomousKey key;
+       private final ICdmEntitySession cdmEntitySession;
 
        protected PolytomousKeyEditorInput(ConversationHolder conversation,
                        PolytomousKey key) {
                super(conversation);
+               cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+
                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()
         */
@@ -50,12 +57,12 @@ public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput<
        public String getName() {
                return key.getTitleCache();
        }
-       
+
        @Override
        public PolytomousKey getKey() {
                return key;
        }
-       
+
        /* (non-Javadoc)
         * @see java.lang.Object#equals(java.lang.Object)
         */
@@ -69,4 +76,28 @@ public class PolytomousKeyEditorInput extends AbstractIdentificationEditorInput<
                }
                return super.equals(object);
        }
+
+       public void dispose() {
+               cdmEntitySession.dispose();
+       }
+
+
+
+    /* (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<PolytomousKey> getRootEntities() {
+        return Arrays.asList(key);
+    }
 }
index ceae45d69d43fd57c6ea825e9928e868b7ac14f8..7fe6bd712618002ae51e42cba0bd463329f460eb 100644 (file)
@@ -47,6 +47,7 @@ import eu.etaxonomy.taxeditor.editor.EditorUtil;
 import eu.etaxonomy.taxeditor.editor.key.KeyEditor;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
@@ -301,6 +302,7 @@ public class PolytomousKeyListEditor extends EditorPart implements
         */
        @Override
        public void setFocus() {
+               CdmStore.getCurrentSessionManager().bind((PolytomousKeyEditorInput)getEditorInput());
                PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().setFocus();
        }
 
index c55cff77a96035aaf81e50f9bc0ece33eb28f7a1..630fb3009a2c4b6f81871c3178e968933b8926b0 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package eu.etaxonomy.taxeditor.editor.key.polytomous.operation;
 
@@ -9,11 +9,9 @@ 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.IPolytomousKeyNodeService;
-import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
@@ -21,7 +19,7 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * @author n.hoffmann
- * 
+ *
  */
 public class DeleteNodeOperation extends AbstractPostTaxonOperation {
 
@@ -37,7 +35,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)
@@ -45,28 +43,28 @@ 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();
                if (node.getChildren().size()>0){
                        if(! MessageDialog.openQuestion(null, "Confirm deletion of children", "The selected node has children, do you want to delete them, too?")) {
-                               service.delete(node, false);
+                               service.delete(node.getUuid(), false);
                        } else{
-                               service.delete(node, true);
+                               service.delete(node.getUuid(), true);
                        }
                } else{
-                       service.delete(node, true);
+                       service.delete(node.getUuid(), true);
                }
                return postExecute(null);
        }
 
        /*
         * (non-Javadoc)
-        * 
+        *
         * @see
         * org.eclipse.core.commands.operations.AbstractOperation#redo(org.eclipse
         * .core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
@@ -79,7 +77,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)
index b3cd23d0d5c3b1d348496b9af6cd0c8edc26e363..f86b1433331a85a79c42c193916e69708717cec2 100644 (file)
@@ -9,51 +9,16 @@
 
 package eu.etaxonomy.taxeditor.editor.name;
 
+import java.awt.Color;
+import java.awt.Composite;
+import java.awt.Menu;
+import java.awt.dnd.DropTarget;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
-import org.eclipse.core.commands.operations.IUndoContext;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchPartReference;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.forms.ManagedForm;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.eclipse.ui.forms.widgets.TableWrapLayout;
-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;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-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;
@@ -75,7 +40,6 @@ import eu.etaxonomy.taxeditor.model.TaxeditorPartService;
 import eu.etaxonomy.taxeditor.preference.Resources;
 import eu.etaxonomy.taxeditor.security.RequiredPermissions;
 import eu.etaxonomy.taxeditor.store.CdmStore;
-import eu.etaxonomy.taxeditor.store.StoreUtil;
 
 /**
  * <p>
@@ -88,7 +52,7 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @version 1.0
  */
 public class TaxonNameEditor extends EditorPart implements
-               IMultiPageTaxonEditorPage, IConversationEnabled,
+               IMultiPageTaxonEditorPage, IConversationEnabled, ICdmEntitySessionEnabled,
                IPartContentHasDetails, IPartChangeListener,
                ISelectionListener, IDropTargetable, ISecuredEditor {
 
@@ -121,6 +85,8 @@ public class TaxonNameEditor extends EditorPart implements
 
        private TaxonBase objectAffectedByLastOperation;
 
+       private ICdmEntitySession cdmEntitySession;
+
        /**
         * <p>
         * Constructor for TaxonNameEditor.
@@ -235,6 +201,7 @@ public class TaxonNameEditor extends EditorPart implements
         * </p>
         */
        public void createOrUpdateNameComposites() {
+
                //this.taxon = (Taxon)CdmStore.getService(ITaxonService.class).load(this.getTaxon().getUuid());
                //this.taxon = HibernateProxyHelper.deproxy(this.taxon, Taxon.class);
                ContainerFactory.createOrUpdateAcceptedTaxonsHomotypicGroup(this);
@@ -509,7 +476,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 +915,22 @@ public class TaxonNameEditor extends EditorPart implements
                Color background =  AbstractUtility.getColor(enabled ? Resources.COLOR_COMPOSITE_BACKGROUND : Resources.COLOR_TEXT_DISABLED_BACKGROUND);
                setEnabled(enabled, background);
        }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        return editor.getCdmEntitySession();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+     */
+    @Override
+    public <T extends CdmBase> List<T> getRootEntities() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
 }
index e76b8475e3a91bd43d8587fadb357dc6e94bd129..6dadfb8dace9ec8c39314cdefe31f95de4af694b 100644 (file)
@@ -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.
 */
@@ -51,16 +51,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 +75,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 +83,25 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme
 
                // Get taxon
                Taxon taxon = ((TaxonEditorInput) input).getTaxon();
-               
+
                TaxonNode parentNode = (TaxonNode) HibernateProxyHelper.deproxy(((TaxonEditorInput) input).getTaxonNode().getParent());
-               
+
                List<UUID> excludeTaxa = null;
-               
+
                TaxonNode newParentNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), editor.getConversationHolder(), "Select parent", excludeTaxa, null, null);
-               
+
                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<TaxonNameBase> 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, editor); //$NON-NLS-1$
                        EditorUtil.executeOperation(operation);
                }
-               
+
                return null;
        }
 
@@ -108,19 +109,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 +131,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 +147,8 @@ public class ChangeSynonymToAcceptedTaxonHandler extends AbstractHandler impleme
         *
         * @return a boolean.
         */
-       public boolean onComplete() {
+       @Override
+    public boolean onComplete() {
                // TODO Auto-generated method stub
                return false;
        }
index 9f76a0967f0cd16c447c67674e9fc46980a37053..9047c2a137d4e65b3527d10cacd85cd1ffcd6218 100644 (file)
@@ -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;
        }
index 4d19f059ce7e6e6544a901a9900e971a44e99a89..45dc4776ccf30ab26a2cd3acac1122996815af70 100644 (file)
@@ -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;
        }
 }
index ed85b64c00acdb64cf79575bc147cb35fb9d14b0..c3f92f58d0462966120af9900ec2726d5794df74 100644 (file)
@@ -91,7 +91,15 @@ public class DeleteTaxonBaseHandler extends AbstractHandler implements IHandler,
 
                        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,
+                               editor);
                        //editor.dispose();
 
                }
index d8c0e370fdd71db8eb35e3d8c90721fd68edc9b7..13330691735ae81973a0eb77f35c1dac11987f6c 100644 (file)
@@ -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.
 */
@@ -47,26 +47,27 @@ 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);
-                       
+                                                               editor.getTaxon(), synonym, this, editor);
+
                        EditorUtil.executeOperation(operation);
-                       
+
                } catch (NotDefinedException e) {
                        logger.warn("Command name not set");
-               } 
+               }
 
                return null;
        }
@@ -78,15 +79,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 +99,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;
index 679b3396e261973291c1feebb38623e9219ab80d..4804d525ec1fc9001bdace129a6e409c3f936e59 100644 (file)
@@ -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;
 
        /**
         * <p>Constructor for ChangeHomotypicalGroupBasionymOperation.</p>
@@ -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);
        }
-       
-       
+
+
 }
index 1b5349173beab2afb4e424aa76c5b6a784279ac0..7f80174c19240a548b70db0f52cc270f48b227b8 100644 (file)
@@ -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<TaxonNameBase> namesInHomotypicalGroup, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {
-               super(label, undoContext, postOperationEnabled, conversationEnabled);
+       public ChangeSynonymToAcceptedTaxonOperation(String label,
+               IUndoContext undoContext,
+                       Taxon taxon,
+                       ITaxonTreeNode parentNode,
+                       Synonym synonym,
+                       Set<TaxonNameBase> namesInHomotypicalGroup,
+                       IPostOperationEnabled postOperationEnabled,
+                       IConversationEnabled conversationEnabled,
+                       ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);
 
                this.element = taxon;
                this.parentNode = parentNode;
@@ -92,7 +100,7 @@ public class ChangeSynonymToAcceptedTaxonOperation extends AbstractPersistentPos
                        Taxon taxon = newNode.getTaxon();
                        for (TaxonNameBase synonymName : namesInHomotypicGroup){
                                taxon.addHomotypicSynonymName(synonymName, null, null);
-                               
+
                        }
                }*/
 
index d0d3d74c3caebe2d30b788ff847bda789f81bc76..c53f5d04111e00ef75be0db73d61eb5016aec11b 100644 (file)
@@ -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;
index e73e355a8fccf4f0e72de98a3ab8a8798b1c31ab..0c03146a44868cc2023c304988504454f0a7925f 100644 (file)
@@ -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,27 +67,27 @@ 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();
                NameDeletionConfigurator nameConfig = new NameDeletionConfigurator();
                nameConfig.setRemoveAllNameRelationships(true);
                config.setNameDeletionConfig(nameConfig);
-               service.deleteTaxon(misapplication, config, null);
+               service.deleteTaxon(misapplication.getUuid(), config, null);
                monitor.worked(40);
 
                return postExecute(null);
index fdef1cd3544a759252bfb21cf303ba7494794b3b..b21efefce203544c29ecc999610838e0d97eb536 100644 (file)
@@ -71,15 +71,15 @@ 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);
+
+                                       DeleteResult result = service.deleteSynonym(synonym.getUuid(), element.getUuid(), null);
                                        if (result.isError()){
                                                MessageDialog.openError(null, "Delete failed", result.toString());
                                        } else if (!result.getUpdatedObjects().isEmpty()){
index c65dda535e5f559e04d9da813723b6cab3b6d58f..5d4c6f945ec16770717989b6bf22ab8a411e6580 100644 (file)
@@ -11,15 +11,20 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;\r
 import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;\r
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;\r
 \r
 public class DeleteTaxonBaseOperation extends AbstractPersistentPostOperation {\r
 \r
        protected TaxonDeletionConfigurator configurator;\r
 \r
-       public DeleteTaxonBaseOperation(String label, IUndoContext undoContext,\r
-               TaxonDeletionConfigurator configurator, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
-               super(label, undoContext, postOperationEnabled,\r
-                                conversationEnabled);\r
+       public DeleteTaxonBaseOperation(String label,\r
+               IUndoContext undoContext,\r
+               TaxonDeletionConfigurator configurator,\r
+               IWorkbenchPage activePage,\r
+               IPostOperationEnabled postOperationEnabled,\r
+               IConversationEnabled conversationEnabled,\r
+               ICdmEntitySessionEnabled cdmEntitySessionEnabled) {\r
+               super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);\r
                this.configurator = configurator;\r
 \r
        }\r
index 136dcf7f4ff1ead991087e748173666a02d0fe02..c86768ae6c0c54e8af0a73647a0eaa08ee789640 100644 (file)
@@ -21,15 +21,23 @@ import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.taxeditor.model.MessagingUtils;\r
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;\r
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;\r
 import eu.etaxonomy.taxeditor.store.CdmStore;\r
 \r
 public class DeleteTaxonOperation extends DeleteTaxonBaseOperation{\r
 \r
     private final Classification classification;\r
 \r
-       public DeleteTaxonOperation(String label, IUndoContext undoContext,\r
-                       Taxon taxon, TaxonDeletionConfigurator configurator, Classification classification, IWorkbenchPage activePage, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled) {\r
-               super(label, undoContext, configurator, activePage, postOperationEnabled, conversationEnabled);\r
+       public DeleteTaxonOperation(String label,\r
+               IUndoContext undoContext,\r
+                       Taxon taxon,\r
+                       TaxonDeletionConfigurator configurator,\r
+                       Classification classification,\r
+                       IWorkbenchPage activePage,\r
+                       IPostOperationEnabled postOperationEnabled,\r
+                       IConversationEnabled conversationEnabled,\r
+            ICdmEntitySessionEnabled cdmEntitySessionEnabled) {\r
+               super(label, undoContext, configurator, activePage, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);\r
                this.element = taxon;\r
 \r
                Set<TaxonNode> nodes = taxon.getTaxonNodes();\r
@@ -65,7 +73,7 @@ public class DeleteTaxonOperation extends DeleteTaxonBaseOperation{
                                ITaxonService service = controller.getTaxonService();\r
 \r
 \r
-                               DeleteResult result =   service.deleteTaxon(element, configurator, classification);\r
+                               DeleteResult result =   service.deleteTaxon(element.getUuid(), configurator, classification.getUuid());\r
                                if (result.isError()){\r
                                        MessageDialog.openError(null, "Delete failed", result.toString());\r
                                } else if (!result.getUpdatedObjects().isEmpty()){\r
index 1c7da40a872f184372609304c2907d6214083cea..507b2cfe5ad04ace248f3bd414e5b068afa06e96 100644 (file)
@@ -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);
 
index 1e2cf107f3c7c8c4d1adcf10ee3728d503a91c33..905eb319e025827dc737bb5bf771d50a47464edc 100644 (file)
@@ -60,7 +60,7 @@ import eu.etaxonomy.cdm.strategy.merge.MergeException;
  */
 public class TransientAgentService implements IAgentService {
 
-    private IAgentService defaultService;
+    private final IAgentService defaultService;
 
     /**
      * @param defaultAgentService
index 4fa17471a712937ef545ff855023a959ebbd8ffe..411728fafc2dd859372fe6642bd2f496a1faa988 100644 (file)
@@ -942,5 +942,13 @@ public class TransientClassificationService implements IClassificationService {
        return defaultService.createHierarchyInClassification(arg1, arg2);
     }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IService#delete(java.util.UUID)
+     */
+    @Override
+    public DeleteResult delete(UUID uuid) {
+        return defaultService.delete(uuid);
+    }
+
 
 }
index b490b516cb058ea6a1b0c69ac1cd0bf75c05dc70..5954bc758b537551958db7b99e07e1b1f1b102af 100644 (file)
@@ -26,7 +26,6 @@ import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurato
 import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.ISourceable;
@@ -704,4 +703,12 @@ public class TransientCollectionService implements ICollectionService {
        public <S extends Collection>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                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);
+    }
 }
index b418af0a21501343e63e9c93214d2ca6099682c1..9ea4d169ed4ac396ef24cdd3e9a07ff422909072 100644 (file)
@@ -15,52 +15,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
-import org.hibernate.LockOptions;
-import org.hibernate.Session;
-import org.hibernate.criterion.Criterion;
-import org.hibernate.envers.query.criteria.AuditCriterion;
-
-import eu.etaxonomy.cdm.api.service.DeleteResult;
-import eu.etaxonomy.cdm.api.service.DistributionTree;
-import eu.etaxonomy.cdm.api.service.IDescriptionService;
-import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
-import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
-import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
-import eu.etaxonomy.cdm.api.service.pager.Pager;
-import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.common.Annotation;
-import eu.etaxonomy.cdm.model.common.DefinedTerm;
-import eu.etaxonomy.cdm.model.common.ISourceable;
-import eu.etaxonomy.cdm.model.common.IdentifiableSource;
-import eu.etaxonomy.cdm.model.common.LSID;
-import eu.etaxonomy.cdm.model.common.Language;
-import eu.etaxonomy.cdm.model.common.Marker;
-import eu.etaxonomy.cdm.model.common.MarkerType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.cdm.model.common.UuidAndTitleCache;
-import eu.etaxonomy.cdm.model.description.DescriptionBase;
-import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
-import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
-import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
-import eu.etaxonomy.cdm.model.location.NamedArea;
-import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
-import eu.etaxonomy.cdm.model.media.Media;
-import eu.etaxonomy.cdm.model.media.Rights;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-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.TermDto;
-import eu.etaxonomy.cdm.persistence.query.Grouping;
-import eu.etaxonomy.cdm.persistence.query.MatchMode;
-import eu.etaxonomy.cdm.persistence.query.OrderHint;
-import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
-import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
-import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
+import javax.print.attribute.standard.Media;
 
 /**
  * @author pplitzner
@@ -1107,10 +1062,44 @@ public class TransientDescriptionService implements IDescriptionService {
        }
 
        @Override
-       public UUID deleteDescription(DescriptionBase description) {
+       public DeleteResult deleteDescription(DescriptionBase description) {
                return defaultService.deleteDescription(description);
        }
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.model.taxon.Taxon)
+     */
+    @Override
+    public UpdateResult moveTaxonDescriptions(Taxon sourceTaxon, Taxon targetTaxon) {
+        return defaultService.moveTaxonDescriptions(sourceTaxon, targetTaxon);
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#moveTaxonDescriptions(java.util.UUID, java.util.UUID)
+     */
+    @Override
+    public UpdateResult moveTaxonDescriptions(UUID sourceTaxonUuid, UUID targetTaxonUuid) {
+        return defaultService.moveTaxonDescriptions(sourceTaxonUuid, targetTaxonUuid);
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#deleteDescriptionElement(java.util.UUID)
+     */
+    @Override
+    public UUID deleteDescriptionElement(UUID descriptionElementUuid) {
+        return defaultService.deleteDescriptionElement(descriptionElementUuid);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.IDescriptionService#deleteDescription(java.util.UUID)
+     */
+    @Override
+    public DeleteResult deleteDescription(UUID descriptionUuid) {
+        return defaultService.deleteDescription(descriptionUuid);
+    }
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.cdm.api.service.IDescriptionService#pageNamedAreasInUse(boolean, java.lang.Integer, java.lang.Integer)
         */
index 12d8391562318c227f7dd1fa76114eefd59ecf77..ee0368a358f9080327585acb7bc504853c7c2453 100644 (file)
@@ -26,6 +26,7 @@ import org.hibernate.envers.query.criteria.AuditCriterion;
 
 import eu.etaxonomy.cdm.api.service.DeleteResult;
 import eu.etaxonomy.cdm.api.service.INameService;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
 import eu.etaxonomy.cdm.api.service.config.NameDeletionConfigurator;
@@ -35,7 +36,6 @@ import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.api.service.search.DocumentSearchResult;
 import eu.etaxonomy.cdm.api.service.search.SearchResult;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
@@ -79,7 +79,7 @@ import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
  */
 public class TransientNameService implements INameService {
 
-    private INameService defaultService;
+    private final INameService defaultService;
 
     /**
      *
@@ -1149,25 +1149,28 @@ public class TransientNameService implements INameService {
        public TaxonNameBase findWithoutFlush(UUID uuid) {
                return defaultService.findWithoutFlush(uuid);
        }
-       
-       
 
        @Override
        public <S extends TaxonNameBase>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                return defaultService.findByIdentifier(clazz, identifier, identifierType, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
        }
 
-       
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.INameService#setAsGroupsBasionym(java.util.UUID)
+     */
+    @Override
+    public UpdateResult setAsGroupsBasionym(UUID nameUuid) {
+        return defaultService.delete(nameUuid);
+    }
+
 
        @Override
        public List<HashMap<String, String>> getNameRecords() {
-               
+
                return defaultService.getNameRecords();
        }
-       
-       
 
-       
 
 
 }
index 3fda470fdfd5e82d5c7e3733d7167033fe23f55d..b91e24a459447787c932bff0f0bde46604dc78c0 100644 (file)
@@ -27,7 +27,6 @@ import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurato
 import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.ISourceable;
@@ -56,7 +55,7 @@ import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;
  */
 public class TransientReferenceService implements IReferenceService {
 
-    private IReferenceService defaultService;
+    private final IReferenceService defaultService;
 
     /**
      * @param defaultReferenceService
@@ -705,10 +704,18 @@ public class TransientReferenceService implements IReferenceService {
        public Reference findWithoutFlush(UUID uuid) {
                return defaultService.findWithoutFlush(uuid);
        }
-       
+
        @Override
        public <S extends Reference>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                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);
+    }
+
 }
index bd3bd711494a32dbd0cc3c05386b4381407c3736..a4ce21b0ab34d012781c9bdab710c420c28f6be5 100644 (file)
@@ -27,6 +27,7 @@ import org.hibernate.envers.query.criteria.AuditCriterion;
 import eu.etaxonomy.cdm.api.service.DeleteResult;
 import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.api.service.TaxaAndNamesSearchMode;
+import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
 import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator;
 import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
@@ -1418,11 +1419,31 @@ public class TransientTaxonService implements ITaxonService {
            return defaultService.findByIdentifier(clazz, identifier, identifierType, subtreeFilter, matchmode, includeEntity, pageSize, pageNumber, propertyPaths);
        }
 
-       
 
-       
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonym(java.util.UUID, java.util.UUID, eu.etaxonomy.cdm.api.service.config.SynonymDeletionConfigurator)
+     */
+    @Override
+    public DeleteResult deleteSynonym(UUID synonymUuid, UUID taxonUuid, SynonymDeletionConfigurator config) {
+        return defaultService.deleteSynonym(synonymUuid, taxonUuid, config);
+    }
 
 
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.ITaxonService#swapSynonymAndAcceptedTaxon(java.util.UUID, java.util.UUID)
+     */
+    @Override
+    public UpdateResult swapSynonymAndAcceptedTaxon(UUID synonymUUid, UUID acceptedTaxonUuid) {
+        return defaultService.swapSynonymAndAcceptedTaxon(synonymUUid, acceptedTaxonUuid);
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteTaxon(java.util.UUID, eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator, java.util.UUID)
+     */
+    @Override
+    public DeleteResult deleteTaxon(UUID taxonUuid, TaxonDeletionConfigurator config, UUID classificationUuid) {
+        return defaultService.deleteTaxon(taxonUuid, config, classificationUuid);
+    }
 
        @Override
        public SynonymRelationship moveSynonymToAnotherTaxon(
@@ -1431,11 +1452,8 @@ public class TransientTaxonService implements ITaxonService {
                        SynonymRelationshipType newSynonymRelationshipType,
                        Reference reference, String referenceDetail, boolean keepReference)
                        throws HomotypicalGroupChangeException {
-               
+
                return defaultService.moveSynonymToAnotherTaxon(oldSynonymRelation, newTaxonUUID, moveHomotypicGroup, newSynonymRelationshipType, reference, referenceDetail, keepReference);
        }
 
-
-
-
 }
index 61b701ecdfd164c28849eff1575a9d7029c6941c..7e1774615fde6a27b4900b1e9ee0289c54dcd2ae 100644 (file)
@@ -31,7 +31,6 @@ import eu.etaxonomy.cdm.api.service.config.TermDeletionConfigurator;
 import eu.etaxonomy.cdm.api.service.dto.FindByIdentifierDTO;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
@@ -866,11 +865,19 @@ public class TransientTermService implements ITermService {
        public DefinedTermBase findWithoutFlush(UUID uuid) {
                return defaultService.findWithoutFlush(uuid);
        }
-       
+
 
        @Override
        public <S extends DefinedTermBase>  Pager<FindByIdentifierDTO<S>> findByIdentifier(Class<S> clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, boolean includeEntity, Integer pageSize, Integer pageNumber, List<String> propertyPaths){
                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);
+    }
+
 }
index fc7a044a9bc9005f345431cea3faa3c21827a1e6..31b1169581baa6ebc788d62e0d4c05f3e5b10f8d 100644 (file)
@@ -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;
 
 /**
  * <p>DeleteDescriptionHandler class.</p>
@@ -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<DescriptionElementBase> 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
index ab67cf8c6221f297bd97db55a4176b697e168e5d..8e7eea97dc37013cf98cdde5466d63656c02a245 100644 (file)
@@ -95,7 +95,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,
+                                                                                       editor);
                                        AbstractUtility.executeOperation(operation);
                                }
 
index ed86d4b2b6a9dc7d0590651fcb48f6d0d89a3821..0c5ded96a98fc79da8af76b361dd185c23175a6a 100644 (file)
@@ -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;
 
 /**
  * <p>DeleteDescriptionElementOperation class.</p>
@@ -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);
        }
 }
index 6b5b7f6ecd5c9f38985d63d553823499d89999b5..4f2a465509a71327322ac7fef6760b65b80bf8e2 100644 (file)
@@ -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<Sp
 
        private final SpecimenDescription description;
 
-       public DeleteSpecimenDescriptionOperation(String label, IUndoContext undoContext,
-               SpecimenDescription description, IPostOperationEnabled postOperationEnabled) {
-               super(label, undoContext, description.getDescribedSpecimenOrObservation(), postOperationEnabled);
+       public DeleteSpecimenDescriptionOperation(String label,
+               IUndoContext undoContext,
+               SpecimenDescription description,
+               IPostOperationEnabled postOperationEnabled,
+               ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, description.getDescribedSpecimenOrObservation(), postOperationEnabled, cdmEntitySessionEnabled);
                this.description = description;
        }
 
index 5a6cebd41ada0fb17b00e2184025bbf119f9adbc..c9eaff971282d436c2975ffc5e4200d85906c1ea 100644 (file)
@@ -22,6 +22,7 @@ import eu.etaxonomy.cdm.api.service.IDescriptionService;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.taxeditor.operation.AbstractPostTaxonOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -44,9 +45,12 @@ public class DeleteTaxonDescriptionOperation extends AbstractPostTaxonOperation
         * @param description a {@link eu.etaxonomy.cdm.model.description.TaxonDescription} object.
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         */
-       public DeleteTaxonDescriptionOperation(String label, IUndoContext undoContext,
-                       TaxonDescription description, IPostOperationEnabled postOperationEnabled) {
-               super(label, undoContext, postOperationEnabled);
+       public DeleteTaxonDescriptionOperation(String label,
+               IUndoContext undoContext,
+                       TaxonDescription description,
+                       IPostOperationEnabled postOperationEnabled,
+                       ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, postOperationEnabled, cdmEntitySessionEnabled);
 
                this.description = description;
                element = description.getTaxon();
@@ -69,7 +73,7 @@ public class DeleteTaxonDescriptionOperation extends AbstractPostTaxonOperation
                        return postExecute(description);
                }
                return null;
-               
+
        }
 
        /* (non-Javadoc)
index 8ab3fe60b5235e890a0223edc1650b4aa5361ad5..84146211ed2a6fa33ece6486d62908b6a143b5d2 100644 (file)
@@ -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.
 */
@@ -27,6 +27,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 +38,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;
+
        /**
         * <p>Constructor for ChangeAcceptedTaxonToSynonymOperation.</p>
         *
@@ -53,9 +54,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 +76,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 +89,9 @@ public class MoveDescriptionToOtherTaxonOperation extends
                annotation.setAnnotationType(AnnotationType.TECHNICAL());
                description.addAnnotation(annotation);
                newAcceptedTaxonNode.getTaxon().addDescription(description);
-               CdmStore.getService(IDescriptionService.class).saveOrUpdate(description);       
+               CdmStore.getService(IDescriptionService.class).saveOrUpdate(description);
                monitor.worked(40);
-        
+
                return postExecute(description);
        }
 
index 39909f5cfc37f7d1a7f65024e98c61a99b3d6348..7f476f1d79f643f8b2b797b2097f0c9fb85b3a30 100644 (file)
@@ -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());
index 1dc962c6cec7e27282f6eb41471cf9e948b6d969..f5dd35aec3689082225d10e63d8e4eb8c728e9b1 100644 (file)
@@ -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);
        }
 }
index 38e6e88611c9231c87dd096779b6df617cc2023d..4876aed8b27b14f089511498de0b536cbfe7e054 100644 (file)
@@ -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());
        }
 
index 6075a5062f122bba9aaa72f6a72341269d26685e..296164c365fdd2ac7a945457ee8a0b874cf31a61 100644 (file)
@@ -44,6 +44,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 +54,7 @@ import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  *
  */
 public class PolytomousKeyViewPart extends ViewPart implements
-               IConversationEnabled, IPostOperationEnabled {
+               IConversationEnabled, ICdmEntitySessionEnabled, IPostOperationEnabled {
 
        private class FilterModifyListener implements ModifyListener{
                @Override
@@ -111,6 +113,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 +198,8 @@ public class PolytomousKeyViewPart extends ViewPart implements
        private void setInput() {
                conversation = CdmStore.createConversation();
                conversation.registerForDataStoreChanges(this);
+               cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+        cdmEntitySession.registerForDataStoreChanges(this);
                List<PolytomousKey> input = CdmStore.getService(IPolytomousKeyService.class).list(PolytomousKey.class, null, null, null, null);
                if(!viewer.getControl().isDisposed()){
                    viewer.setInput(input);
@@ -206,6 +211,9 @@ public class PolytomousKeyViewPart extends ViewPart implements
         */
        @Override
        public void setFocus() {
+           if(cdmEntitySession != null) {
+            cdmEntitySession.bind();
+        }
                viewer.getControl().setFocus();
        }
 
@@ -238,6 +246,9 @@ public class PolytomousKeyViewPart extends ViewPart implements
                conversation.unregisterForDataStoreChanges(this);
                conversation.close();
                CdmStore.getContextManager().removeContextListener(contextListener);
+           }
+           if(cdmEntitySession != null) {
+               cdmEntitySession.dispose();
            }
                super.dispose();
        }
@@ -276,4 +287,20 @@ public class PolytomousKeyViewPart extends ViewPart implements
                return (List<PolytomousKey>)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<PolytomousKey> getRootEntities() {
+        return getKeys();
+    }
+
 }
index faf141c73ba8ded1c2a973b3a72100bbf6fd2c64..07e8caca4bf020d8a7c44996152382c4090030be 100644 (file)
@@ -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.
 */
@@ -39,31 +39,33 @@ public class DeleteHandler extends AbstractHandler {
        @Override
        public Object execute(ExecutionEvent event) throws ExecutionException {
                IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
-               
+
                List<PolytomousKey> keys = selection.toList();
-               
+
                if(keys.isEmpty()){
                        return null;
                }
-               
+
                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));
+                                                       NavigationUtil.getUndoContext(), key,
+                                                       pkvp,
+                                                       pkvp,
+                                                       pkvp);
                                        NavigationUtil.executeOperation(operation);
                                } catch (NotDefinedException e) {
                                        MessagingUtils.error(getClass(), e);
                                }
                        }
                }
-               
+
                return null;
        }
 
index 7c8b588be75036e4012655907dba6e5ff7cb158b..b41c09498e9e329be512bd24610fd0ff25a7ad27 100644 (file)
@@ -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.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;
 
 /**
@@ -32,7 +33,8 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
 public class DeleteOperation extends AbstractPersistentPostOperation {
 
-       private PolytomousKey key;
+       private final PolytomousKey key;
+       private final ICdmEntitySessionEnabled cdmEntitySessionEnabled;
 
        /**
         * @param label
@@ -41,9 +43,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;
        }
 
        /* (non-Javadoc)
@@ -53,15 +58,16 @@ public class DeleteOperation extends AbstractPersistentPostOperation {
        public IStatus execute(IProgressMonitor monitor, IAdaptable info)
                        throws ExecutionException {
                bind();
-               
+
                DeleteResult result = CdmStore.getService(IPolytomousKeyService.class).delete(key);
+
                if (result.isError()){
                        MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
-                       
-               }else if(result.isAbort()){
+
+               } else if(result.isAbort()){
                        MessageDialog.openWarning(null, "Delete abort", "The object could not be deleted, maybe there was no object selected.");
                }
-               
+
                return postExecute(null);
        }
 
index ef4e0317c1c1c878e12207b33c43417f5a6edd3e..7294a137b6ec2d071fb95cd74ee4cf4f0dad4d75 100644 (file)
@@ -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;
+
        /**
         * <p>Constructor for Root.</p>
         *
@@ -48,7 +48,7 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem
        public Root (ConversationHolder conversation){
                this.conversation = conversation;
        }
-       
+
        /**
         * <p>getParentBeans</p>
         *
@@ -56,18 +56,18 @@ public class Root extends PlatformObject implements IAdaptable, IPersistableElem
         */
        public List<Classification> getParentBeans() {
                List<String> propertyPaths = Arrays.asList(new String[]{"name"});
-               
+
                List<Classification> 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 +78,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 +87,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;
        }
 
index 1d30e554f83d3011fc589edeaa8313451b48c384..bacbf1f98c2e5e17932a66eaf3fb9be1c39524c2 100644 (file)
@@ -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 <code>ID="eu.etaxonomy.taxeditor.navigation.taxon"{trunked}</code> */
        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) {
index 3913e0a2922c3eec1cc9e992e54b697fa4413d30..092b49bc8823ed85140deebeef6cacd4c7d55085 100644 (file)
@@ -32,6 +32,7 @@ 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.TaxonComparatorSearch;
 import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
@@ -41,6 +42,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;
 
@@ -53,7 +56,7 @@ import eu.etaxonomy.taxeditor.store.LoginManager;
  * @version 1.0
  */
 public class TaxonNavigator extends CommonNavigator implements
-               IPostOperationEnabled, IConversationEnabled, Observer {
+               IPostOperationEnabled, IConversationEnabled, Observer, ICdmEntitySessionEnabled {
 
        /**
         * Constant
@@ -67,10 +70,14 @@ public class TaxonNavigator extends CommonNavigator implements
 
        private ConversationHolder conversation;
 
+       private ICdmEntitySession cdmEntitySession;
+
        private String partNameCache;
 
        private IDataChangeBehavior dataChangeBehavior;
 
+       private Root root;
+
        /*
         * (non-Javadoc)
         *
@@ -110,8 +117,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();
        }
@@ -129,10 +136,15 @@ public class TaxonNavigator extends CommonNavigator implements
         * </p>
         */
        public void init() {
+
                if (CdmStore.isActive() && conversation == null) {
                        conversation = CdmStore.createConversation();
                        conversation.registerForDataStoreChanges(TaxonNavigator.this);
                }
+               if (CdmStore.isActive() && cdmEntitySession == null) {
+                   cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
+                   cdmEntitySession.registerForDataStoreChanges(TaxonNavigator.this);
+               }
                CdmStore.getLoginManager().addObserver(this);
        }
 
@@ -147,9 +159,22 @@ public class TaxonNavigator extends CommonNavigator implements
                            getConversationHolder().commit();
                        }
                }
+               if (cdmEntitySession != null) {
+                   cdmEntitySession.fireNotifications();
+               }
                getCommonViewer().refresh();
        }
 
+          /**
+     * Refresh this navigators viewer
+     */
+    public void refresh(Set objects) {
+
+        for(Object obj : objects) {
+            getCommonViewer().refresh(obj);
+        }
+    }
+
        /**
         * Removes all content
         */
@@ -168,8 +193,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;
@@ -197,7 +223,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);
@@ -358,6 +384,9 @@ public class TaxonNavigator extends CommonNavigator implements
                if (conversation != null) {
                        conversation.unregisterForDataStoreChanges(this);
                }
+               if(cdmEntitySession != null) {
+                   cdmEntitySession.dispose();
+               }
        }
 
        /*
@@ -373,6 +402,9 @@ public class TaxonNavigator extends CommonNavigator implements
                if (getConversationHolder() != null) {
                        getConversationHolder().bind();
                }
+               if(cdmEntitySession != null) {
+                   cdmEntitySession.bind();
+               }
        }
 
        /*
@@ -460,4 +492,23 @@ 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<Classification> getRootEntities() {
+        if(root != null) {
+            return root.getParentBeans();
+        }
+        return null;
+    }
 }
index 0bb6c999c8d7c1d111b17677e594e3a94763c939..b1a636182f437497435f86860f87cc197b8712d8 100644 (file)
@@ -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<CdmBase> staleObjects;
-       
+
        /**
         * <p>Constructor for TaxonNavigatorDataChangeBehavior.</p>
         *
@@ -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<CdmBase>();
-               
+
                for(CdmDataChangeEvent event : events.getAllEvents()){
                        EventType eventType = event.getEventType();
                        CdmBase eventEntity = event.getEntity();
-                       
+
+                       Set<CdmBase> 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<IEditorPart> 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<IEditorPart> openEditors = NavigationUtil.getOpenEditors();
+
+                               // Set<IEditorPart> 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();
-                       
+
                }
        }
 }
index 86eb9506f926fd1267fbb4f1a23972d0ff3d4663..3883b5f176a470a2a77b858deff8c66195107f5f 100644 (file)
@@ -19,16 +19,12 @@ import org.apache.log4j.Logger;
 import org.eclipse.core.commands.operations.IUndoContext;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.IconAndMessageDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.util.LocalSelectionTransfer;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.handlers.HandlerUtil;
 import org.eclipse.ui.navigator.CommonDropAdapter;
 import org.eclipse.ui.navigator.CommonDropAdapterAssistant;
 
@@ -69,7 +65,7 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp
        public IStatus handleDrop(CommonDropAdapter dropAdapter,
                        DropTargetEvent dropTargetEvent, Object target) {
 
-               
+
                if (target instanceof ITaxonTreeNode) {
                        Set<TaxonNode> taxonNodes = getSelectedTaxa();
                        ITaxonTreeNode targetTreeNode = (ITaxonTreeNode) target;
@@ -87,7 +83,7 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp
                                }
             }
                }
-               
+
                return Status.CANCEL_STATUS;
        }
 
@@ -190,11 +186,11 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp
                                logger.error("Workspace undo context is null. DND operation cancelled");
                                return Status.CANCEL_STATUS;
                        }
-       
+
                        AbstractPostOperation operation = new MoveTaxonOperation
                                        ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
                        NavigationUtil.executeOperation(operation);
-                       
+
                        logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
                        return Status.OK_STATUS;
                }else{
@@ -208,11 +204,11 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp
                                        logger.error("Workspace undo context is null. DND operation cancelled");
                                        return Status.CANCEL_STATUS;
                                }
-               
+
                                AbstractPostOperation operation = new MoveTaxonOperation
                                                ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, true);
                                NavigationUtil.executeOperation(operation);
-                               
+
                                logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
                                return Status.OK_STATUS;
                        }else if (returnCode == 1){
@@ -221,19 +217,20 @@ public class TreeNodeDropAdapterAssistant extends CommonDropAdapterAssistant imp
                                        logger.error("Workspace undo context is null. DND operation cancelled");
                                        return Status.CANCEL_STATUS;
                                }
-               
+
                                AbstractPostOperation operation = new MoveTaxonOperation
                                                ("Move Taxon", workspaceUndoContext, taxonNode, targetITaxonTreeNode, this, taxonNavigator, false);
                                NavigationUtil.executeOperation(operation);
-                               
+
                                logger.info("Moved taxa to new parent " + targetITaxonTreeNode);
                                return Status.OK_STATUS;
                        } else{
                                return Status.CANCEL_STATUS;
                        }
-                       
-                       
+
+
                }
+
        }
 
        /* (non-Javadoc)
index 3763adc75f9daa0fa9295d72c26fe8ea89f4f38e..f79c91facdce45f3236ed2b7dcac8c44e80b4125 100644 (file)
@@ -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<ITaxonTreeNode> treeNodes = new HashSet<ITaxonTreeNode>();
@@ -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<UUID> excludeTaxa = new ArrayList<UUID>();
                                excludeTaxa.add(oldAcceptedTaxonNode.getUuid());
-                               TaxonNode newAcceptedTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event), 
-                                               taxonNavigator.getConversationHolder(), 
-                                               "Choose the accepted taxon", 
-                                               excludeTaxa, 
-                                               null, 
-                                               ((TaxonNode)oldAcceptedTaxonNode).getClassification());                 
+                               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;
-       }       
+       }
 }
index 55df02ba26580f05fa4cc09d74df9336257d6b6e..4a90ff4705fd1ddc87ff40dc18ca6d30c322ae79 100644 (file)
@@ -34,7 +34,6 @@ 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<ITaxonTreeNode> treeNodes = new HashSet<ITaxonTreeNode>();
 
@@ -132,11 +137,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);
+
                                                //}
                                }
 
@@ -151,11 +162,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");
index d89a11fda672cc994a353abcbc617d7d0460bee3..c33d9ff125030bf14131eee0d93c5c7bf33a2888 100644 (file)
@@ -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;
@@ -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(){
 
index 4c84b0197943fbdcd70f5ab5564839119aa1cef6..d275e3c90408ae57ad0ff5773090e68b63468734 100644 (file)
@@ -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.
 */
 package eu.etaxonomy.taxeditor.navigation.navigator.handler;
 
 import java.util.ArrayList;
-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.core.expressions.EvaluationContext;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.TreeSelection;
-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.api.application.ICdmApplicationConfiguration;
-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.ITreeNode;
-import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.taxeditor.editor.TaxonEditorInput;
 import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
 import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
 import eu.etaxonomy.taxeditor.navigation.navigator.operation.MoveTaxonOperation;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
-import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
-import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionNaturalOrderDialog;
 
 /**
  * <p>MoveTaxonHandler class.</p>
@@ -61,18 +48,21 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
         * @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 taxonNavigator = (TaxonNavigator)NavigationUtil.showView(TaxonNavigator.ID);
-               
+
                TreeSelection selection = (TreeSelection) HandlerUtil.getCurrentSelection(event);
-               
+
                Iterator selectionIterator = selection.iterator();
                TaxonNode taxonNode = null;
                UUID taxonNodeUUID = null;
                // do not show the current selection
                List<UUID> excludeTaxa = new ArrayList<UUID>();
-               
+
+
                if (selection.size() == 1){
                        Object object = selectionIterator.next();
                        if(object instanceof TaxonNode){
@@ -85,11 +75,12 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
                                return null;
                        }
                }
-               
-               
+
+
+
 //             TaxonNode taxonNode = (TaxonNode) selection.getFirstElement();
                if (taxonNode != null){
-                       boolean moveToNewParent = true; 
+                       boolean moveToNewParent = true;
                        if (PreferencesUtil.getSortNodesNaturally()){
                                if(!MessageDialog.openQuestion(null, "Target node", "The choosen target node should be the parent?")){
                                        moveToNewParent = false;
@@ -104,15 +95,16 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
                                                        "changes in the parent taxon. Please save first.");
                                        return null;
                                }
-                               
+
                                AbstractPostOperation operation = new MoveTaxonOperation
                                                ("Move taxon to new parent", NavigationUtil.getUndoContext(),
                                                                taxonNode, parentTaxonNode, taxonNavigator, taxonNavigator, moveToNewParent); //$NON-NLS-1$
                                NavigationUtil.executeOperation(operation);
                                taxonNavigator.refresh();
-                       
+
                        }
                }
+
                return null;
        }
 
@@ -120,7 +112,8 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
         * @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) {
                return true;
        }
 
@@ -129,10 +122,9 @@ public class MoveTaxonHandler extends AbstractHandler implements IPostOperationE
         *
         * @return a boolean.
         */
-       public boolean onComplete() {
+       @Override
+    public boolean onComplete() {
                return false;
        }
-       
-       
-       
+
 }
index 4dd1c61dbf3a5e01904d92a7aefe610d489afe79..609e0fba4486bc7733c62212869b237bb9708f89 100644 (file)
@@ -19,6 +19,7 @@ import org.eclipse.core.runtime.Status;
 
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 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;
@@ -27,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;
 
 /**
@@ -40,6 +42,8 @@ public class ChangeAcceptedTaxonToSynonymOperation extends
        DeleteOperation {
 
        private final TaxonNode newAcceptedTaxonNode;
+       private final ICdmEntitySessionEnabled cdmEntitySessionEnabled;
+
 
        //private TaxonNode oldTaxonNode;
 
@@ -54,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;
        }
 
 
@@ -71,9 +80,10 @@ public class ChangeAcceptedTaxonToSynonymOperation extends
 
                monitor.worked(20);
                bind();
+
        Taxon oldTaxon = (Taxon) HibernateProxyHelper.deproxy(((TaxonNode) taxonNode).getTaxon());
                try {
-                   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);
         } catch (IllegalArgumentException e) {
             MessagingUtils.errorDialog("Operation failed", this, e.getMessage(), TaxeditorNavigationPlugin.PLUGIN_ID, e, false);
             return Status.CANCEL_STATUS;
index 743cb775ea135bb417ec3f06e82937935740295a..692c5ad87611391286c581a354f7d98137f8bdf8 100644 (file)
@@ -1,16 +1,18 @@
 // $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.navigation.navigator.operation;
 
+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;
@@ -31,6 +33,7 @@ import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.taxeditor.operation.AbstractPersistentPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -42,122 +45,126 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  */
 public class DeleteOperation extends AbstractPersistentPostOperation{
 
-       private Set<ITaxonTreeNode> treeNodes;
-       protected final TaxonDeletionConfigurator config;
-
-
-       /**
-        * <p>Constructor for DeleteTreeNodeOperation.</p>
-        *
-        * @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;
-       }
-
-       /**
-        * <p>Constructor for DeleteTreeNodeOperation.</p>
-        *
-        * @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<ITaxonTreeNode> treeNodes, TaxonDeletionConfigurator config,
-                       IPostOperationEnabled postOperationEnabled,
-                       IConversationEnabled conversationEnabled) {
-               super(label, undoContext, postOperationEnabled, conversationEnabled);
-               this.treeNodes = treeNodes;
-               this.config = config;
-       }
-
-
-       /* (non-Javadoc)
-        * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
-        */
-       /** {@inheritDoc} */
-       @Override
-       public IStatus execute(IProgressMonitor monitor, IAdaptable info)
-                       throws ExecutionException {
-
-               bind();
-               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()){
-                                       //TODO:Error message!
-                                       MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
-                               }
-
-
-                       }else if(taxonNode != null && taxonNode instanceof Classification){
-                               Classification taxonomicTree = (Classification) taxonNode;
-                               /*if(taxonomicTree.hasChildNodes()){
+    private Set<ITaxonTreeNode> treeNodes;
+    protected final TaxonDeletionConfigurator config;
+    private final ICdmEntitySessionEnabled cdmEntitySessionEnabled;
+
+    /**
+     * <p>Constructor for DeleteTreeNodeOperation.</p>
+     *
+     * @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;
+    }
+
+    /**
+     * <p>Constructor for DeleteTreeNodeOperation.</p>
+     *
+     * @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<ITaxonTreeNode> treeNodes, TaxonDeletionConfigurator config,
+            IPostOperationEnabled postOperationEnabled,
+            IConversationEnabled conversationEnabled,
+            ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+        super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);
+        this.treeNodes = treeNodes;
+        this.config = config;
+        this.cdmEntitySessionEnabled = cdmEntitySessionEnabled;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.commands.operations.AbstractOperation#execute(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.core.runtime.IAdaptable)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public IStatus execute(IProgressMonitor monitor, IAdaptable info)
+            throws ExecutionException {
+
+        bind();
+        monitor.worked(20);
+        ICdmApplicationConfiguration controller = CdmStore.getCurrentApplicationConfiguration();
+        ITaxonNodeService service = controller.getTaxonNodeService();
+        DeleteResult result;
+
+        if(taxonNode != null && taxonNode instanceof TaxonNode) {
+
+            element = ((TaxonNode)taxonNode).getTaxon();
+
+            result = service.deleteTaxonNode(taxonNode.getUuid(), config);
+            if (result.isError() || result.isAbort()){
+                MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
+            }
+
+        } 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()){
-                                       //TODO:Error message!
-                                       MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
-                               }
-
-                               /*}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()){
-                                       //TODO:Error message!
-                                       MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
-                               }
-                       }
-
-               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;
-       }
+
+            result = CdmStore.getService(IClassificationService.class).delete(taxonomicTree.getUuid());
+            if (result.isError() || result.isAbort()){
+                MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
+            }
+
+        } else {
+            Set<UUID> treeNodeUuids = new HashSet<UUID>();
+            ITaxonTreeNode entity = null;
+            for(ITaxonTreeNode treeNode : treeNodes) {
+                if(entity == null) {
+                    entity = treeNode;
+                }
+                treeNodeUuids.add(treeNode.getUuid());
+            }
+
+            result = service.deleteTaxonNodes(treeNodeUuids, config);
+            if (result.isError() || result.isAbort()){
+                MessageDialog.openError(null, "Delete failed", result.getExceptions().get(0).getMessage());
+            }
+
+        }
+
+        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;
+    }
 }
index 072fc2fb526ad56c2443f11c69ddb7e6076a0a46..f8ee6d9f1c14a154d3f68365a272f35419722711 100644 (file)
@@ -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;
 
        /**
         * <p>Constructor for EditTaxonomicTreeOperation.</p>
@@ -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)
index bd2b57db5ecb6f2daebf24ad111b936ad3e5ad93..385a89297f1b93908d2c768c6a78e5a9f8725c7f 100644 (file)
@@ -9,11 +9,8 @@
 
 package eu.etaxonomy.taxeditor.navigation.navigator.operation;
 
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.UUID;
 
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoContext;
@@ -22,16 +19,15 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
-import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
 import eu.etaxonomy.cdm.api.service.UpdateResult;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
-import eu.etaxonomy.cdm.model.taxon.IllegalAncestryException;
 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;
 
 /**
@@ -46,14 +42,18 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
        /**
         * A reference to the new taxonomical parent.
         */
-       private ITaxonTreeNode newParentTreeNode;
+       private final ITaxonTreeNode newParentTreeNode;
        /**
         * A reference to the former taxonomical parents
         */
-       //private Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
 
-       private TaxonNode taxonNode;
-       private boolean moveToParentNode;
+       private final Map<TaxonNode, ITaxonTreeNode> oldParentTreeNodes;
+
+       private final Set<TaxonNode> taxonNodes;
+
+
+       private final TaxonNode taxonNode;
+       private final boolean moveToParentNode;
        /**
         * <p>Constructor for MoveTaxonOperation.</p>
         *
@@ -64,20 +64,29 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
         * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
         * @param conversationEnabled a {@link eu.etaxonomy.cdm.api.conversation.IConversationEnabled} object.
         */
-       public MoveTaxonOperation(String label, IUndoContext undoContext,
-                       TaxonNode taxonNodeToMove, ITaxonTreeNode newParentTreeNode, IPostOperationEnabled postOperationEnabled, IConversationEnabled conversationEnabled, boolean moveToParentNode) {
-               super(label, undoContext, postOperationEnabled, conversationEnabled);
-               
+
+       public MoveTaxonOperation(String label,
+               IUndoContext undoContext,
+                       TaxonNode taxonNodeToMove,
+                       ITaxonTreeNode newParentTreeNode,
+                       IPostOperationEnabled postOperationEnabled,
+                       IConversationEnabled conversationEnabled,
+                       ICdmEntitySessionEnabled cdmEntitySessionEnabled,
+                       boolean moveToParentNode) {
+               super(label, undoContext, postOperationEnabled, conversationEnabled, cdmEntitySessionEnabled);
+
                this.taxonNode = taxonNodeToMove;
                /*for (TaxonNode node:taxonNodes){
                        this.taxonNodes.add(service.load(node.getUuid()));
                }*/
-               
+
+
                this.newParentTreeNode = newParentTreeNode;
                this.moveToParentNode = moveToParentNode;
                // Save old parent ITaxonTreeNodes for undo
-               
+
                //this.parentNode = taxonNode.getParent();
+
        }
 
        /* (non-Javadoc)
@@ -96,7 +105,7 @@ public class MoveTaxonOperation extends AbstractPersistentPostOperation {
 //                             TaxonNode newTaxonNode = newParentTreeNode.addChildNode(taxonNode,
 //                                             newParentTreeNode.getReference(), newParentTreeNode.getMicroReference());
 //                             //taxonNodes.add(newTaxonNode);
-//                             
+//
 //                             monitor.worked(2);
 //                     }
 //             } catch(IllegalAncestryException e) {
index 12c9d5548fad1aba909026ac100cb3f967e8c926..ea53a013928a74a8022c76ca106c8576c73f7841 100644 (file)
@@ -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;
+
        /**
         * <p>Constructor for SaveClassificationOperation.</p>
         *
@@ -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);
index 293811bd11a655df8a4c995e6f8eb57d595afd8f..051f408b4790102dc16ce98ba1808bbfaee5f7dd 100644 (file)
@@ -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);
        }
 
index 8b391876f1be3125b2d7227c94cef08589b70b5d..495f009dc3a942b01143ef4d471268dbe7b48801 100644 (file)
@@ -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;
        }
index 37c33cdfeb15a1690faac784e1c68b90427e895a..967bc43642a18aa9559201c6234f27911df608dc 100644 (file)
         id="eu.etaxonomy.taxeditor.view.derivateSearch.DerivateSearchView"
         name="%view.name.6"
         restorable="true">
+  </view>
+  <view
+        allowMultiple="false"
+        class="eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart"
+        id="eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart"
+        name="Sessions"
+        restorable="false">
   </view>
    </extension>
    <extension
                   </reference>
                </visibleWhen>
             </command>
+            <command
+                  commandId="org.eclipse.ui.views.showView"
+                  label="Sessions"
+                  style="push">
+               <parameter
+                     name="org.eclipse.ui.views.showView.viewId"
+                     value="eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart">
+               </parameter>
+            </command>
          </menu>
       </menuContribution>
       <menuContribution
             id="eu.etaxonomy.taxeditor.editor.definedTerms.delete"
             name="%command.name.14">
       </command>
+      <command
+            defaultHandler="eu.etaxonomy.taxeditor.handler.OpenInspectSessionsHandler"
+            id="eu.etaxonomy.taxeditor.store.open.InspectSessionsDialog"
+            name="Inspect Active Session">
+      </command>
    </extension>
    <extension
          point="org.eclipse.ui.importWizards">
index d676ca2a2ace038346efb62bceadab981bee56e5..0275cc47100a772f81bd429b74d96f82ddc37257 100644 (file)
@@ -30,12 +30,13 @@ import eu.etaxonomy.cdm.database.CdmPersistentDataSource;
 import eu.etaxonomy.cdm.database.DataSourceNotFoundException;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
-import eu.etaxonomy.cdm.remote.CdmPersistentRemoteSource;
-import eu.etaxonomy.cdm.remote.CdmRemoteSourceException;
-import eu.etaxonomy.cdm.remote.ICdmRemoteSource;
+
 import eu.etaxonomy.taxeditor.model.MementoHelper;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.remoting.source.CdmPersistentRemoteSource;
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 public class CdmDataSourceRepository{
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenInspectSessionsHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/OpenInspectSessionsHandler.java
new file mode 100644 (file)
index 0000000..b8af099
--- /dev/null
@@ -0,0 +1,62 @@
+// $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.handler;
+
+import java.util.List;
+
+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.swt.SWT;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.view.sessions.InspectSessionsDialog;
+
+/**
+ * @author cmathew
+ * @date 18 Feb 2015
+ *
+ */
+public class OpenInspectSessionsHandler extends AbstractHandler implements IHandler {
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public Object execute(ExecutionEvent event) throws ExecutionException {
+
+        Object principal = CdmStore.getCurrentAuthentiation().getPrincipal();
+
+        ICdmEntitySession activeSession = CdmStore.getCurrentSessionManager().getActiveSession();
+
+        if(activeSession == null) {
+            MessagingUtils.warningDialog("No Active Session", this, "Active Session is null");
+        } else {
+            List<CdmBase> rootEntities = activeSession.getRootEntities();
+            if(rootEntities == null || rootEntities.isEmpty()) {
+                MessagingUtils.warningDialog("No Root Entities", this, "No root entities to inspect");
+            } else {
+                InspectSessionsDialog dialog = new InspectSessionsDialog(AbstractUtility.getShell(), SWT.NONE);
+                dialog.open();
+            }
+
+        }
+
+        return null;
+
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowRemotingLoginWindowHandler.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/handler/ShowRemotingLoginWindowHandler.java
new file mode 100644 (file)
index 0000000..025c493
--- /dev/null
@@ -0,0 +1,48 @@
+// $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.handler;
+
+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.swt.SWT;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import eu.etaxonomy.taxeditor.ui.dialog.RemotingLoginDialog;
+
+/**
+ * <p>ShowLoginWindowHandler class.</p>
+ *
+ * @author n.hoffmann
+ * @created Aug 7, 2009
+ * @version 1.0
+ */
+public class ShowRemotingLoginWindowHandler extends AbstractHandler implements IHandler{
+
+       /* (non-Javadoc)
+        * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+        */
+       /** {@inheritDoc} */
+       @Override
+    public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               RemotingLoginDialog loginDialog = new RemotingLoginDialog(HandlerUtil.getActiveShell(event),SWT.DIALOG_TRIM
+                       | SWT.APPLICATION_MODAL);
+               loginDialog.open();
+
+               return null;
+
+       }
+
+
+
+}
index 6d63fbd675122e32ac450352a3266913668b9487..a35e64490f9a9f6d3c6879b9d90a08572fc013a8 100644 (file)
@@ -28,8 +28,8 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 
 import eu.etaxonomy.cdm.model.taxon.Classification;
-import eu.etaxonomy.cdm.remote.CdmRemoteSourceException;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
index 2d21f05c071faad720ffdee9321fe36bda723f15..72d73f88278ae621195ab7a1cf121dbb3fde396f 100644 (file)
@@ -18,6 +18,9 @@ import java.util.List;
 import java.util.TreeSet;
 
 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.core.commands.operations.IOperationHistory;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -44,6 +47,7 @@ import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.ide.undo.WorkspaceUndoUtil;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.progress.IProgressService;
@@ -776,4 +780,28 @@ public abstract class AbstractUtility {
     }
 
 
+    public static void executeCommand(String commandId, Object source, String pluginId) {
+        IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
+        Exception exception = null;
+        try {
+            handlerService.executeCommand(commandId, null);
+        } catch (ExecutionException e) {
+            exception = e;
+        } catch (NotDefinedException e) {
+            exception = e;
+        } catch (NotEnabledException e) {
+            exception = e;
+        } catch (NotHandledException e) {
+            exception = e;
+        } finally {
+            if(exception != null) {
+                MessagingUtils.errorDialog("Error executing command",
+                        source,
+                        "Could not execute command with id " + commandId ,
+                        pluginId,
+                        exception,
+                        true);
+            }
+        }
+    }
 }
index 07f4c2126855ac80134eb20f2f8ad43ee6caed47..6c7f7161ca02dc3b2441591ed2cd4a673f622ea1 100644 (file)
@@ -3,16 +3,20 @@
  */
 package eu.etaxonomy.taxeditor.newWizard;
 
+import java.util.HashSet;
+import java.util.Set;
 import java.util.UUID;
 
 import org.apache.commons.lang.StringUtils;
 
 import eu.etaxonomy.cdm.api.service.IClassificationService;
 import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
+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.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeEvent.EventType;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeWizardPage;
@@ -46,7 +50,12 @@ public class NewTaxonNodeWizard extends AbstractNewEntityWizard<ITaxonTreeNode>{
                        Taxon taxon = taxonNodePage.getTaxon();
                        try{
                                TaxonNode taxonNode = parent.addChildTaxon(taxon, parent.getReference(), parent.getMicroReference());
-                               generatedTaxonNodeUuid = CdmStore.getService(ITaxonNodeService.class).saveOrUpdate(taxonNode);
+                               taxonNode = CdmStore.getService(ITaxonNodeService.class).merge(taxonNode);
+                               generatedTaxonNodeUuid = taxonNode.getUuid();
+                               Set<CdmBase> affectedObjects = new HashSet<CdmBase>();
+                       affectedObjects.add((TaxonNode)parent);
+                               CdmStore.getCurrentSessionManager().getActiveSession().addEvent(taxonNode, affectedObjects, EventType.INSERT);
+                               CdmStore.getCurrentSessionManager().getActiveSession().fireNotifications();
                        }catch(IllegalArgumentException e){
                                MessagingUtils.warningDialog("Taxon already exists in classfication", getClass(), e.getMessage());
                        }
index e42030d986305da803da9b07c1ffa30f1af89181..5811603ba9dbe6a96b2d3a0096539c3acd412d25 100644 (file)
@@ -18,6 +18,7 @@ import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.taxon.ITaxonTreeNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 
 /**
  * Superclass for all operation that have to be committed imediately after execution.
@@ -31,7 +32,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  * @version 1.0
  */
 public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonOperation {
-       private IConversationEnabled conversationEnabled;
+       private final IConversationEnabled conversationEnabled;
 
        protected ITaxonTreeNode parentNode;
 
@@ -45,8 +46,9 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
         */
        protected AbstractPersistentPostOperation(String label, IUndoContext undoContext,
                        IPostOperationEnabled postOperationEnabled,
-                       IConversationEnabled conversationEnabled) {
-               super(label, undoContext, postOperationEnabled);
+                       IConversationEnabled conversationEnabled,
+                       ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, postOperationEnabled, cdmEntitySessionEnabled);
                this.conversationEnabled = conversationEnabled;
        }
 
@@ -62,9 +64,11 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
        public AbstractPersistentPostOperation(String label,
                        IUndoContext undoContext, TaxonNode taxonNode,
                        IPostOperationEnabled postOperationEnabled,
-                       IConversationEnabled conversationEnabled) {
-               super(label, undoContext, taxonNode, postOperationEnabled);
+                       IConversationEnabled conversationEnabled,
+                       ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, taxonNode, postOperationEnabled, cdmEntitySessionEnabled);
                this.conversationEnabled = conversationEnabled;
+
        }
 
        /**
@@ -79,10 +83,12 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
        public AbstractPersistentPostOperation(String label,
                        IUndoContext undoContext, ITaxonTreeNode parentNode,
                        IPostOperationEnabled postOperationEnabled,
-                       IConversationEnabled conversationEnabled) {
-               super(label, undoContext, postOperationEnabled);
+                       IConversationEnabled conversationEnabled,
+            ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+               super(label, undoContext, postOperationEnabled, cdmEntitySessionEnabled);
                this.parentNode = parentNode;
                this.conversationEnabled = conversationEnabled;
+
        }
 
        /* (non-Javadoc)
@@ -93,11 +99,14 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
     protected IStatus postExecute(CdmBase objectAffectedByOperation) {
                Assert.isNotNull(conversationEnabled, "Operation has to have a valid conversation attached.");
 
-               
+
                if (!conversationEnabled.getConversationHolder().isClosed()){
                        conversationEnabled.getConversationHolder().bind();
                        conversationEnabled.getConversationHolder().commit(true);
                }
+               if(getCdmEntitySessionEnabled() != null) {
+                   getCdmEntitySessionEnabled().getCdmEntitySession().fireNotifications();
+               }
                IStatus status = super.postExecute(objectAffectedByOperation);
 
                return status;
@@ -108,6 +117,9 @@ public abstract class AbstractPersistentPostOperation extends AbstractPostTaxonO
         */
        public void bind(){
                conversationEnabled.getConversationHolder().bind();
+               if(getCdmEntitySessionEnabled() != null) {
+                   getCdmEntitySessionEnabled().getCdmEntitySession().bind();
+        }
        }
 
 }
index 5b7c68ec8230074a7de6ef72c0fd5ae812bb3636..c313d1f0f9f236ea48bcc8c0e558ad82a5e8a84a 100644 (file)
@@ -16,6 +16,7 @@ import org.eclipse.core.runtime.Status;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 
 /**
  * @author pplitzner
@@ -35,6 +36,8 @@ public abstract class AbstractPostOperation<T extends ICdmBase> extends Abstract
      */
     protected IPostOperationEnabled postOperationEnabled;
 
+    private ICdmEntitySessionEnabled cdmEntitySessionEnabled;
+
 
     /**
      * <p>Constructor for AbstractPostOperation.</p>
@@ -71,6 +74,15 @@ public abstract class AbstractPostOperation<T extends ICdmBase> extends Abstract
         this.postOperationEnabled = postOperationEnabled;
     }
 
+    public AbstractPostOperation(String label, IUndoContext undoContext,
+            T element, IPostOperationEnabled postOperationEnabled,
+            ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+        this(label, undoContext);
+        this.element = element;
+        this.postOperationEnabled = postOperationEnabled;
+        this.cdmEntitySessionEnabled = cdmEntitySessionEnabled;
+    }
+
     /**
      * This method will try to call the post operation on a possibly registered
      * IPostOperationEnabled implementor. Objects that were affected by the operation
@@ -80,10 +92,11 @@ public abstract class AbstractPostOperation<T extends ICdmBase> extends Abstract
      * @return a {@link org.eclipse.core.runtime.IStatus} object.
      */
     protected IStatus postExecute(CdmBase objectAffectedByOperation) {
-       if(postOperationEnabled != null){
-               return postOperationEnabled.postOperation(objectAffectedByOperation) ? Status.OK_STATUS : Status.CANCEL_STATUS;
-       }
-       return Status.OK_STATUS;
+
+        if(postOperationEnabled != null){
+            return postOperationEnabled.postOperation(objectAffectedByOperation) ? Status.OK_STATUS : Status.CANCEL_STATUS;
+        }
+        return Status.OK_STATUS;
     }
 
     /**
@@ -92,7 +105,34 @@ public abstract class AbstractPostOperation<T extends ICdmBase> extends Abstract
      * @return a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
      */
     public IPostOperationEnabled getPostOperationEnabled() {
-       return postOperationEnabled;
+        return postOperationEnabled;
+    }
+
+//    protected IStatus updateSession(CdmBase clientObjectAffectedByOperation, UpdateResult updateResult) {
+//        Set<CdmBase> affectedObjects;
+//        if(updateResult == null) {
+//            affectedObjects = new HashSet<CdmBase>();
+//        } else {
+//            affectedObjects = updateResult.getUpdatedObjects();
+//        }
+//
+//        if(cdmEntitySessionEnabled != null) {
+//            cdmEntitySessionEnabled.getCdmEntitySession().update(clientObjectAffectedByOperation, affectedObjects);
+//        }
+//        return Status.OK_STATUS;
+//    }
+//
+//    protected IStatus updateSession(UUID uuid) {
+//
+//        if(cdmEntitySessionEnabled != null) {
+//            CdmBase cdmBase = cdmEntitySessionEnabled.getCdmEntitySession().remoteLoad(CdmStore.getService(IService.class),uuid);
+//            cdmEntitySessionEnabled.getCdmEntitySession().update(null, cdmBase);
+//        }
+//        return Status.OK_STATUS;
+//    }
+
+    public ICdmEntitySessionEnabled getCdmEntitySessionEnabled() {
+        return cdmEntitySessionEnabled;
     }
 
 }
\ No newline at end of file
index b37c5401060a7b0dc3825b3e1210422ba01ac992..6604f27bb22cd09fda681b1fd62231c5182e681d 100644 (file)
@@ -1,11 +1,11 @@
 /**
-* 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.operation;
 
@@ -16,6 +16,7 @@ import org.eclipse.core.commands.operations.IUndoContext;
 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.session.ICdmEntitySessionEnabled;
 
 /**
  * <p>Abstract AbstractPostOperation class.</p>
@@ -27,64 +28,78 @@ import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  */
 public abstract class AbstractPostTaxonOperation extends AbstractPostOperation<Taxon> {
 
-       /**
-        * A reference to the taxons TaxonNode
-        */
-       protected ITaxonTreeNode taxonNode;
-
-       protected UUID parentNodeUuid;
-
-
-       /**
-        * <p>Constructor for AbstractPostOperation.</p>
-        *
-        * @param label a {@link java.lang.String} object.
-        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
-        * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
-        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
-        */
-       public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
-                       Taxon taxon, IPostOperationEnabled postOperationEnabled) {
-               super(label, undoContext, taxon, postOperationEnabled);
-       }
-
-       /**
-        * <p>Constructor for AbstractPostOperation.</p>
-        *
-        * @param label a {@link java.lang.String} object.
-        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
-        * @param taxonNode a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
-        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
-        */
-       public AbstractPostTaxonOperation(String label, IUndoContext undoContext, TaxonNode taxonNode, IPostOperationEnabled postOperationEnabled){
-               this(label, undoContext, taxonNode.getTaxon(), postOperationEnabled);
-               this.taxonNode = taxonNode;
-       }
-
-       /**
-        * <p>Constructor for AbstractPostOperation.</p>
-        *
-        * @param label a {@link java.lang.String} object.
-        * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
-        * @param parentNodeUuid a {@link java.util.UUID} object.
-        * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
-        */
-       public AbstractPostTaxonOperation(String label, IUndoContext undoContext, UUID parentNodeUuid, IPostOperationEnabled postOperationEnabled){
-               super(label, undoContext, null, postOperationEnabled);
-               this.parentNodeUuid = parentNodeUuid;
-       }
-
-       /**
-        * <p>Constructor for AbstractPostOperation.</p>
-        *
-        * @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.
-        */
-       public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
-                       IPostOperationEnabled postOperationEnabled) {
-               super(label, undoContext, null, postOperationEnabled);
-       }
+    /**
+     * A reference to the taxons TaxonNode
+     */
+    protected ITaxonTreeNode taxonNode;
+
+    protected UUID parentNodeUuid;
+
+
+    /**
+     * <p>Constructor for AbstractPostOperation.</p>
+     *
+     * @param label a {@link java.lang.String} object.
+     * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
+     * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
+     * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+     */
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
+            Taxon taxon, IPostOperationEnabled postOperationEnabled) {
+        super(label, undoContext, taxon, postOperationEnabled, null);
+    }
+
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
+            Taxon taxon, IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+        super(label, undoContext, taxon, postOperationEnabled, cdmEntitySessionEnabled);
+    }
+
+    /**
+     * <p>Constructor for AbstractPostOperation.</p>
+     *
+     * @param label a {@link java.lang.String} object.
+     * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
+     * @param taxonNode a {@link eu.etaxonomy.cdm.model.taxon.TaxonNode} object.
+     * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+     */
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext, TaxonNode taxonNode, IPostOperationEnabled postOperationEnabled){
+        this(label, undoContext, taxonNode, postOperationEnabled, null);
+    }
+
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext, TaxonNode taxonNode, IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled){
+        this(label, undoContext, taxonNode.getTaxon(), postOperationEnabled, cdmEntitySessionEnabled);
+        this.taxonNode = taxonNode;
+    }
+
+    /**
+     * <p>Constructor for AbstractPostOperation.</p>
+     *
+     * @param label a {@link java.lang.String} object.
+     * @param undoContext a {@link org.eclipse.core.commands.operations.IUndoContext} object.
+     * @param parentNodeUuid a {@link java.util.UUID} object.
+     * @param postOperationEnabled a {@link eu.etaxonomy.taxeditor.operation.IPostOperationEnabled} object.
+     */
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext, UUID parentNodeUuid, IPostOperationEnabled postOperationEnabled){
+        super(label, undoContext, null, postOperationEnabled, null);
+        this.parentNodeUuid = parentNodeUuid;
+    }
+
+    /**
+     * <p>Constructor for AbstractPostOperation.</p>
+     *
+     * @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.
+     */
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
+            IPostOperationEnabled postOperationEnabled) {
+        super(label, undoContext, null, postOperationEnabled, null);
+    }
+
+    public AbstractPostTaxonOperation(String label, IUndoContext undoContext,
+            IPostOperationEnabled postOperationEnabled, ICdmEntitySessionEnabled cdmEntitySessionEnabled) {
+        super(label, undoContext, null, postOperationEnabled, cdmEntitySessionEnabled);
+    }
 
     /**
      * @param text
index df90397af4c901336471623a5ae1f7ac5fc24536..d3370b5602609de64bc3f368c3f5305a3a42d199 100644 (file)
@@ -14,6 +14,7 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.strategy.match.MatchException;
+import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator.MatchStrategy;
 import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -87,8 +88,8 @@ public class ParseHandler{
         * @param unparsedNameString a {@link java.lang.String} object.
         * @return a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object.
         */
-       public static TaxonNameBase parseReferencedName(String unparsedNameString, Rank rank){
-               TaxonNameBase name = nonViralNameParser.parseReferencedName(unparsedNameString,
+       public static NonViralName parseReferencedName(String unparsedNameString, Rank rank){
+           NonViralName name = nonViralNameParser.parseReferencedName(unparsedNameString,
                                PreferencesUtil.getPreferredNomenclaturalCode(), rank);
 
 //             if (name.hasProblem()) {
@@ -98,8 +99,8 @@ public class ParseHandler{
                return name;
        }
 
-       public static TaxonNameBase parseName(String unparsedNameString, Rank rank){
-               TaxonNameBase name = nonViralNameParser.parseFullName(unparsedNameString,
+       public static NonViralName parseName(String unparsedNameString, Rank rank){
+               NonViralName name = nonViralNameParser.parseFullName(unparsedNameString,
                                PreferencesUtil.getPreferredNomenclaturalCode(), rank);
 
                return name;
@@ -111,7 +112,7 @@ public class ParseHandler{
         *
         * @return a {@link eu.etaxonomy.cdm.model.name.TaxonNameBase} object.
         */
-       public static TaxonNameBase createEmptyName(){
+       public static NonViralName createEmptyName(){
                return nonViralNameParser.getNonViralNameInstance("", PreferencesUtil.getPreferredNomenclaturalCode());
        }
 
@@ -301,7 +302,9 @@ public class ParseHandler{
             return new ArrayList<INomenclaturalReference>();
         }
                try{
-                       return CdmStore.getCommonService().findMatching(nomenclaturalReference, MatchStrategyConfigurator.ReferenceMatchStrategy());
+
+                       return CdmStore.getCommonService().findMatching(nomenclaturalReference, MatchStrategy.Reference);
+
                }catch (MatchException e) {
                        MessagingUtils.error(this.getClass(), "Error finding matching references", e);
                }
@@ -319,7 +322,9 @@ public class ParseHandler{
                }
 
                try{
-                       return CdmStore.getCommonService().findMatching(authorTeam, MatchStrategyConfigurator.TeamOrPersonMatchStrategy());
+
+                       return CdmStore.getCommonService().findMatching(authorTeam, MatchStrategy.TeamOrPerson);
+
                }catch (MatchException e) {
                        MessagingUtils.error(this.getClass(), "Error finding matching authors", e);
                }
@@ -333,7 +338,9 @@ public class ParseHandler{
        private List<TaxonNameBase> findMatchingLatinNames(TaxonNameBase taxonNameBase) {
 
                try {
-                       return CdmStore.getCommonService().findMatching(taxonNameBase, MatchStrategyConfigurator.NonViralNameMatchStrategy());
+
+                       return CdmStore.getCommonService().findMatching(taxonNameBase, MatchStrategy.NonViralName);
+
 
                } catch (MatchException e) {
                        MessagingUtils.error(this.getClass(), "Error finding matching names", e);
index e09625ccecdfd2c3703a481ef9be111123a26838..6d2ddb9bc92792faa37e28d4b6bfc938a0a071ed 100644 (file)
@@ -33,7 +33,7 @@ import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.MatchException;
 import eu.etaxonomy.cdm.strategy.match.MatchMode;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.parser.MatchStrategyConfigurator;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
@@ -208,7 +208,7 @@ public abstract class AbstractMatchingPreferences<T extends IdentifiableEntity>
        /** {@inheritDoc} */
        @Override
        protected void performApply() {
-               MatchStrategyConfigurator.setMatchStrategy(matchStrategy);
+           PreferencesUtil.setMatchStrategy(matchStrategy);
                super.performApply();
        }
 
index 72acd566669b98c4b4ce9b457b67dfe03ed6c871..339232c7aacf8f14bab108f5f394c505bf0b472f 100644 (file)
@@ -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.
 */
@@ -15,8 +15,8 @@ import org.eclipse.ui.IWorkbench;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.MatchException;
+import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.parser.MatchStrategyConfigurator;
 
 /**
  * <p>NonViralNameMatchingPreference class.</p>
@@ -31,9 +31,10 @@ public class NonViralNameMatchingPreference extends AbstractMatchingPreferences<
         * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
         */
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench) {
+       @Override
+    public void init(IWorkbench workbench) {
                clazz = NonViralName.class;
-               
+
                try {
                        matchStrategy = MatchStrategyConfigurator.NonViralNameMatchStrategy();
                } catch (MatchException e) {
@@ -41,7 +42,7 @@ public class NonViralNameMatchingPreference extends AbstractMatchingPreferences<
                        throw new RuntimeException(e);
                }
        }
-       
+
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.preference.matching.AbstractMatchingPreferences#getDefaultMatchStrategy()
         */
index fd3fbdd32b24422a08f29d27e8996f0d9b10e46f..9a578c0c4a929a2dee67474f21f5689e1afd795d 100644 (file)
@@ -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.
 */
@@ -15,8 +15,8 @@ import org.eclipse.ui.IWorkbench;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.MatchException;
+import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.parser.MatchStrategyConfigurator;
 
 /**
  * <p>ReferenceMatchingPreference class.</p>
@@ -31,9 +31,10 @@ public class ReferenceMatchingPreference extends AbstractMatchingPreferences<Ref
         * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
         */
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench) {
+       @Override
+    public void init(IWorkbench workbench) {
                clazz = Reference.class;
-               
+
                try {
                        matchStrategy = MatchStrategyConfigurator.ReferenceMatchStrategy();
                } catch (MatchException e) {
index 4cce0cf6d817a637996a5c037c71046b476d07be..fac1a2b109ec0a634cccc5d2ae4a76c0218fc0f4 100644 (file)
@@ -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.
 */
@@ -15,8 +15,8 @@ import org.eclipse.ui.IWorkbench;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
 import eu.etaxonomy.cdm.strategy.match.MatchException;
+import eu.etaxonomy.cdm.strategy.match.MatchStrategyConfigurator;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
-import eu.etaxonomy.taxeditor.parser.MatchStrategyConfigurator;
 
 /**
  * <p>TeamOrPersonMatchingPreference class.</p>
@@ -32,17 +32,18 @@ public class TeamOrPersonMatchingPreference extends
         * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
         */
        /** {@inheritDoc} */
-       public void init(IWorkbench workbench) {
+       @Override
+    public void init(IWorkbench workbench) {
 
                clazz = TeamOrPersonBase.class;
-               
+
                try {
                        matchStrategy = MatchStrategyConfigurator.TeamOrPersonMatchStrategy();
                } catch (MatchException e) {
                        MessagingUtils.error(this.getClass(), e);
                        throw new RuntimeException(e);
                }
-       }       
+       }
 
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.preference.matching.AbstractMatchingPreferences#getDefaultMatchStrategy()
index 39e46a4fa366291775432879d4198448a756f71f..804ab05343b56cea5f63f04735025a1eaab9c421 100644 (file)
@@ -25,6 +25,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContext;
 import org.springframework.security.core.context.SecurityContextHolder;
 
+import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.service.ICommonService;
@@ -37,13 +38,15 @@ import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.CRUD;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.ICdmPermissionEvaluator;
 import eu.etaxonomy.cdm.persistence.hibernate.permission.Role;
-import eu.etaxonomy.cdm.remote.CdmRemoteSourceException;
 import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
 import eu.etaxonomy.taxeditor.io.ExportManager;
 import eu.etaxonomy.taxeditor.io.ImportManager;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySessionManager;
 import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
 import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
 
@@ -90,6 +93,8 @@ public class CdmStore {
 
        private boolean isConnected;
 
+
+
        /**
         * <p>
         * getDefault
@@ -116,9 +121,10 @@ public class CdmStore {
 
                ICdmSource cdmSource;
                try {
+
                        cdmSource = CdmDataSourceRepository.getCurrentCdmSource();
                        connect(cdmSource);
-               } catch (CdmRemoteSourceException e) {
+               } catch (Exception e) {
                        MessagingUtils.messageDialog("Connection to CDM Source Failed", CdmStore.class, "Could not connect to target CDM Source", e);
                }
 
@@ -146,6 +152,13 @@ public class CdmStore {
        private static void connect(final ICdmSource cdmSource,
                        final DbSchemaValidation dbSchemaValidation,
                        final Resource applicationContextBean) {
+           if(isActive()) {
+               // before we connect we clear the caches and the sessions
+               CdmRemoteCacheManager.getInstance().getDefaultCacheManager().removalAll();
+               if(getCurrentSessionManager() != null) {
+                   getCurrentSessionManager().disposeAll();
+               }
+           }
                MessagingUtils.info("Connecting to datasource: " + cdmSource);
 
                job = new CdmStoreConnector(Display.getDefault(), cdmSource,
@@ -245,7 +258,7 @@ public class CdmStore {
        public static ConversationHolder createConversation() {
                ConversationHolder conversation = getCurrentApplicationConfiguration()
                                .NewConversation();
-               try{
+               try {
                        conversation.startTransaction();
                }catch(Exception e){
                        MessagingUtils.messageDialog("No database connection", CdmStore.class, "No database connection available", e);
@@ -253,6 +266,30 @@ public class CdmStore {
                return conversation;
        }
 
+       //FIXME:Remoting should be removed after moving completely to remoting
+       private MockCdmEntitySessionManager mockCdmEntitySessionManager;
+
+       private ICdmEntitySessionManager getSessionManager() {
+               //FIXME:Remoting we should only have CdmApplicationRemoteConfiguration after move to remoting
+               //               bad hack which should be finally removed
+               if(getCurrentApplicationConfiguration() instanceof CdmApplicationRemoteController) {
+                       return ((CdmApplicationRemoteController)getCurrentApplicationConfiguration()).getCdmEntitySessionManager();
+               } else {
+                       if(mockCdmEntitySessionManager == null) {
+                               mockCdmEntitySessionManager = new MockCdmEntitySessionManager();
+                       }
+                       return mockCdmEntitySessionManager;
+               }
+       }
+
+       public static  ICdmEntitySessionManager getCurrentSessionManager() {
+               if (getDefault() != null) {
+                       return getDefault().getSessionManager();
+               }
+               return 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
index e7c5aa0b74c608e7ec35e6b78ce4149637f486af..f1b5e38ad942d63699da7fbc51c24ca88b6faae3 100644 (file)
@@ -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,9 +28,9 @@ import eu.etaxonomy.cdm.config.ICdmSource;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
-import eu.etaxonomy.cdm.remote.ICdmRemoteSource;
 import eu.etaxonomy.taxeditor.model.CdmProgressMonitorAdapter;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
 import eu.etaxonomy.taxeditor.ui.dialog.LoginDialog;
 import eu.etaxonomy.taxeditor.view.datasource.CdmDataSourceViewPart;
 
@@ -64,7 +64,7 @@ class CdmStoreConnector extends Job {
        public IStatus run(final IProgressMonitor monitor) {
 
                monitor.beginTask(getConnectionMessage(), 10);
-               
+
                // check if database is up and running
                checkDatabaseReachable(monitor);
 
@@ -106,8 +106,8 @@ class CdmStoreConnector extends Job {
                                Thread.currentThread().setPriority(oldPriority);
                        }
                }
-               
-               
+
+
 
                if (!monitor.isCanceled()) {
                        CdmStore.setInstance(applicationController, cdmSource);
@@ -115,7 +115,7 @@ class CdmStoreConnector extends Job {
                        display.asyncExec(new Runnable() {
                                /*
                                 * (non-Javadoc)
-                                * 
+                                *
                                 * @see java.lang.Runnable#run()
                                 */
                                @Override
@@ -133,7 +133,7 @@ class CdmStoreConnector extends Job {
                        display.asyncExec(new Runnable() {
                                /*
                                 * (non-Javadoc)
-                                * 
+                                *
                                 * @see java.lang.Runnable#run()
                                 */
                                @Override
@@ -148,14 +148,14 @@ class CdmStoreConnector extends Job {
 
        private ICdmApplicationConfiguration getApplicationController(ICdmSource cdmSource, CdmProgressMonitorAdapter subprogressMonitor) {
                if(cdmSource instanceof ICdmDataSource) {
-                       return  CdmApplicationController.NewInstance(applicationContextBean, 
-                                       (ICdmDataSource)cdmSource, 
+                       return  CdmApplicationController.NewInstance(applicationContextBean,
+                                       (ICdmDataSource)cdmSource,
                                        dbSchemaValidation,
-                                       false, 
+                                       false,
                                        subprogressMonitor);
                } else if(cdmSource instanceof ICdmRemoteSource) {
-                       return CdmApplicationRemoteController.NewInstance((ICdmRemoteSource)cdmSource,                                  
-                                                       false, 
+                       return CdmApplicationRemoteController.NewInstance((ICdmRemoteSource)cdmSource,
+                                                       false,
                                                        subprogressMonitor,
                                                        null);
                } else {
@@ -237,7 +237,7 @@ class CdmStoreConnector extends Job {
                        return causeIsCancelationExceptionRecursive(throwable.getCause());
                }
        }
-       
+
        private void checkDatabaseReachable(IProgressMonitor monitor) {
                try {
                        monitor.subTask("Checking if datasource is reachable.");
@@ -247,6 +247,6 @@ class CdmStoreConnector extends Job {
                        MessagingUtils.messageDialog("Could not connect to chosen datasource",
                                        this, "Reason: " + e.getMessage(), e);
                        monitor.setCanceled(true);
-               } 
+               }
        }
 }
index b01cd9a978f456ed467e020e79a3a4f890d9391e..540ed4a692ceed4c277de05ce20cd7c732da37fc 100644 (file)
@@ -88,6 +88,7 @@ public class LoginManager extends Observable implements IConversationEnabled, IC
                                logger.debug("User authenticated: " + user.getUsername() + "\n" + gaText.toString());
                        }
 
+                       authentication = new UsernamePasswordAuthenticationToken(username,password, authentication.getAuthorities());
                        SecurityContextHolder.getContext().setAuthentication(authentication);
 
                        if(!authentication.equals(lastAuthentication)){
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/RemotingLoginDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/RemotingLoginDialog.java
new file mode 100644 (file)
index 0000000..37ba28d
--- /dev/null
@@ -0,0 +1,401 @@
+// $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.dialog;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Dialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.remoting.server.CDMServerException;
+import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo;
+import eu.etaxonomy.taxeditor.remoting.source.CdmServerInfo.CdmInstanceInfo;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author cmathew
+ * @date 20 Jan 2015
+ *
+ */
+public class RemotingLoginDialog extends Dialog {
+
+    protected Object result;
+    protected Shell shlConnect;
+    private Text txtPort;
+    private Text txtCdmServerStatus;
+    private Text txtCdmInstanceStatus;
+    private Combo comboCdmServer;
+    private Combo comboCdmInstance;
+    private Button btnConnect;
+
+    private final Map<String, CdmServerInfo> csiiMap = new HashMap<String, CdmServerInfo>();
+
+    private final String STATUS_AVAILABLE = "Available";
+    private final String STATUS_NOT_AVAILABLE = "Not Available";
+    private final String STATUS_RETRIEVING = "Retrieving ...";
+    private final String STATUS_CHECKING_AVAILABILITY = "Checking ...";
+    private final String STATUS_NO_INSTANCES = "No Instances Found";
+    private final String STATUS_ERROR = "Error";
+    private final String STATUS_REMOTING_NOT_ACTIVATED = "Remoting not activated";
+
+    private CdmServerInfo selectedCsii;
+    private CdmInstanceInfo selectedCdmInstance;
+    private Button btnCdmServerRefresh;
+
+
+    /**
+     * Create the dialog.
+     * @param parent
+     * @param style
+     */
+    public RemotingLoginDialog(Shell parent, int style) {
+        super(parent, style);
+        setText("Login");
+    }
+
+    /**
+     * Open the dialog.
+     * @return the result
+     */
+    public Object open() {
+        ICdmRemoteSource devRemoteSource = CdmServerInfo.getDevServerRemoteSource();
+        if(devRemoteSource != null) {
+            connect(devRemoteSource);
+        } else {
+            createContents();
+            populateCdmServerCombo();
+            shlConnect.open();
+            shlConnect.layout();
+
+            Display display = getParent().getDisplay();
+
+            while (!shlConnect.isDisposed()) {
+                if (!display.readAndDispatch()) {
+                    display.sleep();
+                }
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Create contents of the dialog.
+     */
+    private void createContents() {
+        shlConnect = new Shell(getParent(), getStyle());
+        shlConnect.setSize(490, 157);
+        shlConnect.setText("Connect");
+        shlConnect.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+        Composite composite = new Composite(shlConnect, SWT.NONE);
+        FillLayout fl_composite = new FillLayout(SWT.VERTICAL);
+        fl_composite.spacing = 5;
+        composite.setLayout(fl_composite);
+
+        Composite remotingComposite = new Composite(composite, SWT.NONE);
+        FillLayout fl_remotingComposite = new FillLayout(SWT.VERTICAL);
+        fl_remotingComposite.spacing = 5;
+        remotingComposite.setLayout(fl_remotingComposite);
+
+        Composite cdmServerComposite = new Composite(remotingComposite, SWT.NONE);
+        cdmServerComposite.setLayout(new GridLayout(6, false));
+
+        Label lblCdmServer = new Label(cdmServerComposite, SWT.NONE);
+        lblCdmServer.setText("CDM Server : ");
+        lblCdmServer.setFont(SWTResourceManager.getFont("Ubuntu", 9, SWT.NORMAL));
+        lblCdmServer.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+
+        comboCdmServer = new Combo(cdmServerComposite, SWT.READ_ONLY);
+        comboCdmServer.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                refreshCdmServer();
+            }
+        });
+        GridData gd_comboCdmServer = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
+        gd_comboCdmServer.widthHint = 150;
+        comboCdmServer.setLayoutData(gd_comboCdmServer);
+        comboCdmServer.select(0);
+
+        Label lblPortSeparator = new Label(cdmServerComposite, SWT.NONE);
+        lblPortSeparator.setText(" :  ");
+
+        txtPort = new Text(cdmServerComposite, SWT.BORDER);
+        GridData gd_txtPort = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
+        gd_txtPort.widthHint = 50;
+        txtPort.setLayoutData(gd_txtPort);
+
+        txtCdmServerStatus = new Text(cdmServerComposite, SWT.BORDER);
+        txtCdmServerStatus.setBackground(SWTResourceManager.getColor(SWT.COLOR_INFO_BACKGROUND));
+        txtCdmServerStatus.setEditable(false);
+        GridData gd_txtCdmServerStatus = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+        gd_txtCdmServerStatus.widthHint = 100;
+        txtCdmServerStatus.setLayoutData(gd_txtCdmServerStatus);
+
+        btnCdmServerRefresh = new Button(cdmServerComposite, SWT.NONE);
+        btnCdmServerRefresh.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                refreshCdmServer();
+            }
+        });
+        btnCdmServerRefresh.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+        btnCdmServerRefresh.setText("Refresh");
+
+        Label lblCdmInstance = new Label(cdmServerComposite, SWT.NONE);
+        GridData gd_lblCdmInstance = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
+        gd_lblCdmInstance.heightHint = 30;
+        lblCdmInstance.setLayoutData(gd_lblCdmInstance);
+        lblCdmInstance.setText("CDM Instance : ");
+        lblCdmInstance.setFont(SWTResourceManager.getFont("Ubuntu", 9, SWT.NORMAL));
+
+        comboCdmInstance = new Combo(cdmServerComposite, SWT.READ_ONLY);
+        comboCdmInstance.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                updateSelectedCdmInstance();
+                checkSelectedCdmServerInstance();
+            }
+        });
+        GridData gd_comboCdmInstance = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1);
+        gd_comboCdmInstance.widthHint = 150;
+        comboCdmInstance.setLayoutData(gd_comboCdmInstance);
+        comboCdmInstance.select(0);
+
+        txtCdmInstanceStatus = new Text(cdmServerComposite, SWT.BORDER);
+        txtCdmInstanceStatus.setBackground(SWTResourceManager.getColor(SWT.COLOR_INFO_BACKGROUND));
+        txtCdmInstanceStatus.setEditable(false);
+        GridData gd_txtCdmInstanceStatus = new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1);
+        gd_txtCdmInstanceStatus.widthHint = 100;
+        txtCdmInstanceStatus.setLayoutData(gd_txtCdmInstanceStatus);
+
+        Button btnCdmInstanceRefresh = new Button(cdmServerComposite, SWT.FLAT);
+        btnCdmInstanceRefresh.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                refreshCdmInstance();
+            }
+        });
+        GridData gd_btnCdmInstanceRefresh = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+        gd_btnCdmInstanceRefresh.widthHint = 110;
+        gd_btnCdmInstanceRefresh.heightHint = 30;
+        btnCdmInstanceRefresh.setLayoutData(gd_btnCdmInstanceRefresh);
+        btnCdmInstanceRefresh.setText("Refresh");
+        new Label(cdmServerComposite, SWT.NONE);
+
+        btnConnect = new Button(cdmServerComposite, SWT.FLAT);
+        btnConnect.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mouseUp(MouseEvent e) {
+                int selInstanceIndex = comboCdmInstance.getSelectionIndex();
+                String instance = comboCdmInstance.getItem(selInstanceIndex);
+                checkSelectedCdmServerInstance();
+                connect(selectedCsii.getCdmRemoteSource(selectedCdmInstance));
+            }
+        });
+        GridData gd_btnConnect = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+        gd_btnConnect.heightHint = 30;
+        btnConnect.setLayoutData(gd_btnConnect);
+        btnConnect.setText("Connect");
+        new Label(cdmServerComposite, SWT.NONE);
+        new Label(cdmServerComposite, SWT.NONE);
+        new Label(cdmServerComposite, SWT.NONE);
+        new Label(cdmServerComposite, SWT.NONE);
+
+    }
+
+    private void populateCdmServerCombo() {
+        Job job = new Job("Retrieve Server Instances") {
+            @Override
+            protected IStatus run(IProgressMonitor monitor) {
+                Display.getDefault().asyncExec(new Runnable() {
+                    @Override
+                    public void run() {
+                        for(CdmServerInfo csii : CdmServerInfo.getCdmServers()) {
+                            csiiMap.put(csii.getName(), csii);
+                            comboCdmServer.add(csii.getName());
+                        }
+                        comboCdmServer.select(0);
+                        refreshCdmServer();
+                    }
+                });
+                return Status.OK_STATUS;
+            }
+        };
+        job.schedule();
+    }
+
+
+    private void refreshCdmServer() {
+        txtCdmServerStatus.setText(STATUS_CHECKING_AVAILABILITY);
+        updateSelectedCdmServer();
+        updatePort();
+        checkSelectedCdmServer();
+    }
+
+    private void updateSelectedCdmServer() {
+        int selIndex = comboCdmServer.getSelectionIndex();
+        if(selIndex != -1) {
+            selectedCsii = csiiMap.get(comboCdmServer.getItem(selIndex));
+        }
+    }
+
+    private void updatePort() {
+        txtPort.setText("");
+        if(selectedCsii != null) {
+            txtPort.setText(String.valueOf(selectedCsii.getPort()));
+        }
+    }
+
+    private void checkSelectedCdmServer() {
+        int selIndex = comboCdmServer.getSelectionIndex();
+        txtCdmInstanceStatus.setText("");
+        if(selectedCsii != null) {
+            if(selectedCsii.pingServer()) {
+                txtCdmServerStatus.setText(STATUS_AVAILABLE);
+                populateCdmInstanceCombo(true);
+            } else {
+                txtCdmServerStatus.setText(STATUS_NOT_AVAILABLE);
+                comboCdmInstance.removeAll();
+            }
+        }
+    }
+
+
+    private void populateCdmInstanceCombo(final boolean forceRefresh) {
+        comboCdmInstance.removeAll();
+        comboCdmInstance.setEnabled(false);
+        btnConnect.setEnabled(false);
+        txtCdmInstanceStatus.setText(STATUS_RETRIEVING);
+        Job job = new Job("Retrieve Server Instances") {
+            @Override
+            protected IStatus run(IProgressMonitor monitor) {
+                try {
+                    if(selectedCsii != null) {
+                        if(forceRefresh) {
+                            selectedCsii.refreshInstances();
+                        }
+                        final List<CdmInstanceInfo> instances = selectedCsii.getInstances();
+                        Display.getDefault().asyncExec(new Runnable() {
+                            @Override
+                            public void run() {
+                                if(!instances.isEmpty()) {
+                                    for(CdmInstanceInfo cdmInstance : instances) {
+                                        comboCdmInstance.add(cdmInstance.getName());
+                                    }
+                                    comboCdmInstance.select(0);
+                                    updateSelectedCdmInstance();
+                                    checkSelectedCdmServerInstance();
+                                    comboCdmInstance.setEnabled(true);
+                                } else {
+                                    txtCdmInstanceStatus.setText(STATUS_NO_INSTANCES);
+                                    btnConnect.setEnabled(false);
+                                }
+                            }
+                        });
+                    }
+                } catch (CDMServerException e) {
+                    MessagingUtils.warn(getClass(), e);
+                    Display.getDefault().asyncExec(new Runnable() {
+                        @Override
+                        public void run() {
+                            txtCdmInstanceStatus.setText(STATUS_REMOTING_NOT_ACTIVATED);
+                            comboCdmInstance.setEnabled(false);
+                            btnConnect.setEnabled(false);
+                        }
+                    });
+                }
+                return Status.OK_STATUS;
+            }
+        };
+
+        if(txtCdmServerStatus.getText().equals(STATUS_AVAILABLE)) {
+            // Start the Job
+            job.schedule();
+        }
+
+    }
+
+    private void refreshCdmInstance() {
+        txtCdmInstanceStatus.setText(STATUS_CHECKING_AVAILABILITY);
+        updateSelectedCdmInstance();
+        checkSelectedCdmServerInstance();
+    }
+
+    private void updateSelectedCdmInstance() {
+        int selIndex = comboCdmInstance.getSelectionIndex();
+        if(selIndex != -1) {
+            selectedCdmInstance = selectedCsii.getInstanceFromName(comboCdmInstance.getItem(selIndex));
+        }
+    }
+
+    private void checkSelectedCdmServerInstance() {
+        if(txtCdmServerStatus.getText().equals(STATUS_AVAILABLE)) {
+            try {
+                if(selectedCsii.pingInstance(selectedCdmInstance)) {
+                    txtCdmInstanceStatus.setText(STATUS_AVAILABLE);
+                    btnConnect.setEnabled(true);
+                } else {
+                    txtCdmInstanceStatus.setText(STATUS_NOT_AVAILABLE);
+                    btnConnect.setEnabled(false);
+                }
+            } catch (Exception e) {
+                txtCdmInstanceStatus.setText(STATUS_NOT_AVAILABLE);
+                MessagingUtils.warn(this.getClass(), e);
+            }
+        }
+
+    }
+
+    private void connect(ICdmRemoteSource source) {
+        if(CdmStore.isConnecting()){
+            MessagingUtils.warningDialog("Already connecting", this, "You are currently connecting to a different CDM Instance already.");
+            return;
+        }
+
+        try {
+            CdmDataSourceRepository.changeDataSource(source);
+        } catch (Exception e) {
+            // Do not expect anything to go wrong at this point, so we throw a runtime exception
+            // if any problems
+            throw new RuntimeException(e);
+        }
+
+        if(shlConnect != null) {
+            shlConnect.dispose();
+        }
+    }
+
+
+}
index 2fbde5c73421208ea61890ec953ca7125ecf693b..03acaeb247bdf7d4af4a919fcf122eb5820d784e 100644 (file)
@@ -1,15 +1,18 @@
 // $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.view;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -31,6 +34,8 @@ import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 
 /**
  * <p>Abstract AbstractCdmViewPart class.</p>
@@ -39,59 +44,59 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  * @created Jun 15, 2010
  * @version 1.0
  */
-public abstract class AbstractCdmViewPart extends ViewPart implements ISelectionListener, IPostOperationEnabled, IConversationEnabled, IDirtyMarkable{
+public abstract class AbstractCdmViewPart extends ViewPart implements ISelectionListener, IPostOperationEnabled, IConversationEnabled, ICdmEntitySessionEnabled, IDirtyMarkable{
 
-       protected ISelectionService selectionService;
+    protected ISelectionService selectionService;
 
-       public static IStructuredSelection EMPTY_SELECTION = new StructuredSelection();
+    public static IStructuredSelection EMPTY_SELECTION = new StructuredSelection();
 
-       protected IWorkbenchPart part;
+    protected IWorkbenchPart part;
 
     private PageBook pageBook;
 
-       private Label emptySelectionLabel;
+    private Label emptySelectionLabel;
 
-       private Composite viewerComposite;
+    private Composite viewerComposite;
 
-       /** {@inheritDoc} */
-       @Override
-       public void createPartControl(Composite parent) {
-               selectionService = getSite().getWorkbenchWindow().getSelectionService();
-               selectionService.addSelectionListener(this);
+    /** {@inheritDoc} */
+    @Override
+    public void createPartControl(Composite parent) {
+        selectionService = getSite().getWorkbenchWindow().getSelectionService();
+        selectionService.addSelectionListener(this);
 
-               pageBook = new PageBook(parent, SWT.NULL);
-               //create viewerComposite
-               viewerComposite = new SashForm(pageBook, SWT.HORIZONTAL);
-               createViewer(viewerComposite);
+        pageBook = new PageBook(parent, SWT.NULL);
+        //create viewerComposite
+        viewerComposite = new SashForm(pageBook, SWT.HORIZONTAL);
+        createViewer(viewerComposite);
 
-               // Page 2: Nothing selected
+        // Page 2: Nothing selected
         emptySelectionLabel = new Label(pageBook, SWT.TOP + SWT.LEFT + SWT.WRAP);
 
         setInitialSelection();
-       }
-
-       /**
-        *
-        */
-       private void setInitialSelection() {
-               selectionChanged(AbstractUtility.getActivePart(), getInitialSelection());
-       }
-
-       /**
-        * <p>getInitialSelection</p>
-        *
-        * @return a {@link org.eclipse.jface.viewers.ISelection} object.
-        */
-       protected ISelection getInitialSelection() {
-               return selectionService.getSelection();
-       }
-
-       /**
-        * <p>showEmptyPage</p>
-        */
-       public void showEmptyPage(){
-               pageBook.showPage(emptySelectionLabel);
-       }
+    }
+
+    /**
+     *
+     */
+    private void setInitialSelection() {
+        selectionChanged(AbstractUtility.getActivePart(), getInitialSelection());
+    }
+
+    /**
+     * <p>getInitialSelection</p>
+     *
+     * @return a {@link org.eclipse.jface.viewers.ISelection} object.
+     */
+    protected ISelection getInitialSelection() {
+        return selectionService.getSelection();
+    }
+
+    /**
+     * <p>showEmptyPage</p>
+     */
+    public void showEmptyPage(){
+        pageBook.showPage(emptySelectionLabel);
+    }
 
     /**
      * <p>showViewer</p>
@@ -100,13 +105,13 @@ public abstract class AbstractCdmViewPart extends ViewPart implements ISelection
      * @param selection a {@link org.eclipse.jface.viewers.ISelection} object.
      */
     public void showViewer(IWorkbenchPart part, IStructuredSelection selection){
-       this.part = part;
+        this.part = part;
 
-               Object element = selection.getFirstElement();
+        Object element = selection.getFirstElement();
 
-               getViewer().setInput(element);
+        getViewer().setInput(element);
 
-               showViewer();
+        showViewer();
     }
 
     /**
@@ -116,76 +121,92 @@ public abstract class AbstractCdmViewPart extends ViewPart implements ISelection
      */
     public abstract Viewer getViewer();
 
-       /**
-        * <p>showViewer</p>
-        */
-       public void showViewer(){
-               pageBook.showPage(viewerComposite);
+    /**
+     * <p>showViewer</p>
+     */
+    public void showViewer(){
+        pageBook.showPage(viewerComposite);
     }
 
-       public void setEnabled(boolean enabled){
-               pageBook.setEnabled(enabled);
-       }
-
-       /** {@inheritDoc} */
-       @Override
-       public void setFocus() {
-               if(getConversationHolder() != null){
-                       getConversationHolder().bind();
-               }
-               getViewer().getControl().setFocus();
-       }
-
-       /**
-        * <p>createViewer</p>
-        *
-        * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
-        */
-       public abstract void createViewer(Composite parent);
-
-       /** {@inheritDoc} */
-       @Override
+    public void setEnabled(boolean enabled){
+        pageBook.setEnabled(enabled);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void setFocus() {
+        if(getConversationHolder() != null){
+            getConversationHolder().bind();
+        }
+        if(getCdmEntitySession() != null){
+            getCdmEntitySession().bind();
+        }
+        getViewer().getControl().setFocus();
+    }
+
+    /**
+     * <p>createViewer</p>
+     *
+     * @param parent a {@link org.eclipse.swt.widgets.Composite} object.
+     */
+    public abstract void createViewer(Composite parent);
+
+    /** {@inheritDoc} */
+    @Override
     public boolean postOperation(CdmBase objectAffectedByOperation) {
-               changed(objectAffectedByOperation);
-               return true;
-       }
+        changed(objectAffectedByOperation);
+        return true;
+    }
 
-       /** {@inheritDoc} */
-       @Override
+    /** {@inheritDoc} */
+    @Override
     public abstract void changed(Object object);
 
-       /**
-        * <p>getConversationHolder</p>
-        *
-        * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
-        */
-       @Override
+    /**
+     * <p>getConversationHolder</p>
+     *
+     * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder} object.
+     */
+    @Override
     public ConversationHolder getConversationHolder() {
-               if(part != null && part instanceof IConversationEnabled) {
+        if(part != null && part instanceof IConversationEnabled) {
             return ((IConversationEnabled) part).getConversationHolder();
         }
 
-               return null;
-       }
+        return null;
+    }
 
-       /** {@inheritDoc} */
-       @Override
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        if(part != null && part instanceof ICdmEntitySessionEnabled) {
+            return ((ICdmEntitySessionEnabled) part).getCdmEntitySession();
+        }
+        return null;
+    }
+
+    @Override
+    public  List<CdmBase> getRootEntities() {
+        return Arrays.asList((CdmBase)getViewer().getInput());
+    }
+
+    /** {@inheritDoc} */
+    @Override
     public void update(CdmDataChangeMap changeEvents) {
 
-       }
-
-       /** {@inheritDoc} */
-       @Override
-       public void dispose() {
-               selectionService.removeSelectionListener(this);
-               super.dispose();
-       }
-
-       /* (non-Javadoc)
-        * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
-        */
-       @Override
-       public void forceDirty() {
-           changed(null);
-       }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void dispose() {
+        selectionService.removeSelectionListener(this);
+        super.dispose();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
+     */
+    @Override
+    public void forceDirty() {
+        changed(null);
+    }
 }
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/InspectSessionsDialog.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/InspectSessionsDialog.java
new file mode 100644 (file)
index 0000000..003ecb2
--- /dev/null
@@ -0,0 +1,265 @@
+// $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.view.sessions;
+
+import java.util.List;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.Element;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StyledCellLabelProvider;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Dialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.FilteredTree;
+import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.etaxonomy.taxeditor.remoting.cache.CdmModelFieldPropertyFromClass;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
+import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
+import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult.CdmEntityInfo;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author cmathew
+ * @date 17 Feb 2015
+ *
+ */
+public class InspectSessionsDialog extends Dialog {
+
+    protected Object result;
+    protected Shell shlInspectSessions;
+    private Text txtDebugInfo;
+    private Label lblDebugInformation;
+
+    private final Cache cdmlibModelCache;
+
+    private final ICdmEntitySession activeSession;
+
+    private TreeViewer treeViewer;
+    private Button btnClose;
+    EntityCacherDebugResult ecdr;
+    private SashForm sashForm;
+    private Composite compositeDebug;
+    /**
+     * Create the dialog.
+     * @param parent
+     * @param style
+     */
+    public InspectSessionsDialog(Shell parent, int style) {
+        super(parent, style);
+        setText("Inspect Active Session");
+        cdmlibModelCache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
+        activeSession = CdmStore.getCurrentSessionManager().getActiveSession();
+        ecdr = activeSession.debug();
+    }
+
+    /**
+     * Open the dialog.
+     * @return the result
+     */
+    public Object open() {
+
+        createContents();
+        setDebugInfoText();
+        treeViewer.setContentProvider(new SessionsTreeContentProvider());
+        treeViewer.setLabelProvider(new SessionsTreeLabelProvider());
+        treeViewer.setInput(getRootElements());
+        shlInspectSessions.open();
+        shlInspectSessions.layout();
+        Display display = getParent().getDisplay();
+        while (!shlInspectSessions.isDisposed()) {
+            if (!display.readAndDispatch()) {
+                display.sleep();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Create contents of the dialog.
+     */
+    private void createContents() {
+        shlInspectSessions = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.RESIZE);
+        shlInspectSessions.setSize(641, 631);
+        shlInspectSessions.setText("Inspect Sessions");
+        shlInspectSessions.setLayout(new GridLayout(1, false));
+
+        sashForm = new SashForm(shlInspectSessions, SWT.VERTICAL);
+        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+
+        PatternFilter filter = new PatternFilter();
+        FilteredTree tree = new FilteredTree(sashForm, SWT.MULTI | SWT.H_SCROLL | SWT.BORDER
+                | SWT.V_SCROLL, filter, true);
+        treeViewer = tree.getViewer();
+        //treeViewer = new TreeViewer(sashForm, SWT.BORDER);
+        //Tree tree = treeViewer.getTree();
+
+        compositeDebug = new Composite(sashForm, SWT.NONE);
+        compositeDebug.setLayout(new GridLayout(1, false));
+
+        lblDebugInformation = new Label(compositeDebug, SWT.NONE);
+        lblDebugInformation.setAlignment(SWT.CENTER);
+        lblDebugInformation.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
+        lblDebugInformation.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+        lblDebugInformation.setText("Debug Information");
+
+        txtDebugInfo = new Text(compositeDebug, SWT.BORDER | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI);
+        txtDebugInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+        sashForm.setWeights(new int[] {338, 184});
+
+        btnClose = new Button(shlInspectSessions, SWT.NONE);
+        btnClose.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                shlInspectSessions.dispose();
+            }
+        });
+        GridData gd_btnClose = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+        gd_btnClose.widthHint = 70;
+        btnClose.setLayoutData(gd_btnClose);
+        btnClose.setText("Close");
+
+    }
+
+    private void setDebugInfoText() {
+        txtDebugInfo.setText(ecdr.toString());
+    }
+    private CdmEntityInfo[] getRootElements() {
+
+        List<CdmEntityInfo> rootElemnts = ecdr.getRootElements();
+        return rootElemnts.toArray(new CdmEntityInfo[rootElemnts.size()]);
+    }
+
+    class SessionsTreeContentProvider implements ITreeContentProvider {
+
+
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+         */
+        @Override
+        public void dispose() {
+
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+         */
+        @Override
+        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
+         */
+        @Override
+        public Object[] getElements(Object inputElement) {
+            return (CdmEntityInfo[])inputElement;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
+         */
+        @Override
+        public Object[] getChildren(Object parentElement) {
+            List<CdmEntityInfo> children = ((CdmEntityInfo)parentElement).getChildren();
+            return children.toArray();
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
+         */
+        @Override
+        public Object getParent(Object element) {
+            CdmEntityInfo cei = (CdmEntityInfo)element;
+            return cei.getParent();
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
+         */
+        @Override
+        public boolean hasChildren(Object element) {
+            List<CdmEntityInfo> children = ((CdmEntityInfo)element).getChildren();
+            if(children != null && !children.isEmpty()) {
+                return true;
+            } else {
+                return false;
+            }
+        }
+
+        public CdmModelFieldPropertyFromClass getFromCdmlibModelCache(String className) {
+            Element e = cdmlibModelCache.get(className);
+            if (e == null) {
+                return null;
+            } else {
+                return (CdmModelFieldPropertyFromClass) e.getObjectValue();
+            }
+        }
+
+    }
+
+    class SessionsTreeLabelProvider extends StyledCellLabelProvider implements ILabelProvider {
+
+        @Override
+        public void update(ViewerCell cell) {
+            CdmEntityInfo cei = (CdmEntityInfo)cell.getElement();
+            StyledString text = new StyledString();
+            if(cei != null) {
+                text.append(cei.getLabel());
+            }
+            cell.setText(text.toString());
+            cell.setStyleRanges(text.getStyleRanges());
+            super.update(cell);
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
+         */
+        @Override
+        public Image getImage(Object element) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        /* (non-Javadoc)
+         * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
+         */
+        @Override
+        public String getText(Object element) {
+            CdmEntityInfo cei = (CdmEntityInfo)element;
+            return cei.getLabel();
+        }
+    }
+}
+
+
diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/SessionsViewPart.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/sessions/SessionsViewPart.java
new file mode 100644 (file)
index 0000000..406e977
--- /dev/null
@@ -0,0 +1,340 @@
+// $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.view.sessions;
+
+import java.text.DecimalFormat;
+import java.util.Collection;
+
+import net.sf.ehcache.Cache;
+import net.sf.ehcache.statistics.LiveCacheStatistics;
+
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+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;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+import eu.etaxonomy.cdm.api.cache.CdmCacher;
+import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver;
+import eu.etaxonomy.taxeditor.store.CdmStore;
+
+/**
+ * @author cmathew
+ * @date 16 Feb 2015
+ *
+ */
+public class SessionsViewPart extends ViewPart implements ICdmEntitySessionManagerObserver {
+
+    public static final String ID = "eu.etaxonomy.taxeditor.view.sessions.SessionsViewPart"; //$NON-NLS-1$
+    public static final String OPEN_INSPECT_SESSIONS_DIALOG_ID =  "eu.etaxonomy.taxeditor.store.open.InspectSessionsDialog";
+    private Table tableSessions;
+
+    private final String[] titles = { "Owner", "In Memory", "On Disk"};
+
+    private final ICdmEntitySessionManager cdmEntitySessionManager;
+    private Text txtNoOfSessions;
+    private Text txtNoOfCaches;
+    private Text txtDefaultInMemory;
+    private Text txtCdmModelInMemory;
+    private Text txtCdmModelOnDisk;
+    private Text txtDefaultOnDisk;
+
+    public SessionsViewPart() {
+        this.cdmEntitySessionManager = CdmStore.getCurrentSessionManager();
+        if(cdmEntitySessionManager != null) {
+            cdmEntitySessionManager.addSessionObserver(this);
+        }
+    }
+
+    /**
+     * Create contents of the view part.
+     * @param parent
+     */
+    @Override
+    public void createPartControl(Composite parent) {
+        Composite container = new Composite(parent, SWT.NONE);
+        container.setLayout(new GridLayout(5, false));
+        {
+            Label lblNoOfSessions = new Label(container, SWT.NONE);
+            lblNoOfSessions.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblNoOfSessions.setAlignment(SWT.RIGHT);
+            GridData gd_lblNoOfSessions = new GridData(SWT.RIGHT, SWT.FILL, false, false, 1, 1);
+            gd_lblNoOfSessions.widthHint = 115;
+            gd_lblNoOfSessions.minimumHeight = 30;
+            lblNoOfSessions.setLayoutData(gd_lblNoOfSessions);
+            lblNoOfSessions.setText("No. of Sessions : ");
+        }
+        {
+            txtNoOfSessions = new Text(container, SWT.BORDER);
+            txtNoOfSessions.setEditable(false);
+            txtNoOfSessions.setBackground(SWTResourceManager.getColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT));
+            GridData gd_txtNoOfSessions = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtNoOfSessions.widthHint = 50;
+            txtNoOfSessions.setLayoutData(gd_txtNoOfSessions);
+        }
+        new Label(container, SWT.NONE);
+        new Label(container, SWT.NONE);
+        new Label(container, SWT.NONE);
+        {
+            Label lblNoOfCaches = new Label(container, SWT.CENTER);
+            lblNoOfCaches.setAlignment(SWT.RIGHT);
+            lblNoOfCaches.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            GridData gd_lblNoOfCaches = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
+            gd_lblNoOfCaches.widthHint = 150;
+            lblNoOfCaches.setLayoutData(gd_lblNoOfCaches);
+            lblNoOfCaches.setText("No. of entity caches : ");
+        }
+        {
+            txtNoOfCaches = new Text(container, SWT.BORDER);
+            txtNoOfCaches.setEditable(false);
+            GridData gd_txtNoOfCaches = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtNoOfCaches.widthHint = 50;
+            txtNoOfCaches.setLayoutData(gd_txtNoOfCaches);
+        }
+        new Label(container, SWT.NONE);
+        new Label(container, SWT.NONE);
+        new Label(container, SWT.NONE);
+
+        {
+            Label lblDefaultCache = new Label(container, SWT.CENTER);
+            lblDefaultCache.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+            lblDefaultCache.setText("Default Cache, ");
+            lblDefaultCache.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblDefaultCache.setAlignment(SWT.RIGHT);
+        }
+        {
+            Label lblDefaultInMemory = new Label(container, SWT.CENTER);
+            lblDefaultInMemory.setText("in Memory : ");
+            lblDefaultInMemory.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblDefaultInMemory.setAlignment(SWT.RIGHT);
+            lblDefaultInMemory.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+        }
+        {
+            txtDefaultInMemory = new Text(container, SWT.BORDER);
+            txtDefaultInMemory.setEditable(false);
+            GridData gd_txtDefaultInMemory = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtDefaultInMemory.widthHint = 130;
+            txtDefaultInMemory.setLayoutData(gd_txtDefaultInMemory);
+        }
+        {
+            Label lblDefaultOnDisk = new Label(container, SWT.CENTER);
+            lblDefaultOnDisk.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+            lblDefaultOnDisk.setText("on Disk : ");
+            lblDefaultOnDisk.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblDefaultOnDisk.setAlignment(SWT.RIGHT);
+        }
+        {
+            txtDefaultOnDisk = new Text(container, SWT.BORDER);
+            txtDefaultOnDisk.setEditable(false);
+            txtDefaultOnDisk.setText("");
+            GridData gd_txtDefaultOnDisk = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtDefaultOnDisk.widthHint = 130;
+            txtDefaultOnDisk.setLayoutData(gd_txtDefaultOnDisk);
+        }
+        {
+            Label lblCdmModelCache = new Label(container, SWT.CENTER);
+            lblCdmModelCache.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+            lblCdmModelCache.setText("CDM Model Cache, ");
+            lblCdmModelCache.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblCdmModelCache.setAlignment(SWT.RIGHT);
+        }
+        {
+            Label lblCdmModelInMemory = new Label(container, SWT.CENTER);
+            lblCdmModelInMemory.setText("in Memory : ");
+            lblCdmModelInMemory.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblCdmModelInMemory.setAlignment(SWT.RIGHT);
+            GridData gd_lblCdmModelInMemory = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1);
+            gd_lblCdmModelInMemory.widthHint = 86;
+            lblCdmModelInMemory.setLayoutData(gd_lblCdmModelInMemory);
+        }
+        {
+            txtCdmModelInMemory = new Text(container, SWT.BORDER);
+            txtCdmModelInMemory.setEditable(false);
+            GridData gd_txtCdmModelInMemory = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtCdmModelInMemory.widthHint = 130;
+            txtCdmModelInMemory.setLayoutData(gd_txtCdmModelInMemory);
+        }
+        {
+            Label lblCdmModelOnDisk = new Label(container, SWT.CENTER);
+            lblCdmModelOnDisk.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+            lblCdmModelOnDisk.setText("on Disk : ");
+            lblCdmModelOnDisk.setFont(SWTResourceManager.getFont("Ubuntu", 10, SWT.NORMAL));
+            lblCdmModelOnDisk.setAlignment(SWT.RIGHT);
+        }
+        {
+            txtCdmModelOnDisk = new Text(container, SWT.BORDER);
+            txtCdmModelOnDisk.setEditable(false);
+            txtCdmModelOnDisk.setText("");
+            GridData gd_txtCdmModelOnDisk = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+            gd_txtCdmModelOnDisk.widthHint = 130;
+            txtCdmModelOnDisk.setLayoutData(gd_txtCdmModelOnDisk);
+        }
+        {
+            Button btnRefresh = new Button(container, SWT.NONE);
+            btnRefresh.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    changed();
+                }
+            });
+            GridData gd_btnRefresh = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
+            gd_btnRefresh.widthHint = 100;
+            btnRefresh.setLayoutData(gd_btnRefresh);
+            btnRefresh.setText("Refresh");
+        }
+        {
+            Button btnInspectActiveSession = new Button(container, SWT.NONE);
+            btnInspectActiveSession.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent e) {
+                    AbstractUtility.executeCommand(OPEN_INSPECT_SESSIONS_DIALOG_ID, this, null);
+                }
+            });
+            btnInspectActiveSession.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1));
+            btnInspectActiveSession.setText("Inspect Active Session");
+        }
+        new Label(container, SWT.NONE);
+        new Label(container, SWT.NONE);
+
+        {
+            tableSessions = new Table(container, SWT.BORDER | SWT.FULL_SELECTION);
+            GridData gd_tableSessions = new GridData(SWT.FILL, SWT.FILL, true, true, 5, 1);
+            gd_tableSessions.widthHint = 769;
+            tableSessions.setLayoutData(gd_tableSessions);
+            tableSessions.setHeaderVisible(true);
+            tableSessions.setLinesVisible(true);
+        }
+
+        createActions();
+        initializeToolBar();
+        initializeMenu();
+    }
+
+    /**
+     * Create the actions.
+     */
+    private void createActions() {
+
+
+        for (String title : titles) {
+            TableColumn column = new TableColumn(tableSessions, SWT.NULL);
+            column.setWidth(200);
+            column.setText(title);
+        }
+        changed();
+
+    }
+
+
+    @Override
+    public void changed() {
+        if(tableSessions.isDisposed()) {
+            return;
+        }
+        tableSessions.removeAll();
+        if(cdmEntitySessionManager != null) {
+            Collection<ICdmEntitySession> sessions = cdmEntitySessionManager.getSessions();
+            txtNoOfSessions.setText(String.valueOf(sessions.size()));
+            for(ICdmEntitySession session : sessions) {
+                if(session.getOwner() != null) {
+                    TableItem item = new TableItem(tableSessions, SWT.NULL);
+                    item.setText(session.getOwner().toString());
+                    String activePrefix = "";
+                    if(session.isActive()) {
+                        activePrefix = "*";
+                    }
+                    item.setText(0, activePrefix + session.getOwner().toString());
+                    LiveCacheStatistics cacheStatistics = session.getCacheStatistics();
+                    item.setText(1, getInMemoryStats(cacheStatistics));
+                    item.setText(2, getOnDiskStats(cacheStatistics));
+                }
+            }
+            for (int i=0; i<titles.length; i++) {
+                tableSessions.getColumn (i).pack ();
+            }
+        }
+
+        CdmRemoteCacheManager instance = CdmRemoteCacheManager.getInstance();
+        int cdmEnityCacheSize = instance.getDefaultCacheManager().getCacheNames().length;
+        txtNoOfCaches.setText(String.valueOf(cdmEnityCacheSize));
+
+        Cache defaultCache = instance.getDefaultCacheManager().getCache(CdmCacher.DEFAULT_CACHE_NAME);
+        txtDefaultInMemory.setText("");
+        txtDefaultOnDisk.setText("");
+        if(defaultCache != null) {
+            LiveCacheStatistics liveCacheStatistics = defaultCache.getLiveCacheStatistics();
+            txtDefaultInMemory.setText(getInMemoryStats(liveCacheStatistics));
+            txtDefaultOnDisk.setText(getOnDiskStats(liveCacheStatistics));
+        }
+
+        Cache cdmModelGetMethodsCache = instance.getCdmModelGetMethodsCache();
+        txtCdmModelInMemory.setText("");
+        txtCdmModelOnDisk.setText("");
+        if(cdmModelGetMethodsCache != null) {
+            LiveCacheStatistics liveCacheStatistics = cdmModelGetMethodsCache.getLiveCacheStatistics();
+            txtCdmModelInMemory.setText(getInMemoryStats(liveCacheStatistics));
+            txtCdmModelOnDisk.setText(getOnDiskStats(liveCacheStatistics));
+        }
+
+    }
+
+    private String getInMemoryStats(LiveCacheStatistics statistics) {
+        long localHeapSize = statistics.getLocalHeapSize();
+
+        long localHeapSizeInBytes = statistics.getLocalHeapSizeInBytes();
+        String localHeapSizeInBytesStr =
+                (new DecimalFormat("#.##")).format(localHeapSizeInBytes/1048576.0);
+        return String.valueOf(localHeapSize) + " objects / " + localHeapSizeInBytesStr + " Mb";
+    }
+
+    private String getOnDiskStats(LiveCacheStatistics statistics) {
+        long localDiskSize = statistics.getLocalDiskSize();
+
+        long localDiskSizeInBytes = statistics.getLocalDiskSizeInBytes();
+        String localDiskSizeInBytesStr =
+                (new DecimalFormat("#.##")).format(localDiskSizeInBytes/1048576.0);
+        return String.valueOf(localDiskSize) + " objects / " + localDiskSizeInBytesStr + " Mb";
+    }
+
+    /**
+     * Initialize the toolbar.
+     */
+    private void initializeToolBar() {
+        IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager();
+    }
+
+    /**
+     * Initialize the menu.
+     */
+    private void initializeMenu() {
+        IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
+    }
+
+    @Override
+    public void setFocus() {
+        // Set the focus
+    }
+
+}
index 0bef7f3e843bd7ff8e6f4341284f069a8d0523d4..8e6ea37042e3beb3d7c0b50b2eada98879ca17f4 100644 (file)
@@ -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,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
 import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
 
 /**
  * @author n.hoffmann
@@ -24,13 +25,14 @@ import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
  * @version 1.0
  */
 public abstract class AbstractTaxeditorOperationTestBase {
-       
+
        public static final IUndoContext undoContext = null;
-       
+
        public static final IProgressMonitor monitor = null;
-       public static final IAdaptable info = null;     
+       public static final IAdaptable info = null;
        public static final IPostOperationEnabled postOperation = null;
-       
+       public static final ICdmEntitySessionEnabled cdmEntitySessionEnabled = null;
+
        protected static AbstractPostOperation operation;
        protected static Taxon taxon;
 }
index 4deb39a8f1b75bac21085bb3c7a5d1cdae1404b2..3f3206eccd8fa0be0ef8d865c3277bc8f88c679d 100644 (file)
@@ -1,8 +1,10 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
-<classpath>\r
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
-       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
-       <classpathentry kind="src" path="src/test/java"/>\r
-       <classpathentry kind="src" path="src/main/resources"/>\r
-       <classpathentry kind="output" path="target/classes"/>\r
-</classpath>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+       <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+       <classpathentry including="**/*.java" kind="src" path="src/test/java"/>
+       <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+       <classpathentry exported="true" kind="lib" path="lib/byte-buddy-0.5.1.jar"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
+
index ef718ade6b0c7f00647ffb2b6e4f424464b39af6..e6a059049f4b543619e656d42155314bdc99824a 100644 (file)
@@ -1,28 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-       <name>eu.etaxonomy.taxeditor.test</name>
-       <comment></comment>
-       <projects>
-       </projects>
-       <buildSpec>
-               <buildCommand>
-                       <name>org.eclipse.jdt.core.javabuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.ManifestBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-               <buildCommand>
-                       <name>org.eclipse.pde.SchemaBuilder</name>
-                       <arguments>
-                       </arguments>
-               </buildCommand>
-       </buildSpec>
-       <natures>
-               <nature>org.eclipse.pde.PluginNature</nature>
-               <nature>org.eclipse.jdt.core.javanature</nature>
-       </natures>
-</projectDescription>
+  <name>eu.etaxonomy.taxeditor.test</name>
+  <comment>Holds all UI tests for the Taxonomic Editor. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+    <nature>org.eclipse.pde.PluginNature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file
index e392ea141b999f93e258045433f826bbc6ca0b3b..c537b63063ce6052bdc49c5fd0745b078f162c90 100644 (file)
@@ -1,4 +1,3 @@
-#Wed Oct 05 13:31:15 CEST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
index 4444e369c811d9af329c8aeedb234464c155c8dd..fb85112f52c5c20d7e68a3ccc2608f21b4a31795 100644 (file)
@@ -6,6 +6,7 @@ Bundle-Version: 3.4.0.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: EDIT
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+
 Require-Bundle: org.apache.log4j,
  org.eclipse.ui,
  org.eclipse.core.runtime,
@@ -22,3 +23,6 @@ Require-Bundle: org.apache.log4j,
  eu.etaxonomy.taxeditor.printpublisher,
  eu.etaxonomy.taxeditor.store
 Eclipse-RegisterBuddy: org.apache.log4j
+Bundle-ClassPath: .,
+ lib/byte-buddy-0.5.1.jar
+Import-Package: org.apache.http.impl.client
index 137d6a59ccc7ed4073b31469643cef499bfe3f0a..95673643b973fda719644a0ef136baad59dbf72d 100644 (file)
@@ -1,3 +1,4 @@
 source.. = src/test/java/
 bin.includes = META-INF/,\
-               .
+               .,\
+               lib/byte-buddy-0.5.1.jar
diff --git a/eu.etaxonomy.taxeditor.test/lib/byte-buddy-0.5.1.jar b/eu.etaxonomy.taxeditor.test/lib/byte-buddy-0.5.1.jar
new file mode 100644 (file)
index 0000000..2b1447a
Binary files /dev/null and b/eu.etaxonomy.taxeditor.test/lib/byte-buddy-0.5.1.jar differ
index 2fdee3be14e73bed09e76914a8c237047b16dcce..5b2e79b899cafa78ab8261f06b908e693ad1f49c 100644 (file)
        <packaging>eclipse-test-plugin</packaging>\r
        <name>UI Test Bundle</name>\r
        <description>Holds all UI tests for the Taxonomic Editor</description>\r
-       <!-- <repositories> -->\r
-       <!-- <repository> -->\r
-       <!-- <id>ganymede</id> -->\r
-       <!-- <layout>p2</layout> -->\r
-       <!-- <url>http://download.eclipse.org/releases/galileo</url> -->\r
-       <!-- </repository> -->\r
-       <!-- <repository> -->\r
-       <!-- <id>swtbot</id> -->\r
-       <!-- <layout>p2</layout> -->\r
-       <!-- <url>http://download.eclipse.org/technology/swtbot/galileo/dev-build/update-site</url> -->\r
-       <!-- </repository> -->\r
-       <!-- </repositories> -->\r
-\r
-       <build>\r
-               <plugins>\r
-                       <plugin>\r
-                               <groupId>org.eclipse.tycho</groupId>\r
-                               <artifactId>tycho-maven-plugin</artifactId>\r
-                               <version>${tycho.version}</version>\r
-                               <extensions>true</extensions>\r
-                       </plugin>\r
-                       <plugin>\r
-                               <groupId>org.eclipse.tycho</groupId>\r
-                               <artifactId>target-platform-configuration</artifactId>\r
-                               <version>${tycho.version}</version>\r
-                               <configuration>\r
-                                       <resolver>p2</resolver>\r
-                               </configuration>\r
-                       </plugin>\r
-                       <plugin>\r
-                               <groupId>org.eclipse.tycho</groupId>\r
-                               <artifactId>tycho-surefire-plugin</artifactId>\r
-                               <version>${tycho.version}</version>\r
-                               <configuration>\r
-                                       <useUIHarness>true</useUIHarness>\r
-                                       <useUIThread>false</useUIThread>\r
-                                       <includes>\r
-                                               <include>**/*Test.java</include>\r
-                                       </includes>\r
-                                       <product>eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product</product>\r
-                       <application>eu.etaxonomy.taxeditor.application.application</application>\r
-                                       <!-- <dependency>
-                                               <type>p2-installable-unit</type>
-                                               <artifactId>eu.etaxonomy.taxeditor.product</artifactId>
-                                               <version>0.0.0</version>
-                                       </dependency> -->\r
-                               </configuration>\r
-                       </plugin>\r
-                       <!-- <plugin>
-                       <groupId>org.eclipse.tycho</groupId>
-                       <artifactId>maven-osgi-test-plugin</artifactId>
-                       <version>${tycho.version}</version>
-                       <configuration>
-                       <useUIHarness>true</useUIHarness>
-                       <useUIThread>false</useUIThread>
-                       <product>eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product</product>
-                       <application>org.eclipse.ui.ide.workbench</application>
-                       <dependencies>
-                       <dependency>
-                       <type>p2-installable-unit</type>
-                       <artifactId>eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product</artifactId>
-                       <version>0.0.0</version>
-                       </dependency>
-                       </dependencies>
-                       </configuration>
-                       </plugin> -->\r
-               </plugins>\r
-       </build>\r
+<!--   <build> -->\r
+<!--           <plugins> -->\r
+<!--                   <plugin> -->\r
+<!--                           <groupId>org.eclipse.tycho</groupId> -->\r
+<!--                           <artifactId>tycho-maven-plugin</artifactId> -->\r
+<!--                           <version>${tycho.version}</version> -->\r
+<!--                           <extensions>true</extensions> -->\r
+<!--                   </plugin> -->\r
+<!--                   <plugin> -->\r
+<!--                           <groupId>org.eclipse.tycho</groupId> -->\r
+<!--                           <artifactId>target-platform-configuration</artifactId> -->\r
+<!--                           <version>${tycho.version}</version> -->\r
+<!--                           <configuration> -->\r
+<!--                                   <resolver>p2</resolver> -->\r
+<!--                           </configuration> -->\r
+<!--                   </plugin> -->\r
+<!--                   <plugin> -->\r
+<!--                           <groupId>org.eclipse.tycho</groupId> -->\r
+<!--                           <artifactId>tycho-surefire-plugin</artifactId> -->\r
+<!--                           <version>${tycho.version}</version> -->\r
+<!--                           <configuration> -->\r
+<!--                                   <useUIHarness>true</useUIHarness> -->\r
+<!--                                   <useUIThread>false</useUIThread> -->\r
+<!--                                   <includes> -->\r
+<!--                                           <include>**/*Test.java</include> -->\r
+<!--                                   </includes> -->\r
+<!--                                   <product>eu.etaxonomy.taxeditor.application.eu_etaxonomy_taxeditor_product -->\r
+<!--                                   </product> -->\r
+<!--                                   <application>eu.etaxonomy.taxeditor.application.application -->\r
+<!--                                   </application> -->\r
+<!--                                   <dependency> <type>p2-installable-unit</type> <artifactId>eu.etaxonomy.taxeditor.product</artifactId> -->\r
+<!--                                           <version>0.0.0</version> </dependency> --> \r
+<!--                           </configuration> -->\r
+<!--                   </plugin> -->\r
+<!--           </plugins> -->\r
+<!--   </build> -->\r
+       <dependencies>\r
+               <dependency>\r
+                       <groupId>junit</groupId>\r
+                       <artifactId>junit</artifactId>\r
+                       <version>4.11</version>\r
+                       <scope>test</scope>\r
+               </dependency>\r
+       </dependencies>\r
 </project>
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/cdmlib-ehcache.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/cdmlib-ehcache.xml
new file mode 100644 (file)
index 0000000..7ab604c
--- /dev/null
@@ -0,0 +1,6 @@
+<ehcache name="cdmlibModelCacheManager">
+       <diskStore path="ehcache.disk.store.dir/cdmlib" />
+       <cache name="cdmModelGetMethodsCache" maxElementsInMemory="0" maxElementsOnDisk="0" eternal="true"
+               overflowToDisk="true" diskPersistent="true" memoryStoreEvictionPolicy="LRU">
+       </cache>
+</ehcache>
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/datasources.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/datasources.xml
new file mode 100644 (file)
index 0000000..7f9b665
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:tx="http://www.springframework.org/schema/tx"
+    xmlns:context="http://www.springframework.org/schema/context"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
+    http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-2.5.xsd
+    http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+    ">
+
+    <!--
+      DataSourceProperties allow configuring specific properties of the datasources
+
+       * cdmlib-remote.xslBasePath:
+            alternative base path for REST services to retrieve XSL style sheets from.
+            the base path must be on the same domain since cross domain xsl loading is
+            not permitted
+      -->
+      <bean id="dataSourceProperties" class="eu.etaxonomy.cdm.remote.config.DataSourceProperties">
+        <property name="propsMap">
+          <map>
+            <!--
+            <entry key="dataSourceBeanID">
+                <props>
+                    <prop key="cdmlib-remote.xslBasePath">/xsl</prop>
+                </props>
+            </entry>
+             -->
+            </map>
+        </property>
+      </bean>
+
+    <bean id="cdmTest"  lazy-init="true" class="com.mchange.v2.c3p0.ComboPooledDataSource">
+        <property name="driverClass" value="eu.etaxonomy.cdm.database.LocalH2"/>
+        <property name="user" value="sa" />
+        <property name="password" value="" />
+        <property name="jdbcUrl" value="jdbc:h2:file:./target/classes/h2/cdmTest;AUTO_SERVER=TRUE"/>
+    </bean>
+</beans>
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/api/cache/CdmClientCachingTest.xml
new file mode 100644 (file)
index 0000000..32d3331
--- /dev/null
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Thu Oct 09 18:00:09 CEST 2014 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  PolytomousKey where uuid like '0d53ba20-7de4-4baa-bd8a-401048447d66' (extractionmodel/by-example/SbE-PolytomousKey-17-59-56-907.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     79
+      AgentBase                      1
+      Credit                         1
+      DefinedTermBase                1
+      Extension                      1
+      KeyStatement                   10
+      KeyStatement_LanguageString    10
+      LanguageString                 19
+      OriginalSourceBase             2
+      PolytomousKey                  2
+      PolytomousKeyNode              10
+      PolytomousKeyNode_LanguageString 9
+      PolytomousKey_Credit           1
+      PolytomousKey_Extension        1
+      PolytomousKey_OriginalSourceBase 2
+      PolytomousKey_RightsInfo       1
+      PolytomousKey_Taxon            1
+      RightsInfo                     1
+      TaxonBase                      6
+  
+--><dataset>
+  <PolytomousKey_Extension PolytomousKey_id="1550" extensions_id="10"/>
+
+  <PolytomousKey_Credit PolytomousKey_id="1550" credits_id="20" sortIndex="0"/>
+
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2751" modifyingtext_id="13780" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2752" modifyingtext_id="13781" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2753" modifyingtext_id="13795" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2754" modifyingtext_id="13788" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2755" modifyingtext_id="13785" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2756" modifyingtext_id="13787" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2757" modifyingtext_id="13794" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2758" modifyingtext_id="13791" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2759" modifyingtext_id="13793" modifyingtext_mapkey_id="124"/>
+
+  <LanguageString id="13780" created="2014-03-10 10:03:09.0" uuid="cceaa60b-61f4-4c8a-bb0e-d45f0fa3e2dc" text="Modifying Text 1a" language_id="124"/>
+  <LanguageString id="13781" created="2014-03-10 10:03:17.0" uuid="01a0ace4-de49-4725-9909-e881fb13035d" text="Modifying Text 1b" language_id="124"/>
+  <LanguageString id="13782" created="2014-03-10 10:03:48.0" uuid="ec0fea40-69dd-4c3e-ab7a-34948037a069" updated="2014-03-10 10:06:32.0" text="Capitula with ligulate ray-florets; leaves pinnatisect" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13783" created="2014-03-10 10:04:03.0" uuid="82f8a3a0-567f-4d89-ba10-3f3699111d55" updated="2014-03-10 10:06:32.0" text="Ray-florets yellow" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13784" created="2014-03-10 10:04:21.0" uuid="4270501f-1efc-45c2-9e8f-c65f120e8f4c" updated="2014-03-10 10:06:32.0" text="Stem thinly pilose; leaves 10-15 mm wide, with spreading linear-subulate segments; perennial herb" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13785" created="2014-03-10 10:04:07.0" uuid="813f5fd6-c8f6-43e8-9a2b-1464f3ba052a" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13786" created="2014-03-10 10:04:53.0" uuid="ba17ac94-632f-4d69-ac89-a882e19ff1c5" updated="2014-03-10 10:06:32.0" text="Stem white-tomentose; leaves 1-3 mm wide, with minute overlapping, transverse segments; small subshrubs with a woody base" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13787" created="2014-03-10 10:04:34.0" uuid="ab219a5d-e0c4-45fd-8405-6693c3fb8abf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13788" created="2014-03-10 10:03:53.0" uuid="2baec690-422d-4f85-bcfd-24f5718cbecf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13789" created="2014-03-10 10:05:16.0" uuid="7c6a7984-8e6f-48b1-86b2-d5d643199bf3" updated="2014-03-10 10:06:32.0" text="Ray-florets white" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13790" created="2014-03-10 10:05:34.0" uuid="72bd8bc9-1904-47ab-8bec-b9296a98b244" updated="2014-03-10 10:06:32.0" text="Perennial herb; stem pilose, hairy or glabrescent, but not tomentose; ligules 1-2 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13791" created="2014-03-10 10:05:20.0" uuid="c917e3fb-e48b-4207-b77d-c1c108e37906" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13792" created="2014-03-10 10:06:15.0" uuid="c5dd35d8-da6a-4d05-b30c-6b55220bd989" updated="2014-03-10 10:06:32.0" text="Shrub with a woody base; stem white-tomentose or woolly; ligules 4-5 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13793" created="2014-03-10 10:06:03.0" uuid="227a17f6-1ca1-4d06-8480-25711b614863" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13794" created="2014-03-10 10:05:07.0" uuid="2c434ab1-8ca7-4464-b5cd-4cee40db41ed" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13795" created="2014-03-10 10:03:38.0" uuid="27190d54-f53b-401e-820c-edfb36d4bcbf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13796" created="2014-03-10 10:03:25.0" uuid="69cffb28-8a85-478f-bcae-533e20938ccd" updated="2014-03-10 10:06:32.0" text="Capitula without ligulate ray-florets; leaves entire or subentire" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="14570" created="2014-10-09 15:42:33.0" uuid="84967760-6dbe-4af4-8e0c-309f1af6ce20" updated="2014-10-09 15:42:44.0" text="Question 1" createdby_id="10" updatedby_id="10" language_id="124"/>
+  <LanguageString id="14571" created="2014-10-09 15:42:55.0" uuid="d82f37b1-f51d-42c1-a291-0c7820db155e" updated="2014-10-09 15:43:03.0" text="Question 2" createdby_id="10" updatedby_id="10" language_id="124"/>
+  <LanguageString id="14572" created="2014-10-09 15:42:55.0" uuid="d82f37b1-f51d-42c1-a291-0c7820db155f" updated="2014-10-09 15:43:03.0" text="Koi Sach Ya Sawal" createdby_id="30" updatedby_id="30" language_id="125"/>
+
+  <TaxonBase DTYPE="Taxon" id="32" created="2011-03-01 20:11:26.0" uuid="8217ef77-2ab1-4318-bd67-ccd0cdef07c4" protectedtitlecache="false" titleCache="Achillea arabica Kotschy sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="35" created="2010-12-21 15:09:43.0" uuid="fade44fd-34b2-455f-861a-d1372b866f06" protectedtitlecache="false" titleCache="Achillea sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="36" created="2011-03-01 20:11:26.0" uuid="05f0a2e1-e3c3-4e74-8fec-8a0ae89236c3" protectedtitlecache="false" titleCache="Achillea cretica L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="37" created="2011-03-01 20:11:26.0" uuid="0f8d18a9-e861-48e8-bfab-83e01a379bc0" protectedtitlecache="false" titleCache="Achillea maritima (L.)Ehrend. &amp; Y.-P. Guo subsp. maritima sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="40" created="2010-12-21 15:09:43.0" uuid="2b336df7-29e8-4f79-985f-66502739d22f" protectedtitlecache="false" titleCache="Achillea millefolium L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="41" created="2011-03-01 20:11:26.0" uuid="094e1af8-efd8-4605-b037-b4f715379562" protectedtitlecache="false" titleCache="Achillea santolinoides subsp. wilhelmsii (K. Koch) Greuter sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" sec_id="10" publish="true"/>
+
+  <PolytomousKey_Taxon polytomousKey_id="1550" taxon_id="35"/>
+
+  <RightsInfo id="10" created="2014-10-09 15:45:53.0" uuid="bdfb572b-be25-45e7-9349-22a9da43531f" updated="2014-10-09 15:48:01.0" text="Rights Text Test" createdby_id="10" updatedby_id="10" agent_id="4808" type_id="2056"/>
+
+  <PolytomousKeyNode id="2750" created="2014-03-10 10:02:35.0" uuid="75e4c924-ff58-4ee7-a59d-fd9173517d08" updated="2014-03-10 10:02:42.0" nodenumber="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2760" statement_id="2460"/>
+  <PolytomousKeyNode id="2751" created="2014-03-10 10:02:52.0" uuid="23e51ff7-11b1-443b-aff2-3fe8b5ace9fe" sortindex="0" key_id="1550" statement_id="2467" subkey_id="1550" taxon_id="37" parent_id="2750"/>
+  <PolytomousKeyNode id="2752" created="2014-03-10 10:03:16.0" uuid="dcf326f7-c0ad-4e76-b64e-43aea11f767c" key_id="1550"/>
+  <PolytomousKeyNode id="2753" created="2014-03-10 10:03:38.0" uuid="b775c027-13c0-4b87-8aa9-712faeaafbdc" updated="2014-03-10 10:06:32.0" nodenumber="2" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2761" statement_id="2460"  subkey_id="1550" parent_id="2750"/>
+  <PolytomousKeyNode id="2754" created="2014-03-10 10:03:52.0" uuid="df5d5922-35de-43d5-9d46-7730ae28eeb3" updated="2014-03-10 10:06:32.0" nodenumber="3" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2461" subkey_id="1550" parent_id="2753"/>
+  <PolytomousKeyNode id="2755" created="2014-03-10 10:04:07.0" uuid="0c8583ee-399e-433c-b76b-272c54dbd9f5" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2462" taxon_id="32" parent_id="2754"/>
+  <PolytomousKeyNode id="2756" created="2014-03-10 10:04:34.0" uuid="a10e1e61-82c0-470e-a245-10a927b80c9a" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2463" taxon_id="41" parent_id="2754"/>
+  <PolytomousKeyNode id="2757" created="2014-03-10 10:05:07.0" uuid="19f7a6a2-4c55-49cb-8b92-d68a9fd9074c" updated="2014-03-10 10:06:32.0" nodenumber="4" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2464" parent_id="2753"/>
+  <PolytomousKeyNode id="2758" created="2014-03-10 10:05:20.0" uuid="0a4d86d1-fba5-4088-8dcc-6f0e7268ca5b" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2465" taxon_id="40" parent_id="2757"/>
+  <PolytomousKeyNode id="2759" created="2014-03-10 10:06:03.0" uuid="827c9df4-ac15-4163-95ab-616d51f62803" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2466" taxon_id="36" parent_id="2757"/>
+
+  <Credit id="20" created="2014-10-09 15:45:22.0" uuid="aa412b15-ee6c-4834-b14e-a66969cb398d" updated="2014-10-09 15:48:01.0" text="Credits Text Test" createdby_id="10" updatedby_id="10" language_id="124" agent_id="4809"/>
+
+  <KeyStatement id="2460" created="2014-03-10 10:03:48.0" uuid="66da6df7-784c-4d5a-9378-58b2cf92ba13" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2461" created="2014-03-10 10:04:03.0" uuid="f9cfd498-de47-48fd-b38c-43cf57b63750" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2462" created="2014-03-10 10:04:21.0" uuid="817fb39e-91d4-4d8c-a942-6acab47575d1" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2463" created="2014-03-10 10:04:53.0" uuid="6b571b86-7764-4f27-925c-ae5e2653f7ad" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2464" created="2014-03-10 10:05:16.0" uuid="91bbb534-abdf-4915-9f6f-a0cb41f8cf58" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2465" created="2014-03-10 10:05:34.0" uuid="1991ca31-2630-4917-8db3-eb67cec8f231" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2466" created="2014-03-10 10:06:15.0" uuid="3e1bbc59-b098-4533-ac35-245e1140a0ae" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2467" created="2014-03-10 10:03:24.0" uuid="68fd99f6-64ce-4bb8-a6af-d2cf2c046e2c" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2760" created="2014-10-09 15:42:33.0" uuid="b9702653-f620-4208-bda9-a6fe082004d1" updated="2014-10-09 15:42:44.0" createdby_id="10" updatedby_id="10"/>
+  <KeyStatement id="2761" created="2014-10-09 15:42:55.0" uuid="688a432f-4b57-4c6f-a8f6-0c468a28cb7c" updated="2014-10-09 15:43:03.0" createdby_id="10" updatedby_id="10"/>
+
+  <AgentBase DTYPE="Person" id="4809" created="2010-12-21 15:09:59.0" uuid="945d08f2-eb92-45b6-9252-6275ea6d338b" protectedtitlecache="false" titleCache="R. A. Graham" nomenclaturaltitle="R. A. Graham" createdby_id="11"/>
+
+  <DefinedTermBase DTYPE="Language" id="124" created="2010-12-21 15:09:09.0" uuid="e9f8cdb7-6819-44e8-95d3-e2d0690c3523" protectedtitlecache="false" titleCache="English" uri=""  vocabulary_id="10" termType="LA" idInVocabulary="eng"/>
+  <DefinedTermBase DTYPE="Language" id="125" created="2010-12-21 15:09:09.0" uuid="0a1d9d1d-135d-4575-b172-669b51673c39" protectedtitlecache="false" titleCache="Hindi" uri=""  vocabulary_id="10" termType="LA" idInVocabulary="hin"/>
+
+  <Extension id="10" created="2014-10-09 15:45:41.0" uuid="0d6f35d7-7e76-446a-a017-7e8355ee1b4c" updated="2014-10-09 15:48:01.0" extendedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" extendedObj_id="1550" value="http://test.com" createdby_id="10" updatedby_id="10" type_id="2075"/>
+
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23710"/>
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23711"/>
+
+  <PolytomousKey_RightsInfo PolytomousKey_id="1550" rights_id="10"/>
+
+  <KeyStatement_LanguageString KeyStatement_id="2460" label_id="13782" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2461" label_id="13783" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2462" label_id="13784" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2463" label_id="13786" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2464" label_id="13789" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2465" label_id="13790" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2466" label_id="13792" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2467" label_id="13796" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2760" label_id="14570" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2761" label_id="14571" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2460" label_id="14572" label_mapkey_id="125"/>  
+
+  <PolytomousKey id="751" created="2013-03-24 11:17:08.0" uuid="9d8bf4f6-a70a-4b80-8556-2ccfb436ff01" protectedtitlecache="true" titleCache="Asphodeline" createdby_id="30"  startNumber="1"/>
+  <PolytomousKey id="1550" created="2014-03-10 10:02:35.0" uuid="0d53ba20-7de4-4baa-bd8a-401048447d66" updated="2014-03-10 10:02:42.0" protectedtitlecache="true" titleCache="Achillea" createdby_id="30" updatedby_id="30" root_id="2750" startNumber="1"/>
+
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23710" created="2014-03-10 10:06:57.0" uuid="95e05e82-499d-4b8a-ad6b-1085f74a7496" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="1730" sourceType="PTS"/>
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23711" created="2014-03-10 10:06:48.0" uuid="f77555fe-0d98-4c9f-98ed-a5bca6b1e342" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="50" sourceType="PTS"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/cdm.datasources.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/cdm.datasources.xml
new file mode 100644 (file)
index 0000000..f5d1afb
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans" 
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+xmlns:context="http://www.springframework.org/schema/context" 
+xsi:schemaLocation="http://www.springframework.org/schema/beans      
+http://www.springframework.org/schema/beans/spring-beans-3.1.xsd     
+http://www.springframework.org/schema/context     
+http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+  <bean id="defaultRemoteSource">
+    <property name="server" value="127.0.0.1" />
+    <property name="port" value="9090" />
+    <property name="contextPath" value="" />
+  </bean>
+  
+  <bean id="incompleteRemoteSource">
+    <property name="port" value="9090" />
+    <property name="contextPath" value="" />
+  </bean>
+</beans>
+
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/PolytomousKeyTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/PolytomousKeyTest.xml
new file mode 100644 (file)
index 0000000..ec5e0fb
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Thu Oct 09 18:00:09 CEST 2014 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  PolytomousKey where uuid like '0d53ba20-7de4-4baa-bd8a-401048447d66' (extractionmodel/by-example/SbE-PolytomousKey-17-59-56-907.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     79
+      AgentBase                      1
+      Credit                         1
+      DefinedTermBase                1
+      Extension                      1
+      KeyStatement                   10
+      KeyStatement_LanguageString    10
+      LanguageString                 19
+      OriginalSourceBase             2
+      PolytomousKey                  2
+      PolytomousKeyNode              10
+      PolytomousKeyNode_LanguageString 9
+      PolytomousKey_Credit           1
+      PolytomousKey_Extension        1
+      PolytomousKey_OriginalSourceBase 2
+      PolytomousKey_RightsInfo       1
+      PolytomousKey_Taxon            1
+      RightsInfo                     1
+      TaxonBase                      6
+  
+--><dataset>
+  <PolytomousKey_Extension PolytomousKey_id="1550" extensions_id="10"/>
+
+  <PolytomousKey_Credit PolytomousKey_id="1550" credits_id="20" sortIndex="0"/>
+
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2751" modifyingtext_id="13780" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2752" modifyingtext_id="13781" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2753" modifyingtext_id="13795" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2754" modifyingtext_id="13788" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2755" modifyingtext_id="13785" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2756" modifyingtext_id="13787" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2757" modifyingtext_id="13794" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2758" modifyingtext_id="13791" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2759" modifyingtext_id="13793" modifyingtext_mapkey_id="124"/>
+
+  <LanguageString id="13780" created="2014-03-10 10:03:09.0" uuid="cceaa60b-61f4-4c8a-bb0e-d45f0fa3e2dc" text="Modifying Text 1a" language_id="124"/>
+  <LanguageString id="13781" created="2014-03-10 10:03:17.0" uuid="01a0ace4-de49-4725-9909-e881fb13035d" text="" language_id="124"/>
+  <LanguageString id="13782" created="2014-03-10 10:03:48.0" uuid="ec0fea40-69dd-4c3e-ab7a-34948037a069" updated="2014-03-10 10:06:32.0" text="Capitula with ligulate ray-florets; leaves pinnatisect"   language_id="124"/>
+  <LanguageString id="13783" created="2014-03-10 10:04:03.0" uuid="82f8a3a0-567f-4d89-ba10-3f3699111d55" updated="2014-03-10 10:06:32.0" text="Ray-florets yellow"   language_id="124"/>
+  <LanguageString id="13784" created="2014-03-10 10:04:21.0" uuid="4270501f-1efc-45c2-9e8f-c65f120e8f4c" updated="2014-03-10 10:06:32.0" text="Stem thinly pilose; leaves 10-15 mm wide, with spreading linear-subulate segments; perennial herb"   language_id="124"/>
+  <LanguageString id="13785" created="2014-03-10 10:04:07.0" uuid="813f5fd6-c8f6-43e8-9a2b-1464f3ba052a" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13786" created="2014-03-10 10:04:53.0" uuid="ba17ac94-632f-4d69-ac89-a882e19ff1c5" updated="2014-03-10 10:06:32.0" text="Stem white-tomentose; leaves 1-3 mm wide, with minute overlapping, transverse segments; small subshrubs with a woody base"   language_id="124"/>
+  <LanguageString id="13787" created="2014-03-10 10:04:34.0" uuid="ab219a5d-e0c4-45fd-8405-6693c3fb8abf" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13788" created="2014-03-10 10:03:53.0" uuid="2baec690-422d-4f85-bcfd-24f5718cbecf" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13789" created="2014-03-10 10:05:16.0" uuid="7c6a7984-8e6f-48b1-86b2-d5d643199bf3" updated="2014-03-10 10:06:32.0" text="Ray-florets white"   language_id="124"/>
+  <LanguageString id="13790" created="2014-03-10 10:05:34.0" uuid="72bd8bc9-1904-47ab-8bec-b9296a98b244" updated="2014-03-10 10:06:32.0" text="Perennial herb; stem pilose, hairy or glabrescent, but not tomentose; ligules 1-2 mm diam."   language_id="124"/>
+  <LanguageString id="13791" created="2014-03-10 10:05:20.0" uuid="c917e3fb-e48b-4207-b77d-c1c108e37906" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13792" created="2014-03-10 10:06:15.0" uuid="c5dd35d8-da6a-4d05-b30c-6b55220bd989" updated="2014-03-10 10:06:32.0" text="Shrub with a woody base; stem white-tomentose or woolly; ligules 4-5 mm diam."   language_id="124"/>
+  <LanguageString id="13793" created="2014-03-10 10:06:03.0" uuid="227a17f6-1ca1-4d06-8480-25711b614863" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13794" created="2014-03-10 10:05:07.0" uuid="2c434ab1-8ca7-4464-b5cd-4cee40db41ed" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13795" created="2014-03-10 10:03:38.0" uuid="27190d54-f53b-401e-820c-edfb36d4bcbf" updated="2014-03-10 10:06:32.0" text=""   language_id="124"/>
+  <LanguageString id="13796" created="2014-03-10 10:03:25.0" uuid="69cffb28-8a85-478f-bcae-533e20938ccd" updated="2014-03-10 10:06:32.0" text="Capitula without ligulate ray-florets; leaves entire or subentire"   language_id="124"/>
+  <LanguageString id="14570" created="2014-10-09 15:42:33.0" uuid="84967760-6dbe-4af4-8e0c-309f1af6ce20" updated="2014-10-09 15:42:44.0" text="Question 1" createdby_id="10" updatedby_id="10" language_id="124"/>
+  <LanguageString id="14571" created="2014-10-09 15:42:55.0" uuid="d82f37b1-f51d-42c1-a291-0c7820db155e" updated="2014-10-09 15:43:03.0" text="Question 2" createdby_id="10" updatedby_id="10" language_id="124"/>
+
+  <TaxonBase DTYPE="Taxon" id="32" created="2011-03-01 20:11:26.0" uuid="8217ef77-2ab1-4318-bd67-ccd0cdef07c4" protectedtitlecache="false" titleCache="Achillea arabica Kotschy sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="35" created="2010-12-21 15:09:43.0" uuid="fade44fd-34b2-455f-861a-d1372b866f06" protectedtitlecache="false" titleCache="Achillea sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="36" created="2011-03-01 20:11:26.0" uuid="05f0a2e1-e3c3-4e74-8fec-8a0ae89236c3" protectedtitlecache="false" titleCache="Achillea cretica L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="37" created="2011-03-01 20:11:26.0" uuid="0f8d18a9-e861-48e8-bfab-83e01a379bc0" protectedtitlecache="false" titleCache="Achillea maritima (L.)Ehrend. &amp; Y.-P. Guo subsp. maritima sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="40" created="2010-12-21 15:09:43.0" uuid="2b336df7-29e8-4f79-985f-66502739d22f" protectedtitlecache="false" titleCache="Achillea millefolium L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="41" created="2011-03-01 20:11:26.0" uuid="094e1af8-efd8-4605-b037-b4f715379562" protectedtitlecache="false" titleCache="Achillea santolinoides subsp. wilhelmsii (K. Koch) Greuter sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" sec_id="10" publish="true"/>
+
+  <PolytomousKey_Taxon polytomousKey_id="1550" taxon_id="35"/>
+
+  <RightsInfo id="10" created="2014-10-09 15:45:53.0" uuid="bdfb572b-be25-45e7-9349-22a9da43531f" updated="2014-10-09 15:48:01.0" text="Rights Text Test" createdby_id="10" updatedby_id="10" agent_id="4809" type_id="2056"/>
+
+
+  <PolytomousKeyNode id="2750" created="2014-03-10 10:02:35.0" uuid="75e4c924-ff58-4ee7-a59d-fd9173517d08" updated="2014-03-10 10:02:42.0" nodenumber="1"   key_id="1550" question_id="2760"/>
+  <PolytomousKeyNode id="2751" created="2014-03-10 10:02:52.0" uuid="23e51ff7-11b1-443b-aff2-3fe8b5ace9fe" sortindex="0" key_id="1550" statement_id="2467" subkey_id="751" taxon_id="37" parent_id="2750"/>
+  <PolytomousKeyNode id="2752" created="2014-03-10 10:03:16.0" uuid="dcf326f7-c0ad-4e76-b64e-43aea11f767c" key_id="1550"/>
+  <PolytomousKeyNode id="2753" created="2014-03-10 10:03:38.0" uuid="b775c027-13c0-4b87-8aa9-712faeaafbdc" updated="2014-03-10 10:06:32.0" nodenumber="2" sortindex="1"   key_id="1550" question_id="2761" statement_id="2460"  subkey_id="751" parent_id="2750"/>
+  <PolytomousKeyNode id="2754" created="2014-03-10 10:03:52.0" uuid="df5d5922-35de-43d5-9d46-7730ae28eeb3" updated="2014-03-10 10:06:32.0" nodenumber="3" sortindex="0"   key_id="1550" statement_id="2461" subkey_id="751" parent_id="2753"/>
+  <PolytomousKeyNode id="2755" created="2014-03-10 10:04:07.0" uuid="0c8583ee-399e-433c-b76b-272c54dbd9f5" updated="2014-03-10 10:06:32.0" sortindex="0"   key_id="1550" statement_id="2462" taxon_id="32" parent_id="2754"/>
+  <PolytomousKeyNode id="2756" created="2014-03-10 10:04:34.0" uuid="a10e1e61-82c0-470e-a245-10a927b80c9a" updated="2014-03-10 10:06:32.0" sortindex="1"   key_id="1550" statement_id="2463" taxon_id="41" parent_id="2754"/>
+  <PolytomousKeyNode id="2757" created="2014-03-10 10:05:07.0" uuid="19f7a6a2-4c55-49cb-8b92-d68a9fd9074c" updated="2014-03-10 10:06:32.0" nodenumber="4" sortindex="1"   key_id="1550" statement_id="2464" parent_id="2753"/>
+  <PolytomousKeyNode id="2758" created="2014-03-10 10:05:20.0" uuid="0a4d86d1-fba5-4088-8dcc-6f0e7268ca5b" updated="2014-03-10 10:06:32.0" sortindex="0"   key_id="1550" statement_id="2465" taxon_id="40" parent_id="2757"/>
+  <PolytomousKeyNode id="2759" created="2014-03-10 10:06:03.0" uuid="827c9df4-ac15-4163-95ab-616d51f62803" updated="2014-03-10 10:06:32.0" sortindex="1"   key_id="1550" statement_id="2466" taxon_id="36" parent_id="2757"/>
+
+  <Credit id="20" created="2014-10-09 15:45:22.0" uuid="aa412b15-ee6c-4834-b14e-a66969cb398d" updated="2014-10-09 15:48:01.0" text="Credits Text Test" createdby_id="10" updatedby_id="10" language_id="124" agent_id="4809"/>
+
+  <KeyStatement id="2460" created="2014-03-10 10:03:48.0" uuid="66da6df7-784c-4d5a-9378-58b2cf92ba13" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2461" created="2014-03-10 10:04:03.0" uuid="f9cfd498-de47-48fd-b38c-43cf57b63750" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2462" created="2014-03-10 10:04:21.0" uuid="817fb39e-91d4-4d8c-a942-6acab47575d1" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2463" created="2014-03-10 10:04:53.0" uuid="6b571b86-7764-4f27-925c-ae5e2653f7ad" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2464" created="2014-03-10 10:05:16.0" uuid="91bbb534-abdf-4915-9f6f-a0cb41f8cf58" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2465" created="2014-03-10 10:05:34.0" uuid="1991ca31-2630-4917-8db3-eb67cec8f231" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2466" created="2014-03-10 10:06:15.0" uuid="3e1bbc59-b098-4533-ac35-245e1140a0ae" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2467" created="2014-03-10 10:03:24.0" uuid="68fd99f6-64ce-4bb8-a6af-d2cf2c046e2c" updated="2014-03-10 10:06:32.0"  />
+  <KeyStatement id="2760" created="2014-10-09 15:42:33.0" uuid="b9702653-f620-4208-bda9-a6fe082004d1" updated="2014-10-09 15:42:44.0" createdby_id="10" updatedby_id="10"/>
+  <KeyStatement id="2761" created="2014-10-09 15:42:55.0" uuid="688a432f-4b57-4c6f-a8f6-0c468a28cb7c" updated="2014-10-09 15:43:03.0" createdby_id="10" updatedby_id="10"/>
+
+  <AgentBase DTYPE="Person" id="4809" created="2010-12-21 15:09:59.0" uuid="945d08f2-eb92-45b6-9252-6275ea6d338b" protectedtitlecache="false" titleCache="R. A. Graham" nomenclaturaltitle="R. A. Graham" createdby_id="11"/>
+
+  <DefinedTermBase DTYPE="Language" id="124" created="2010-12-21 15:09:09.0" uuid="e9f8cdb7-6819-44e8-95d3-e2d0690c3523" protectedtitlecache="false" titleCache="English" uri=""  vocabulary_id="10" termType="LA" idInVocabulary="eng"/>
+
+  <Extension id="10" created="2014-10-09 15:45:41.0" uuid="0d6f35d7-7e76-446a-a017-7e8355ee1b4c" updated="2014-10-09 15:48:01.0" extendedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" extendedObj_id="1550" value="http://test.com" createdby_id="10" updatedby_id="10" type_id="2075"/>
+
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23710"/>
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23711"/>
+
+  <PolytomousKey_RightsInfo PolytomousKey_id="1550" rights_id="10"/>
+
+  <KeyStatement_LanguageString KeyStatement_id="2460" label_id="13782" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2461" label_id="13783" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2462" label_id="13784" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2463" label_id="13786" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2464" label_id="13789" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2465" label_id="13790" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2466" label_id="13792" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2467" label_id="13796" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2760" label_id="14570" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2761" label_id="14571" label_mapkey_id="124"/>
+
+  <PolytomousKey id="751" created="2013-03-24 11:17:08.0" uuid="9d8bf4f6-a70a-4b80-8556-2ccfb436ff01" protectedtitlecache="true" titleCache="Asphodeline"   startNumber="1"/>
+  <PolytomousKey id="1550" created="2014-03-10 10:02:35.0" uuid="0d53ba20-7de4-4baa-bd8a-401048447d66" updated="2014-03-10 10:02:42.0" protectedtitlecache="true" titleCache="Achillea"   root_id="2750" startNumber="1"/>
+
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23710" created="2014-03-10 10:06:57.0" uuid="95e05e82-499d-4b8a-ad6b-1085f74a7496" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550"    sourceType="PTS"/>
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23711" created="2014-03-10 10:06:48.0" uuid="f77555fe-0d98-4c9f-98ed-a5bca6b1e342" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550"    sourceType="PTS"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNameEditorTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNameEditorTest.xml
new file mode 100644 (file)
index 0000000..5834898
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Wed Mar 04 16:11:14 CET 2015 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  all rows from Classification (extractionmodel/by-example/SbE-Classification-16-11-06-737.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     31
+      Classification                 1
+      HomotypicalGroup               2
+      SynonymRelationship            1
+      TaxonBase                      5
+      TaxonNameBase                  3
+      TaxonNode                      19
+  
+--><dataset>
+  
+  
+  <TaxonNode id="347" created="2010-12-21 15:09:45.0" uuid="d425a971-1abe-4895-9e1f-1e5c8ff1c84c" countchildren="0"  classification_id="10"  taxon_id="387" treeIndex="#t10#4032#49#346#345#347#" sortIndex="1"/>  
+  <TaxonNode id="351" created="2010-12-21 15:09:46.0" uuid="ce54c396-3694-47f2-abb0-1d7b7e057985" countchildren="0"  classification_id="10"  taxon_id="394" treeIndex="#t10#4032#49#346#345#351#" sortIndex="4"/>
+  
+  <HomotypicalGroup id="368" created="2010-12-21 15:09:45.0" uuid="d7eaa174-4efd-4d09-a427-dce4ed6513f7" />
+  <HomotypicalGroup id="375" created="2010-12-21 15:09:46.0" uuid="62ed57d6-2c69-4404-bb95-248a1c9bb24c" />
+
+  <TaxonNameBase DTYPE="BotanicalName" id="387" created="2010-12-21 15:09:45.0" uuid="d25985c7-6fb4-4b31-8a94-5d7c5ba6ad16" protectedtitlecache="false" titleCache="Asplenium ceterach L." fullTitleCache="Asplenium ceterach L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium ceterach" protectedauthorshipcache="false" protectednamecache="false" specificepithet="ceterach" trinomhybrid="false" anamorphic="false"  homotypicalgroup_id="368" rank_id="778" />
+  <TaxonNameBase DTYPE="BotanicalName" id="388" created="2010-12-21 15:09:45.0" uuid="747021f1-cf5f-4249-a825-228da3368399" protectedtitlecache="true" titleCache="Asplenium cyprium Viane &amp; Van den heede" fullTitleCache="Asplenium cyprium Viane &amp; Van den heede" parsingproblem="16" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="" binomhybrid="false" hybridformula="false" monomhybrid="false" namecache="Asplenium cyprium Viane &amp; Van den heede" protectedauthorshipcache="false" protectednamecache="true" trinomhybrid="false" anamorphic="false" />
+  <TaxonNameBase DTYPE="BotanicalName" id="394" created="2010-12-21 15:09:46.0" uuid="08f8f376-c9a4-4ea9-950d-3ac30b7fa689" protectedtitlecache="false" titleCache="Asplenium viride Huds." fullTitleCache="Asplenium viride Huds." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="Huds." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium viride" protectedauthorshipcache="false" protectednamecache="false" specificepithet="viride" trinomhybrid="false" anamorphic="false"  homotypicalgroup_id="375" rank_id="778" />
+
+  <Classification id="10" created="2010-12-21 15:09:43.0" uuid="0c2b5d25-7b15-4401-8b51-dd4be0ee5cab" protectedtitlecache="false" titleCache="Cyprus"  name_id="10" reference_id="10" />
+  <TaxonBase DTYPE="Taxon" id="387" created="2011-03-01 20:11:27.0" uuid="9763e5f0-6cd4-4d96-b8a4-4420854f7727" protectedtitlecache="false" titleCache="Asplenium ceterach L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"  name_id="387" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Synonym" id="388" created="2010-12-21 15:09:45.0" uuid="1eb173bd-b174-4162-8ff5-5136d8f1e746" protectedtitlecache="false" titleCache="Asplenium cyprium Viane &amp; Van den heede sec. Cyprus" doubtful="false" usenamecache="false"  name_id="388" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="394" created="2011-03-01 20:11:27.0" uuid="aff4fa6f-9aa8-463d-ac07-ec8a1925eb57" protectedtitlecache="false" titleCache="Asplenium viride Huds. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false"  name_id="394" sec_id="10" publish="true"/>
+
+  <SynonymRelationship id="50" created="2010-12-21 15:09:45.0" uuid="60d1466f-5823-4a69-a071-1887d0c1e72b" doubtful="false" partial="false" proparte="false"  relatedfrom_id="388" relatedto_id="387" />
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNavigatorTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/model/TaxonNavigatorTest.xml
new file mode 100644 (file)
index 0000000..32f7003
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Mon Mar 09 12:52:22 CET 2015 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  all rows from Classification (extractionmodel/by-example/SbE-Classification-12-51-51-866.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     26
+      Classification                 1
+      TaxonBase                      6
+      TaxonNameBase                  6
+      TaxonNode                      13
+  
+--><dataset>
+  <TaxonNode id="13" created="2010-12-21 15:09:43.0" uuid="0ac32f24-6d55-44ae-8519-c86c83faa938" countchildren="122" createdby_id="11" classification_id="10" parent_id="4032" taxon_id="11" treeIndex="#t10#4032#13#" sortIndex="0"/>
+  <TaxonNode id="49" created="2010-12-21 15:09:43.0" uuid="572290a9-7535-48c8-9f68-25ddbc9869ee" countchildren="10" createdby_id="11" classification_id="10" parent_id="4032" taxon_id="49" treeIndex="#t10#4032#49#" sortIndex="1"/>
+  <TaxonNode id="344" created="2010-12-21 15:09:45.0" uuid="894bc754-235b-4fa1-aa0c-a2b62e3f684c" countchildren="0" createdby_id="11" classification_id="10" parent_id="345" taxon_id="384" treeIndex="#t10#4032#49#346#345#344#" sortIndex="0"/>
+  <TaxonNode id="345" created="2010-12-21 15:09:45.0" uuid="8667c9d7-18e4-4711-a2be-9d468635744d" countchildren="5" createdby_id="11" classification_id="10" parent_id="346" taxon_id="386" treeIndex="#t10#4032#49#346#345#" sortIndex="0"/>
+  <TaxonNode id="346" created="2010-12-21 15:09:45.0" uuid="ffc9b1ec-278e-4298-8bc2-d36bdb2c33b8" countchildren="1" createdby_id="11" classification_id="10" parent_id="49" taxon_id="385" treeIndex="#t10#4032#49#346#" sortIndex="1"/>
+  <TaxonNode id="347" created="2010-12-21 15:09:45.0" uuid="d425a971-1abe-4895-9e1f-1e5c8ff1c84c" countchildren="0" createdby_id="11" classification_id="10" parent_id="345" taxon_id="387" treeIndex="#t10#4032#49#346#345#347#" sortIndex="1"/>
+  <TaxonNode id="348" created="2010-12-21 15:09:46.0" uuid="3bb05d37-51fa-48f6-9f49-0162f2893dd5" countchildren="0" createdby_id="11" classification_id="10" parent_id="345" taxon_id="391" treeIndex="#t10#4032#49#346#345#348#" sortIndex="2"/>
+  <TaxonNode id="350" created="2010-12-21 15:09:46.0" uuid="3f47c04f-4a84-4f53-95ce-840309900db7" countchildren="1" createdby_id="11" classification_id="10" parent_id="345" taxon_id="393" treeIndex="#t10#4032#49#346#345#350#" sortIndex="3"/>
+  <TaxonNode id="351" created="2010-12-21 15:09:46.0" uuid="ce54c396-3694-47f2-abb0-1d7b7e057985" countchildren="0" createdby_id="11" classification_id="10" parent_id="345" taxon_id="394" treeIndex="#t10#4032#49#346#345#351#" sortIndex="4"/>
+  <TaxonNode id="942" created="2010-12-21 15:09:50.0" uuid="713baf41-c76b-4ba6-be82-ffabb7f895c5" countchildren="0" createdby_id="11" classification_id="10" parent_id="943" taxon_id="1070" treeIndex="#t10#4032#49#3880#943#942#" sortIndex="0"/>
+  <TaxonNode id="943" created="2010-12-21 15:09:50.0" uuid="47336df4-af4b-4b40-84de-34fc445d762c" countchildren="1" createdby_id="11" classification_id="10" parent_id="3880" taxon_id="1072" treeIndex="#t10#4032#49#3880#943#" sortIndex="0"/>
+  <TaxonNode id="3880" created="2012-07-19 21:43:16.0" uuid="05102134-ce13-4a0e-be2e-48aa08ecbea5" countchildren="1" createdby_id="30" classification_id="10" parent_id="49" taxon_id="6110" treeIndex="#t10#4032#49#3880#" sortIndex="9"/>
+  <TaxonNode id="4032" created="2014-01-16 10:24:29.0" uuid="29b3fd3f-29b4-4011-ab12-9c1ad1607dbd" countchildren="2" classification_id="10" treeIndex="#t10#4032#"/>
+
+  <TaxonNameBase DTYPE="BotanicalName" id="384" created="2010-12-21 15:09:45.0" uuid="0a89c1d4-b8b9-4bbe-8e25-03cef7179b6d" protectedtitlecache="false" titleCache="Asplenium adiantum-nigrum L." fullTitleCache="Asplenium adiantum-nigrum L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium adiantum-nigrum" protectedauthorshipcache="false" protectednamecache="false" specificepithet="adiantum-nigrum" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="365" rank_id="778" combinationauthorteam_id="7220"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="387" created="2010-12-21 15:09:45.0" uuid="d25985c7-6fb4-4b31-8a94-5d7c5ba6ad16" protectedtitlecache="false" titleCache="Asplenium ceterach L." fullTitleCache="Asplenium ceterach L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium ceterach" protectedauthorshipcache="false" protectednamecache="false" specificepithet="ceterach" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="368" rank_id="778" combinationauthorteam_id="674"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="391" created="2010-12-21 15:09:46.0" uuid="bb33b929-77f4-47fd-ac6b-265e947871be" protectedtitlecache="false" titleCache="Asplenium onopteris L." fullTitleCache="Asplenium onopteris L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium onopteris" protectedauthorshipcache="false" protectednamecache="false" specificepithet="onopteris" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="372" rank_id="778" combinationauthorteam_id="678"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="393" created="2010-12-21 15:09:46.0" uuid="d0d8df45-6d47-4dbf-8554-ea1aa1e00dc9" protectedtitlecache="false" titleCache="Asplenium trichomanes L." fullTitleCache="Asplenium trichomanes L." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="L." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium trichomanes" protectedauthorshipcache="false" protectednamecache="false" specificepithet="trichomanes" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="374" rank_id="778" combinationauthorteam_id="7390"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="394" created="2010-12-21 15:09:46.0" uuid="08f8f376-c9a4-4ea9-950d-3ac30b7fa689" protectedtitlecache="false" titleCache="Asplenium viride Huds." fullTitleCache="Asplenium viride Huds." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="Huds." binomhybrid="false" genusoruninomial="Asplenium" hybridformula="false" monomhybrid="false" namecache="Asplenium viride" protectedauthorshipcache="false" protectednamecache="false" specificepithet="viride" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="375" rank_id="778" combinationauthorteam_id="682"/>
+  <TaxonNameBase DTYPE="BotanicalName" id="1070" created="2010-12-21 15:09:50.0" uuid="d23fca33-18c6-4b5c-81d7-93359afd76e1" protectedtitlecache="false" titleCache="Cystopteris fragilis (L.) Bernh." fullTitleCache="Cystopteris fragilis (L.) Bernh." parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="(L.) Bernh." binomhybrid="false" genusoruninomial="Cystopteris" hybridformula="false" monomhybrid="false" namecache="Cystopteris fragilis" protectedauthorshipcache="false" protectednamecache="false" specificepithet="fragilis" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="1004" rank_id="778" basionymauthorteam_id="2019" combinationauthorteam_id="2021"/>
+
+  <Classification id="10" created="2010-12-21 15:09:43.0" uuid="0c2b5d25-7b15-4401-8b51-dd4be0ee5cab" protectedtitlecache="false" titleCache="Cyprus" createdby_id="11" name_id="10" reference_id="10" rootnode_id="4032"/>
+
+  <TaxonBase DTYPE="Taxon" id="384" created="2011-03-01 20:11:27.0" uuid="b9f1429d-137c-4c23-a11f-7808b50bde4b" protectedtitlecache="false" titleCache="Asplenium adiantum-nigrum L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="384" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="387" created="2011-03-01 20:11:27.0" uuid="9763e5f0-6cd4-4d96-b8a4-4420854f7727" protectedtitlecache="false" titleCache="Asplenium ceterach L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="387" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="391" created="2011-03-01 20:11:27.0" uuid="42c42377-3847-4d85-811f-743ab3d3f0a3" protectedtitlecache="false" titleCache="Asplenium onopteris L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="391" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="393" created="2010-12-21 15:09:46.0" uuid="c1263710-0225-4429-b2b7-518e6db564c5" protectedtitlecache="false" titleCache="Asplenium trichomanes L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="393" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="394" created="2011-03-01 20:11:27.0" uuid="aff4fa6f-9aa8-463d-ac07-ec8a1925eb57" protectedtitlecache="false" titleCache="Asplenium viride Huds. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="394" sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="1070" created="2011-03-01 20:11:30.0" uuid="f380f8ff-2dab-4ea7-a3c9-4758f963eb6b" protectedtitlecache="false" titleCache="Cystopteris fragilis (L.) Bernh. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="1070" sec_id="10" publish="true"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/cdm/testRemotingApplicationContext.xml
new file mode 100644 (file)
index 0000000..dda9952
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+  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/context
+    http://www.springframework.org/schema/context/spring-context-2.5.xsd
+    http://www.springframework.org/schema/tx
+    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
+
+    <bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean"/>          
+
+</beans>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/AbstractLazyInitializerTest.xml
new file mode 100644 (file)
index 0000000..59cfc00
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Mon Oct 06 13:11:21 CEST 2014 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  TaxonBase where uuid like '8217ef77-2ab1-4318-bd67-ccd0cdef07c4' (extractionmodel/by-example/SbE-TaxonBase-13-09-59-049.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     2
+      TaxonBase                      1
+      TaxonNameBase                  1
+  
+--><dataset>
+  <TaxonNameBase DTYPE="BotanicalName" id="32" created="2010-12-21 15:09:43.0" uuid="f8be96d0-9af9-4e19-b9f1-52a4c0ecc580" protectedtitlecache="true" titleCache="Achillea arabica Kotschy" fullTitleCache="Achillea arabica Kotschy" parsingproblem="0" problemends="-1" problemstarts="-1" protectedfulltitlecache="false" authorshipcache="Kotschy" binomhybrid="false" genusoruninomial="Achillea" hybridformula="false" monomhybrid="false" namecache="Achillea arabica" protectedauthorshipcache="false" protectednamecache="false" specificepithet="arabica" trinomhybrid="false" anamorphic="false" createdby_id="11" homotypicalgroup_id="32" rank_id="778" combinationauthorteam_id="36"/>
+
+  <TaxonBase DTYPE="Taxon" id="32" created="2011-03-01 20:11:26.0" uuid="8217ef77-2ab1-4318-bd67-ccd0cdef07c4" updated="2014-09-17 09:27:47.0" protectedtitlecache="true" titleCache="Achillea arabica Kotschy sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" name_id="32" sec_id="10" publish="true"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.xml
new file mode 100644 (file)
index 0000000..ba23175
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Thu Oct 09 18:00:09 CEST 2014 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  PolytomousKey where uuid like '0d53ba20-7de4-4baa-bd8a-401048447d66' (extractionmodel/by-example/SbE-PolytomousKey-17-59-56-907.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     79
+      AgentBase                      1
+      Credit                         1
+      DefinedTermBase                1
+      Extension                      1
+      KeyStatement                   10
+      KeyStatement_LanguageString    10
+      LanguageString                 19
+      OriginalSourceBase             2
+      PolytomousKey                  2
+      PolytomousKeyNode              10
+      PolytomousKeyNode_LanguageString 9
+      PolytomousKey_Credit           1
+      PolytomousKey_Extension        1
+      PolytomousKey_OriginalSourceBase 2
+      PolytomousKey_RightsInfo       1
+      PolytomousKey_Taxon            1
+      RightsInfo                     1
+      TaxonBase                      6
+  
+--><dataset>
+  <PolytomousKey_Extension PolytomousKey_id="1550" extensions_id="10"/>
+
+  <PolytomousKey_Credit PolytomousKey_id="1550" credits_id="20" sortIndex="0"/>
+
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2751" modifyingtext_id="13780" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2752" modifyingtext_id="13781" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2753" modifyingtext_id="13795" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2754" modifyingtext_id="13788" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2755" modifyingtext_id="13785" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2756" modifyingtext_id="13787" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2757" modifyingtext_id="13794" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2758" modifyingtext_id="13791" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2759" modifyingtext_id="13793" modifyingtext_mapkey_id="124"/>
+
+  <LanguageString id="13780" created="2014-03-10 10:03:09.0" uuid="cceaa60b-61f4-4c8a-bb0e-d45f0fa3e2dc" text="Modifying Text 1a" language_id="124"/>
+  <LanguageString id="13781" created="2014-03-10 10:03:17.0" uuid="01a0ace4-de49-4725-9909-e881fb13035d" text="" language_id="124"/>
+  <LanguageString id="13782" created="2014-03-10 10:03:48.0" uuid="ec0fea40-69dd-4c3e-ab7a-34948037a069" updated="2014-03-10 10:06:32.0" text="Capitula with ligulate ray-florets; leaves pinnatisect" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13783" created="2014-03-10 10:04:03.0" uuid="82f8a3a0-567f-4d89-ba10-3f3699111d55" updated="2014-03-10 10:06:32.0" text="Ray-florets yellow" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13784" created="2014-03-10 10:04:21.0" uuid="4270501f-1efc-45c2-9e8f-c65f120e8f4c" updated="2014-03-10 10:06:32.0" text="Stem thinly pilose; leaves 10-15 mm wide, with spreading linear-subulate segments; perennial herb" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13785" created="2014-03-10 10:04:07.0" uuid="813f5fd6-c8f6-43e8-9a2b-1464f3ba052a" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13786" created="2014-03-10 10:04:53.0" uuid="ba17ac94-632f-4d69-ac89-a882e19ff1c5" updated="2014-03-10 10:06:32.0" text="Stem white-tomentose; leaves 1-3 mm wide, with minute overlapping, transverse segments; small subshrubs with a woody base" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13787" created="2014-03-10 10:04:34.0" uuid="ab219a5d-e0c4-45fd-8405-6693c3fb8abf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13788" created="2014-03-10 10:03:53.0" uuid="2baec690-422d-4f85-bcfd-24f5718cbecf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13789" created="2014-03-10 10:05:16.0" uuid="7c6a7984-8e6f-48b1-86b2-d5d643199bf3" updated="2014-03-10 10:06:32.0" text="Ray-florets white" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13790" created="2014-03-10 10:05:34.0" uuid="72bd8bc9-1904-47ab-8bec-b9296a98b244" updated="2014-03-10 10:06:32.0" text="Perennial herb; stem pilose, hairy or glabrescent, but not tomentose; ligules 1-2 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13791" created="2014-03-10 10:05:20.0" uuid="c917e3fb-e48b-4207-b77d-c1c108e37906" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13792" created="2014-03-10 10:06:15.0" uuid="c5dd35d8-da6a-4d05-b30c-6b55220bd989" updated="2014-03-10 10:06:32.0" text="Shrub with a woody base; stem white-tomentose or woolly; ligules 4-5 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13793" created="2014-03-10 10:06:03.0" uuid="227a17f6-1ca1-4d06-8480-25711b614863" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13794" created="2014-03-10 10:05:07.0" uuid="2c434ab1-8ca7-4464-b5cd-4cee40db41ed" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13795" created="2014-03-10 10:03:38.0" uuid="27190d54-f53b-401e-820c-edfb36d4bcbf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13796" created="2014-03-10 10:03:25.0" uuid="69cffb28-8a85-478f-bcae-533e20938ccd" updated="2014-03-10 10:06:32.0" text="Capitula without ligulate ray-florets; leaves entire or subentire" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="14570" created="2014-10-09 15:42:33.0" uuid="84967760-6dbe-4af4-8e0c-309f1af6ce20" updated="2014-10-09 15:42:44.0" text="Question 1" createdby_id="10" updatedby_id="10" language_id="124"/>
+  <LanguageString id="14571" created="2014-10-09 15:42:55.0" uuid="d82f37b1-f51d-42c1-a291-0c7820db155e" updated="2014-10-09 15:43:03.0" text="Question 2" createdby_id="10" updatedby_id="10" language_id="124"/>
+
+  <TaxonBase DTYPE="Taxon" id="32" created="2011-03-01 20:11:26.0" uuid="8217ef77-2ab1-4318-bd67-ccd0cdef07c4" protectedtitlecache="false" titleCache="Achillea arabica Kotschy sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="35" created="2010-12-21 15:09:43.0" uuid="fade44fd-34b2-455f-861a-d1372b866f06" protectedtitlecache="false" titleCache="Achillea sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="36" created="2011-03-01 20:11:26.0" uuid="05f0a2e1-e3c3-4e74-8fec-8a0ae89236c3" protectedtitlecache="false" titleCache="Achillea cretica L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="37" created="2011-03-01 20:11:26.0" uuid="0f8d18a9-e861-48e8-bfab-83e01a379bc0" protectedtitlecache="false" titleCache="Achillea maritima (L.)Ehrend. &amp; Y.-P. Guo subsp. maritima sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="40" created="2010-12-21 15:09:43.0" uuid="2b336df7-29e8-4f79-985f-66502739d22f" protectedtitlecache="false" titleCache="Achillea millefolium L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="41" created="2011-03-01 20:11:26.0" uuid="094e1af8-efd8-4605-b037-b4f715379562" protectedtitlecache="false" titleCache="Achillea santolinoides subsp. wilhelmsii (K. Koch) Greuter sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" sec_id="10" publish="true"/>
+
+  <PolytomousKey_Taxon polytomousKey_id="1550" taxon_id="35"/>
+
+  <RightsInfo id="10" created="2014-10-09 15:45:53.0" uuid="bdfb572b-be25-45e7-9349-22a9da43531f" updated="2014-10-09 15:48:01.0" text="Rights Text Test" createdby_id="10" updatedby_id="10" agent_id="4808" type_id="2056"/>
+
+  <PolytomousKeyNode id="2750" created="2014-03-10 10:02:35.0" uuid="75e4c924-ff58-4ee7-a59d-fd9173517d08" updated="2014-03-10 10:02:42.0" nodenumber="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2760"/>
+  <PolytomousKeyNode id="2751" created="2014-03-10 10:02:52.0" uuid="23e51ff7-11b1-443b-aff2-3fe8b5ace9fe" sortindex="0" key_id="1550" statement_id="2467" subkey_id="751" taxon_id="37" parent_id="2750"/>
+  <PolytomousKeyNode id="2752" created="2014-03-10 10:03:16.0" uuid="dcf326f7-c0ad-4e76-b64e-43aea11f767c" key_id="1550"/>
+  <PolytomousKeyNode id="2753" created="2014-03-10 10:03:38.0" uuid="b775c027-13c0-4b87-8aa9-712faeaafbdc" updated="2014-03-10 10:06:32.0" nodenumber="2" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2761" statement_id="2460"  subkey_id="751" parent_id="2750"/>
+  <PolytomousKeyNode id="2754" created="2014-03-10 10:03:52.0" uuid="df5d5922-35de-43d5-9d46-7730ae28eeb3" updated="2014-03-10 10:06:32.0" nodenumber="3" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2461" subkey_id="751" parent_id="2753"/>
+  <PolytomousKeyNode id="2755" created="2014-03-10 10:04:07.0" uuid="0c8583ee-399e-433c-b76b-272c54dbd9f5" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2462" taxon_id="32" parent_id="2754"/>
+  <PolytomousKeyNode id="2756" created="2014-03-10 10:04:34.0" uuid="a10e1e61-82c0-470e-a245-10a927b80c9a" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2463" taxon_id="41" parent_id="2754"/>
+  <PolytomousKeyNode id="2757" created="2014-03-10 10:05:07.0" uuid="19f7a6a2-4c55-49cb-8b92-d68a9fd9074c" updated="2014-03-10 10:06:32.0" nodenumber="4" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2464" parent_id="2753"/>
+  <PolytomousKeyNode id="2758" created="2014-03-10 10:05:20.0" uuid="0a4d86d1-fba5-4088-8dcc-6f0e7268ca5b" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2465" taxon_id="40" parent_id="2757"/>
+  <PolytomousKeyNode id="2759" created="2014-03-10 10:06:03.0" uuid="827c9df4-ac15-4163-95ab-616d51f62803" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2466" taxon_id="36" parent_id="2757"/>
+
+  <Credit id="20" created="2014-10-09 15:45:22.0" uuid="aa412b15-ee6c-4834-b14e-a66969cb398d" updated="2014-10-09 15:48:01.0" text="Credits Text Test" createdby_id="10" updatedby_id="10" language_id="124" agent_id="4809"/>
+
+  <KeyStatement id="2460" created="2014-03-10 10:03:48.0" uuid="66da6df7-784c-4d5a-9378-58b2cf92ba13" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2461" created="2014-03-10 10:04:03.0" uuid="f9cfd498-de47-48fd-b38c-43cf57b63750" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2462" created="2014-03-10 10:04:21.0" uuid="817fb39e-91d4-4d8c-a942-6acab47575d1" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2463" created="2014-03-10 10:04:53.0" uuid="6b571b86-7764-4f27-925c-ae5e2653f7ad" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2464" created="2014-03-10 10:05:16.0" uuid="91bbb534-abdf-4915-9f6f-a0cb41f8cf58" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2465" created="2014-03-10 10:05:34.0" uuid="1991ca31-2630-4917-8db3-eb67cec8f231" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2466" created="2014-03-10 10:06:15.0" uuid="3e1bbc59-b098-4533-ac35-245e1140a0ae" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2467" created="2014-03-10 10:03:24.0" uuid="68fd99f6-64ce-4bb8-a6af-d2cf2c046e2c" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2760" created="2014-10-09 15:42:33.0" uuid="b9702653-f620-4208-bda9-a6fe082004d1" updated="2014-10-09 15:42:44.0" createdby_id="10" updatedby_id="10"/>
+  <KeyStatement id="2761" created="2014-10-09 15:42:55.0" uuid="688a432f-4b57-4c6f-a8f6-0c468a28cb7c" updated="2014-10-09 15:43:03.0" createdby_id="10" updatedby_id="10"/>
+
+  <AgentBase DTYPE="Person" id="4809" created="2010-12-21 15:09:59.0" uuid="945d08f2-eb92-45b6-9252-6275ea6d338b" protectedtitlecache="false" titleCache="R. A. Graham" nomenclaturaltitle="R. A. Graham" createdby_id="11"/>
+
+  <DefinedTermBase DTYPE="Language" id="124" created="2010-12-21 15:09:09.0" uuid="e9f8cdb7-6819-44e8-95d3-e2d0690c3523" protectedtitlecache="false" titleCache="English" uri=""  vocabulary_id="10" termType="LA" idInVocabulary="eng"/>
+
+  <Extension id="10" created="2014-10-09 15:45:41.0" uuid="0d6f35d7-7e76-446a-a017-7e8355ee1b4c" updated="2014-10-09 15:48:01.0" extendedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" extendedObj_id="1550" value="http://test.com" createdby_id="10" updatedby_id="10" type_id="2075"/>
+
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23710"/>
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23711"/>
+
+  <PolytomousKey_RightsInfo PolytomousKey_id="1550" rights_id="10"/>
+
+  <KeyStatement_LanguageString KeyStatement_id="2460" label_id="13782" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2461" label_id="13783" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2462" label_id="13784" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2463" label_id="13786" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2464" label_id="13789" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2465" label_id="13790" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2466" label_id="13792" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2467" label_id="13796" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2760" label_id="14570" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2761" label_id="14571" label_mapkey_id="124"/>
+
+  <PolytomousKey id="751" created="2013-03-24 11:17:08.0" uuid="9d8bf4f6-a70a-4b80-8556-2ccfb436ff01" protectedtitlecache="true" titleCache="Asphodeline" createdby_id="30"  startNumber="1"/>
+  <PolytomousKey id="1550" created="2014-03-10 10:02:35.0" uuid="0d53ba20-7de4-4baa-bd8a-401048447d66" updated="2014-03-10 10:02:42.0" protectedtitlecache="true" titleCache="Achillea" createdby_id="30" updatedby_id="30" root_id="2750" startNumber="1"/>
+
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23710" created="2014-03-10 10:06:57.0" uuid="95e05e82-499d-4b8a-ad6b-1085f74a7496" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="1730" sourceType="PTS"/>
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23711" created="2014-03-10 10:06:48.0" uuid="f77555fe-0d98-4c9f-98ed-a5bca6b1e342" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="50" sourceType="PTS"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/remoting/session/CdmEntitySessionManagerTest.xml b/eu.etaxonomy.taxeditor.test/src/main/resources/eu/etaxonomy/taxeditor/remoting/session/CdmEntitySessionManagerTest.xml
new file mode 100644 (file)
index 0000000..fb48dac
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+  generated by Jailer 4.3, Thu Oct 09 18:00:09 CEST 2014 from cmathew@cmbgbm-t530
+  
+  Extraction Model:  PolytomousKey where uuid like '0d53ba20-7de4-4baa-bd8a-401048447d66' (extractionmodel/by-example/SbE-PolytomousKey-17-59-56-907.csv)
+  Database URL:      jdbc:mysql://127.0.0.1:3306/local-cyprus
+  Database User:     root
+  
+  Exported Rows:     79
+      AgentBase                      1
+      Credit                         1
+      DefinedTermBase                1
+      Extension                      1
+      KeyStatement                   10
+      KeyStatement_LanguageString    10
+      LanguageString                 19
+      OriginalSourceBase             2
+      PolytomousKey                  2
+      PolytomousKeyNode              10
+      PolytomousKeyNode_LanguageString 9
+      PolytomousKey_Credit           1
+      PolytomousKey_Extension        1
+      PolytomousKey_OriginalSourceBase 2
+      PolytomousKey_RightsInfo       1
+      PolytomousKey_Taxon            1
+      RightsInfo                     1
+      TaxonBase                      6
+  
+--><dataset>
+  <PolytomousKey_Extension PolytomousKey_id="1550" extensions_id="10"/>
+
+  <PolytomousKey_Credit PolytomousKey_id="1550" credits_id="20" sortIndex="0"/>
+
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2751" modifyingtext_id="13780" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2752" modifyingtext_id="13781" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2753" modifyingtext_id="13795" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2754" modifyingtext_id="13788" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2755" modifyingtext_id="13785" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2756" modifyingtext_id="13787" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2757" modifyingtext_id="13794" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2758" modifyingtext_id="13791" modifyingtext_mapkey_id="124"/>
+  <PolytomousKeyNode_LanguageString PolytomousKeyNode_id="2759" modifyingtext_id="13793" modifyingtext_mapkey_id="124"/>
+
+  <LanguageString id="13780" created="2014-03-10 10:03:09.0" uuid="cceaa60b-61f4-4c8a-bb0e-d45f0fa3e2dc" text="Modifying Text 1a" language_id="124"/>
+  <LanguageString id="13781" created="2014-03-10 10:03:17.0" uuid="01a0ace4-de49-4725-9909-e881fb13035d" text="" language_id="124"/>
+  <LanguageString id="13782" created="2014-03-10 10:03:48.0" uuid="ec0fea40-69dd-4c3e-ab7a-34948037a069" updated="2014-03-10 10:06:32.0" text="Capitula with ligulate ray-florets; leaves pinnatisect" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13783" created="2014-03-10 10:04:03.0" uuid="82f8a3a0-567f-4d89-ba10-3f3699111d55" updated="2014-03-10 10:06:32.0" text="Ray-florets yellow" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13784" created="2014-03-10 10:04:21.0" uuid="4270501f-1efc-45c2-9e8f-c65f120e8f4c" updated="2014-03-10 10:06:32.0" text="Stem thinly pilose; leaves 10-15 mm wide, with spreading linear-subulate segments; perennial herb" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13785" created="2014-03-10 10:04:07.0" uuid="813f5fd6-c8f6-43e8-9a2b-1464f3ba052a" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13786" created="2014-03-10 10:04:53.0" uuid="ba17ac94-632f-4d69-ac89-a882e19ff1c5" updated="2014-03-10 10:06:32.0" text="Stem white-tomentose; leaves 1-3 mm wide, with minute overlapping, transverse segments; small subshrubs with a woody base" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13787" created="2014-03-10 10:04:34.0" uuid="ab219a5d-e0c4-45fd-8405-6693c3fb8abf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13788" created="2014-03-10 10:03:53.0" uuid="2baec690-422d-4f85-bcfd-24f5718cbecf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13789" created="2014-03-10 10:05:16.0" uuid="7c6a7984-8e6f-48b1-86b2-d5d643199bf3" updated="2014-03-10 10:06:32.0" text="Ray-florets white" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13790" created="2014-03-10 10:05:34.0" uuid="72bd8bc9-1904-47ab-8bec-b9296a98b244" updated="2014-03-10 10:06:32.0" text="Perennial herb; stem pilose, hairy or glabrescent, but not tomentose; ligules 1-2 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13791" created="2014-03-10 10:05:20.0" uuid="c917e3fb-e48b-4207-b77d-c1c108e37906" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13792" created="2014-03-10 10:06:15.0" uuid="c5dd35d8-da6a-4d05-b30c-6b55220bd989" updated="2014-03-10 10:06:32.0" text="Shrub with a woody base; stem white-tomentose or woolly; ligules 4-5 mm diam." createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13793" created="2014-03-10 10:06:03.0" uuid="227a17f6-1ca1-4d06-8480-25711b614863" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13794" created="2014-03-10 10:05:07.0" uuid="2c434ab1-8ca7-4464-b5cd-4cee40db41ed" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13795" created="2014-03-10 10:03:38.0" uuid="27190d54-f53b-401e-820c-edfb36d4bcbf" updated="2014-03-10 10:06:32.0" text="" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="13796" created="2014-03-10 10:03:25.0" uuid="69cffb28-8a85-478f-bcae-533e20938ccd" updated="2014-03-10 10:06:32.0" text="Capitula without ligulate ray-florets; leaves entire or subentire" createdby_id="30" updatedby_id="30" language_id="124"/>
+  <LanguageString id="14570" created="2014-10-09 15:42:33.0" uuid="84967760-6dbe-4af4-8e0c-309f1af6ce20" updated="2014-10-09 15:42:44.0" text="Question 1" createdby_id="10" updatedby_id="10" language_id="124"/>
+  <LanguageString id="14571" created="2014-10-09 15:42:55.0" uuid="d82f37b1-f51d-42c1-a291-0c7820db155e" updated="2014-10-09 15:43:03.0" text="Question 2" createdby_id="10" updatedby_id="10" language_id="124"/>
+
+  <TaxonBase DTYPE="Taxon" id="32" created="2011-03-01 20:11:26.0" uuid="8217ef77-2ab1-4318-bd67-ccd0cdef07c4" protectedtitlecache="false" titleCache="Achillea arabica Kotschy sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="35" created="2010-12-21 15:09:43.0" uuid="fade44fd-34b2-455f-861a-d1372b866f06" protectedtitlecache="false" titleCache="Achillea sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="36" created="2011-03-01 20:11:26.0" uuid="05f0a2e1-e3c3-4e74-8fec-8a0ae89236c3" protectedtitlecache="false" titleCache="Achillea cretica L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="37" created="2011-03-01 20:11:26.0" uuid="0f8d18a9-e861-48e8-bfab-83e01a379bc0" protectedtitlecache="false" titleCache="Achillea maritima (L.)Ehrend. &amp; Y.-P. Guo subsp. maritima sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="40" created="2010-12-21 15:09:43.0" uuid="2b336df7-29e8-4f79-985f-66502739d22f" protectedtitlecache="false" titleCache="Achillea millefolium L. sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11"  sec_id="10" publish="true"/>
+  <TaxonBase DTYPE="Taxon" id="41" created="2011-03-01 20:11:26.0" uuid="094e1af8-efd8-4605-b037-b4f715379562" protectedtitlecache="false" titleCache="Achillea santolinoides subsp. wilhelmsii (K. Koch) Greuter sec. Cyprus" doubtful="false" usenamecache="false" excluded="false" taxonstatusunknown="false" taxonomicchildrencount="0" unplaced="false" createdby_id="11" sec_id="10" publish="true"/>
+
+  <PolytomousKey_Taxon polytomousKey_id="1550" taxon_id="35"/>
+
+  <RightsInfo id="10" created="2014-10-09 15:45:53.0" uuid="bdfb572b-be25-45e7-9349-22a9da43531f" updated="2014-10-09 15:48:01.0" text="Rights Text Test" createdby_id="10" updatedby_id="10" agent_id="4808" type_id="2056"/>
+
+  <PolytomousKeyNode id="2750" created="2014-03-10 10:02:35.0" uuid="75e4c924-ff58-4ee7-a59d-fd9173517d08" updated="2014-03-10 10:02:42.0" nodenumber="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2760"/>
+  <PolytomousKeyNode id="2751" created="2014-03-10 10:02:52.0" uuid="23e51ff7-11b1-443b-aff2-3fe8b5ace9fe" sortindex="0" key_id="1550" statement_id="2467" subkey_id="1550" taxon_id="37" parent_id="2750"/>
+  <PolytomousKeyNode id="2752" created="2014-03-10 10:03:16.0" uuid="dcf326f7-c0ad-4e76-b64e-43aea11f767c" key_id="1550"/>
+  <PolytomousKeyNode id="2753" created="2014-03-10 10:03:38.0" uuid="b775c027-13c0-4b87-8aa9-712faeaafbdc" updated="2014-03-10 10:06:32.0" nodenumber="2" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" question_id="2761" statement_id="2460"  subkey_id="1550" parent_id="2750"/>
+  <PolytomousKeyNode id="2754" created="2014-03-10 10:03:52.0" uuid="df5d5922-35de-43d5-9d46-7730ae28eeb3" updated="2014-03-10 10:06:32.0" nodenumber="3" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2461" subkey_id="1550" parent_id="2753"/>
+  <PolytomousKeyNode id="2755" created="2014-03-10 10:04:07.0" uuid="0c8583ee-399e-433c-b76b-272c54dbd9f5" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2462" taxon_id="32" parent_id="2754"/>
+  <PolytomousKeyNode id="2756" created="2014-03-10 10:04:34.0" uuid="a10e1e61-82c0-470e-a245-10a927b80c9a" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2463" taxon_id="41" parent_id="2754"/>
+  <PolytomousKeyNode id="2757" created="2014-03-10 10:05:07.0" uuid="19f7a6a2-4c55-49cb-8b92-d68a9fd9074c" updated="2014-03-10 10:06:32.0" nodenumber="4" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2464" parent_id="2753"/>
+  <PolytomousKeyNode id="2758" created="2014-03-10 10:05:20.0" uuid="0a4d86d1-fba5-4088-8dcc-6f0e7268ca5b" updated="2014-03-10 10:06:32.0" sortindex="0" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2465" taxon_id="40" parent_id="2757"/>
+  <PolytomousKeyNode id="2759" created="2014-03-10 10:06:03.0" uuid="827c9df4-ac15-4163-95ab-616d51f62803" updated="2014-03-10 10:06:32.0" sortindex="1" createdby_id="30" updatedby_id="30" key_id="1550" statement_id="2466" taxon_id="36" parent_id="2757"/>
+
+  <Credit id="20" created="2014-10-09 15:45:22.0" uuid="aa412b15-ee6c-4834-b14e-a66969cb398d" updated="2014-10-09 15:48:01.0" text="Credits Text Test" createdby_id="10" updatedby_id="10" language_id="124" agent_id="4809"/>
+
+  <KeyStatement id="2460" created="2014-03-10 10:03:48.0" uuid="66da6df7-784c-4d5a-9378-58b2cf92ba13" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2461" created="2014-03-10 10:04:03.0" uuid="f9cfd498-de47-48fd-b38c-43cf57b63750" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2462" created="2014-03-10 10:04:21.0" uuid="817fb39e-91d4-4d8c-a942-6acab47575d1" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2463" created="2014-03-10 10:04:53.0" uuid="6b571b86-7764-4f27-925c-ae5e2653f7ad" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2464" created="2014-03-10 10:05:16.0" uuid="91bbb534-abdf-4915-9f6f-a0cb41f8cf58" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2465" created="2014-03-10 10:05:34.0" uuid="1991ca31-2630-4917-8db3-eb67cec8f231" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2466" created="2014-03-10 10:06:15.0" uuid="3e1bbc59-b098-4533-ac35-245e1140a0ae" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2467" created="2014-03-10 10:03:24.0" uuid="68fd99f6-64ce-4bb8-a6af-d2cf2c046e2c" updated="2014-03-10 10:06:32.0" createdby_id="30" updatedby_id="30"/>
+  <KeyStatement id="2760" created="2014-10-09 15:42:33.0" uuid="b9702653-f620-4208-bda9-a6fe082004d1" updated="2014-10-09 15:42:44.0" createdby_id="10" updatedby_id="10"/>
+  <KeyStatement id="2761" created="2014-10-09 15:42:55.0" uuid="688a432f-4b57-4c6f-a8f6-0c468a28cb7c" updated="2014-10-09 15:43:03.0" createdby_id="10" updatedby_id="10"/>
+
+  <AgentBase DTYPE="Person" id="4809" created="2010-12-21 15:09:59.0" uuid="945d08f2-eb92-45b6-9252-6275ea6d338b" protectedtitlecache="false" titleCache="R. A. Graham" nomenclaturaltitle="R. A. Graham" createdby_id="11"/>
+
+  <DefinedTermBase DTYPE="Language" id="124" created="2010-12-21 15:09:09.0" uuid="e9f8cdb7-6819-44e8-95d3-e2d0690c3523" protectedtitlecache="false" titleCache="English" uri=""  vocabulary_id="10" termType="LA" idInVocabulary="eng"/>
+
+  <Extension id="10" created="2014-10-09 15:45:41.0" uuid="0d6f35d7-7e76-446a-a017-7e8355ee1b4c" updated="2014-10-09 15:48:01.0" extendedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" extendedObj_id="1550" value="http://test.com" createdby_id="10" updatedby_id="10" type_id="2075"/>
+
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23710"/>
+  <PolytomousKey_OriginalSourceBase PolytomousKey_id="1550" sources_id="23711"/>
+
+  <PolytomousKey_RightsInfo PolytomousKey_id="1550" rights_id="10"/>
+
+  <KeyStatement_LanguageString KeyStatement_id="2460" label_id="13782" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2461" label_id="13783" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2462" label_id="13784" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2463" label_id="13786" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2464" label_id="13789" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2465" label_id="13790" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2466" label_id="13792" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2467" label_id="13796" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2760" label_id="14570" label_mapkey_id="124"/>
+  <KeyStatement_LanguageString KeyStatement_id="2761" label_id="14571" label_mapkey_id="124"/>
+
+  <PolytomousKey id="751" created="2013-03-24 11:17:08.0" uuid="9d8bf4f6-a70a-4b80-8556-2ccfb436ff01" protectedtitlecache="true" titleCache="Asphodeline" createdby_id="30"  startNumber="1"/>
+  <PolytomousKey id="1550" created="2014-03-10 10:02:35.0" uuid="0d53ba20-7de4-4baa-bd8a-401048447d66" updated="2014-03-10 10:02:42.0" protectedtitlecache="true" titleCache="Achillea" createdby_id="30" updatedby_id="30" root_id="2750" startNumber="1"/>
+
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23710" created="2014-03-10 10:06:57.0" uuid="95e05e82-499d-4b8a-ad6b-1085f74a7496" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="1730" sourceType="PTS"/>
+  <OriginalSourceBase DTYPE="IdentifiableSource" id="23711" created="2014-03-10 10:06:48.0" uuid="f77555fe-0d98-4c9f-98ed-a5bca6b1e342" updated="2014-03-10 10:07:33.0" sourcedObj_type="eu.etaxonomy.cdm.model.description.PolytomousKey" sourcedObj_id="1550" createdby_id="30" updatedby_id="30" citation_id="50" sourceType="PTS"/>
+
+  
+</dataset>
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.h2.db b/eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.h2.db
new file mode 100644 (file)
index 0000000..19893fb
Binary files /dev/null and b/eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.h2.db differ
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.trace.db b/eu.etaxonomy.taxeditor.test/src/main/resources/h2/cdmTest.trace.db
new file mode 100644 (file)
index 0000000..7d3d1f8
--- /dev/null
@@ -0,0 +1,7173 @@
+01-28 16:42:12 jdbc[3]: exception
+org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement:
+SELECT value FROM CdmMetaData WHERE propertyname=0 [42102-170]
+01-28 16:42:15 jdbc[6]: exception
+org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement:
+SELECT value FROM CdmMetaData WHERE propertyname=0 [42102-170]
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:42:43 jdbc[7]: null
+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.<init>(JdbcConnection.java:120)
+       at org.h2.jdbc.JdbcConnection.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       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
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement:
+alter table Address drop constraint FK1ED033D44FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement:
+alter table Address drop constraint FK1ED033D4BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement:
+alter table Address drop constraint FK1ED033D4CDD3C17E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ADDRESS" not found; SQL statement:
+alter table Address drop constraint FK1ED033D4132A2FE8 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ADDRESS_AUD" not found; SQL statement:
+alter table Address_AUD drop constraint FK115657A534869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement:
+alter table AgentBase drop constraint FK1205D3564FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement:
+alter table AgentBase drop constraint FK1205D356BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE" not found; SQL statement:
+alter table AgentBase drop constraint FK1205D356A830578 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AUD" not found; SQL statement:
+alter table AgentBase_AUD drop constraint FK29CC662734869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ADDRESS" not found; SQL statement:
+alter table AgentBase_Address drop constraint FK1EDFF7EB50751EC5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ADDRESS" not found; SQL statement:
+alter table AgentBase_Address drop constraint FK1EDFF7EB86EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AGENTBASE" not found; SQL statement:
+alter table AgentBase_AgentBase drop constraint FK4D34EDADE9E535F9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_AGENTBASE" not found; SQL statement:
+alter table AgentBase_AgentBase drop constraint FK4D34EDAD1C0E9907 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ANNOTATION" not found; SQL statement:
+alter table AgentBase_Annotation drop constraint FK44D5F7D81E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ANNOTATION" not found; SQL statement:
+alter table AgentBase_Annotation drop constraint FK44D5F7D886EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CREDIT" not found; SQL statement:
+alter table AgentBase_Credit drop constraint FK2636742232D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_CREDIT" not found; SQL statement:
+alter table AgentBase_Credit drop constraint FK2636742286EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_DEFINEDTERMBASE" not found; SQL statement:
+alter table AgentBase_DefinedTermBase drop constraint FK6665C77DF116FEB0 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_DEFINEDTERMBASE" not found; SQL statement:
+alter table AgentBase_DefinedTermBase drop constraint FK6665C77D8D9AB196 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_EXTENSION" not found; SQL statement:
+alter table AgentBase_Extension drop constraint FK8E1E5676927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_EXTENSION" not found; SQL statement:
+alter table AgentBase_Extension drop constraint FK8E1E567686EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_IDENTIFIER" not found; SQL statement:
+alter table AgentBase_Identifier drop constraint FK410EB952E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_IDENTIFIER" not found; SQL statement:
+alter table AgentBase_Identifier drop constraint FK410EB95286EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MARKER" not found; SQL statement:
+alter table AgentBase_Marker drop constraint FK365D5D63777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MARKER" not found; SQL statement:
+alter table AgentBase_Marker drop constraint FK365D5D6386EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MEDIA" not found; SQL statement:
+alter table AgentBase_Media drop constraint FKE8FC5D9BC2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_MEDIA" not found; SQL statement:
+alter table AgentBase_Media drop constraint FKE8FC5D9B86EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table AgentBase_OriginalSourceBase drop constraint FKB482C5E63A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table AgentBase_OriginalSourceBase drop constraint FKB482C5E686EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_RIGHTSINFO" not found; SQL statement:
+alter table AgentBase_RightsInfo drop constraint FK4FD6A3CEC13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AGENTBASE_RIGHTSINFO" not found; SQL statement:
+alter table AgentBase_RightsInfo drop constraint FK4FD6A3CE86EFC5D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B4164FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B416BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B4163DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B4166D2CE418 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B4163781DA30 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B416403E17F4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B416AFCA96F8 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION" not found; SQL statement:
+alter table Amplification drop constraint FK9DA6B4161600EAB3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD34FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD3BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD3614CEB1F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD3DEC4385F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD3E671A9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT" not found; SQL statement:
+alter table AmplificationResult drop constraint FK484B7FD3825BDDD3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_AUD" not found; SQL statement:
+alter table AmplificationResult_AUD drop constraint FK343D8C2434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_ANNOTATION" not found; SQL statement:
+alter table AmplificationResult_Annotation drop constraint FKFE4A8B3B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_ANNOTATION" not found; SQL statement:
+alter table AmplificationResult_Annotation drop constraint FKFE4A8B3BD320A65F [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_MARKER" not found; SQL statement:
+alter table AmplificationResult_Marker drop constraint FK5B911A46777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATIONRESULT_MARKER" not found; SQL statement:
+alter table AmplificationResult_Marker drop constraint FK5B911A46D320A65F [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_AUD" not found; SQL statement:
+alter table Amplification_AUD drop constraint FK448EE6E734869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_ANNOTATION" not found; SQL statement:
+alter table Amplification_Annotation drop constraint FK6B251F181E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_ANNOTATION" not found; SQL statement:
+alter table Amplification_Annotation drop constraint FK6B251F18614CEB1F [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_MARKER" not found; SQL statement:
+alter table Amplification_Marker drop constraint FK46E224A3777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "AMPLIFICATION_MARKER" not found; SQL statement:
+alter table Amplification_Marker drop constraint FK46E224A3614CEB1F [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement:
+alter table Annotation drop constraint FK1A21C74F4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement:
+alter table Annotation drop constraint FK1A21C74FBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement:
+alter table Annotation drop constraint FK1A21C74FE8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement:
+alter table Annotation drop constraint FK1A21C74FDF299D00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION" not found; SQL statement:
+alter table Annotation drop constraint FK1A21C74FE7692740 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_AUD" not found; SQL statement:
+alter table Annotation_AUD drop constraint FK1A6BB5A034869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_ANNOTATION" not found; SQL statement:
+alter table Annotation_Annotation drop constraint FKC99DFE3F1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_ANNOTATION" not found; SQL statement:
+alter table Annotation_Annotation drop constraint FKC99DFE3F994CCE20 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_MARKER" not found; SQL statement:
+alter table Annotation_Marker drop constraint FKB17EAF4A777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ANNOTATION_MARKER" not found; SQL statement:
+alter table Annotation_Marker drop constraint FKB17EAF4A994CCE20 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CDMMETADATA" not found; SQL statement:
+alter table CdmMetaData drop constraint FK6EA78F7B4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement:
+alter table Classification drop constraint FKDB1100064FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement:
+alter table Classification drop constraint FKDB110006BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement:
+alter table Classification drop constraint FKDB11000677E2F09E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement:
+alter table Classification drop constraint FKDB1100068D0FB4DA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION" not found; SQL statement:
+alter table Classification drop constraint FKDB110006D1E08681 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_AUD" not found; SQL statement:
+alter table Classification_AUD drop constraint FKEB11BAD734869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ANNOTATION" not found; SQL statement:
+alter table Classification_Annotation drop constraint FKC978FD281E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ANNOTATION" not found; SQL statement:
+alter table Classification_Annotation drop constraint FKC978FD2884A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_CREDIT" not found; SQL statement:
+alter table Classification_Credit drop constraint FK4950A17232D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_CREDIT" not found; SQL statement:
+alter table Classification_Credit drop constraint FK4950A17284A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement:
+alter table Classification_Description drop constraint FK382EB1232BEBA58D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement:
+alter table Classification_Description drop constraint FK382EB12328459272 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_DESCRIPTION" not found; SQL statement:
+alter table Classification_Description drop constraint FK382EB12384A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_EXTENSION" not found; SQL statement:
+alter table Classification_Extension drop constraint FK715D6726927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_EXTENSION" not found; SQL statement:
+alter table Classification_Extension drop constraint FK715D672684A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_GEOSCOPE" not found; SQL statement:
+alter table Classification_GeoScope drop constraint FK379FE5BC86D04E74 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_GEOSCOPE" not found; SQL statement:
+alter table Classification_GeoScope drop constraint FK379FE5BC84A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_IDENTIFIER" not found; SQL statement:
+alter table Classification_Identifier drop constraint FKC5B1BEA2E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_IDENTIFIER" not found; SQL statement:
+alter table Classification_Identifier drop constraint FKC5B1BEA284A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_MARKER" not found; SQL statement:
+alter table Classification_Marker drop constraint FK59778AB3777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_MARKER" not found; SQL statement:
+alter table Classification_Marker drop constraint FK59778AB384A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Classification_OriginalSourceBase drop constraint FK91B37B363A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Classification_OriginalSourceBase drop constraint FK91B37B3684A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_RIGHTSINFO" not found; SQL statement:
+alter table Classification_RightsInfo drop constraint FKD479A91EC13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CLASSIFICATION_RIGHTSINFO" not found; SQL statement:
+alter table Classification_RightsInfo drop constraint FKD479A91E84A3CE1B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement:
+alter table Collection drop constraint FKF078ABE4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement:
+alter table Collection drop constraint FKF078ABEBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement:
+alter table Collection drop constraint FKF078ABE16B9CA77 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION" not found; SQL statement:
+alter table Collection drop constraint FKF078ABECEB38EFF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_AUD" not found; SQL statement:
+alter table Collection_AUD drop constraint FKD6D4298F34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ANNOTATION" not found; SQL statement:
+alter table Collection_Annotation drop constraint FKEA970F701E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ANNOTATION" not found; SQL statement:
+alter table Collection_Annotation drop constraint FKEA970F70EB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_CREDIT" not found; SQL statement:
+alter table Collection_Credit drop constraint FKE0A317BA32D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_CREDIT" not found; SQL statement:
+alter table Collection_Credit drop constraint FKE0A317BAEB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_EXTENSION" not found; SQL statement:
+alter table Collection_Extension drop constraint FKF68FEBDE927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_EXTENSION" not found; SQL statement:
+alter table Collection_Extension drop constraint FKF68FEBDEEB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_IDENTIFIER" not found; SQL statement:
+alter table Collection_Identifier drop constraint FKE6CFD0EAE12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_IDENTIFIER" not found; SQL statement:
+alter table Collection_Identifier drop constraint FKE6CFD0EAEB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MARKER" not found; SQL statement:
+alter table Collection_Marker drop constraint FKF0CA00FB777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MARKER" not found; SQL statement:
+alter table Collection_Marker drop constraint FKF0CA00FBEB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MEDIA" not found; SQL statement:
+alter table Collection_Media drop constraint FK7320E703C2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_MEDIA" not found; SQL statement:
+alter table Collection_Media drop constraint FK7320E703EB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Collection_OriginalSourceBase drop constraint FK37DEC57E3A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Collection_OriginalSourceBase drop constraint FK37DEC57EEB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_RIGHTSINFO" not found; SQL statement:
+alter table Collection_RightsInfo drop constraint FKF597BB66C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "COLLECTION_RIGHTSINFO" not found; SQL statement:
+alter table Collection_RightsInfo drop constraint FKF597BB66EB62BE9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement:
+alter table Credit drop constraint FK78CA97194FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement:
+alter table Credit drop constraint FK78CA9719BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement:
+alter table Credit drop constraint FK78CA9719E8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT" not found; SQL statement:
+alter table Credit drop constraint FK78CA9719F7976FC5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT_AUD" not found; SQL statement:
+alter table Credit_AUD drop constraint FK5533906A34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT_ANNOTATION" not found; SQL statement:
+alter table Credit_Annotation drop constraint FKE8DA4C351E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT_ANNOTATION" not found; SQL statement:
+alter table Credit_Annotation drop constraint FKE8DA4C354CF694E0 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT_MARKER" not found; SQL statement:
+alter table Credit_Marker drop constraint FK10CC6840777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "CREDIT_MARKER" not found; SQL statement:
+alter table Credit_Marker drop constraint FK10CC68404CF694E0 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A664FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A66BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A663B0DA0EF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A66D040DBF0 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A6647AF954C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A6624AF3F70 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A6636C6F6F6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A66CC0240B6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE" not found; SQL statement:
+alter table DefinedTermBase drop constraint FK2E340A6688206484 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_AUD" not found; SQL statement:
+alter table DefinedTermBase_AUD drop constraint FK86E8953734869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ANNOTATION" not found; SQL statement:
+alter table DefinedTermBase_Annotation drop constraint FK589B6C81E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ANNOTATION" not found; SQL statement:
+alter table DefinedTermBase_Annotation drop constraint FK589B6C8C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CONTINENT" not found; SQL statement:
+alter table DefinedTermBase_Continent drop constraint FK45F60AFB9AEE7205 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CONTINENT" not found; SQL statement:
+alter table DefinedTermBase_Continent drop constraint FK45F60AFB901A60CE [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_COUNTRY" not found; SQL statement:
+alter table DefinedTermBase_Country drop constraint FKA2ADDA9D47CE41A0 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_COUNTRY" not found; SQL statement:
+alter table DefinedTermBase_Country drop constraint FKA2ADDA9DCE5C0F9E [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CREDIT" not found; SQL statement:
+alter table DefinedTermBase_Credit drop constraint FK78FF2B1232D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_CREDIT" not found; SQL statement:
+alter table DefinedTermBase_Credit drop constraint FK78FF2B12C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_EXTENSION" not found; SQL statement:
+alter table DefinedTermBase_Extension drop constraint FK397EF986927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_EXTENSION" not found; SQL statement:
+alter table DefinedTermBase_Extension drop constraint FK397EF986C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_IDENTIFIER" not found; SQL statement:
+alter table DefinedTermBase_Identifier drop constraint FK1C27842E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_IDENTIFIER" not found; SQL statement:
+alter table DefinedTermBase_Identifier drop constraint FK1C27842C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MARKER" not found; SQL statement:
+alter table DefinedTermBase_Marker drop constraint FK89261453777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MARKER" not found; SQL statement:
+alter table DefinedTermBase_Marker drop constraint FK89261453C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEASUREMENTUNIT" not found; SQL statement:
+alter table DefinedTermBase_MeasurementUnit drop constraint FKE9D17767F3BB39BD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEASUREMENTUNIT" not found; SQL statement:
+alter table DefinedTermBase_MeasurementUnit drop constraint FKE9D17767D0BDAE9B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEDIA" not found; SQL statement:
+alter table DefinedTermBase_Media drop constraint FK6FC908ABC2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_MEDIA" not found; SQL statement:
+alter table DefinedTermBase_Media drop constraint FK6FC908ABC0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DefinedTermBase_OriginalSourceBase drop constraint FKDCC094D63A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DefinedTermBase_OriginalSourceBase drop constraint FKDCC094D6C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RECOMMENDEDMODIFIERENUMERATION" not found; SQL statement:
+alter table DefinedTermBase_RecommendedModifierEnumeration drop constraint FKA72FB5AE5255EAFD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RECOMMENDEDMODIFIERENUMERATION" not found; SQL statement:
+alter table DefinedTermBase_RecommendedModifierEnumeration drop constraint FKA72FB5AED0BDAE9B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_REPRESENTATION" not found; SQL statement:
+alter table DefinedTermBase_Representation drop constraint FKAAC8AFE6B31C4747 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_REPRESENTATION" not found; SQL statement:
+alter table DefinedTermBase_Representation drop constraint FKAAC8AFE6C0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RIGHTSINFO" not found; SQL statement:
+alter table DefinedTermBase_RightsInfo drop constraint FK108A62BEC13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_RIGHTSINFO" not found; SQL statement:
+alter table DefinedTermBase_RightsInfo drop constraint FK108A62BEC0DB4934 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_STATISTICALMEASURE" not found; SQL statement:
+alter table DefinedTermBase_StatisticalMeasure drop constraint FK6FF15DFCC9CD5B57 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_STATISTICALMEASURE" not found; SQL statement:
+alter table DefinedTermBase_StatisticalMeasure drop constraint FK6FF15DFCD0BDAE9B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" not found; SQL statement:
+alter table DefinedTermBase_SupportedCategoricalEnumeration drop constraint FK2170B25C5AF2C74 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" not found; SQL statement:
+alter table DefinedTermBase_SupportedCategoricalEnumeration drop constraint FK2170B25CD0BDAE9B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement:
+alter table DerivationEvent drop constraint FK426BC034FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement:
+alter table DerivationEvent drop constraint FK426BC03BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement:
+alter table DerivationEvent drop constraint FK426BC033DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement:
+alter table DerivationEvent drop constraint FK426BC03403E17F4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT" not found; SQL statement:
+alter table DerivationEvent drop constraint FK426BC038524B89D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_AUD" not found; SQL statement:
+alter table DerivationEvent_AUD drop constraint FKDABF305434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_ANNOTATION" not found; SQL statement:
+alter table DerivationEvent_Annotation drop constraint FKEFA0D10B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_ANNOTATION" not found; SQL statement:
+alter table DerivationEvent_Annotation drop constraint FKEFA0D10B4AAB411A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_MARKER" not found; SQL statement:
+alter table DerivationEvent_Marker drop constraint FKE412C816777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DERIVATIONEVENT_MARKER" not found; SQL statement:
+alter table DerivationEvent_Marker drop constraint FKE412C8164AAB411A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement:
+alter table DescriptionBase drop constraint FKFF4D58CD4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement:
+alter table DescriptionBase drop constraint FKFF4D58CDBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement:
+alter table DescriptionBase drop constraint FKFF4D58CDB56856A4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement:
+alter table DescriptionBase drop constraint FKFF4D58CDDE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE" not found; SQL statement:
+alter table DescriptionBase drop constraint FKFF4D58CDDA935185 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_AUD" not found; SQL statement:
+alter table DescriptionBase_AUD drop constraint FK7456581E34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ANNOTATION" not found; SQL statement:
+alter table DescriptionBase_Annotation drop constraint FKF3AD32011E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ANNOTATION" not found; SQL statement:
+alter table DescriptionBase_Annotation drop constraint FKF3AD3201F1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_CREDIT" not found; SQL statement:
+alter table DescriptionBase_Credit drop constraint FK510B2ACB32D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_CREDIT" not found; SQL statement:
+alter table DescriptionBase_Credit drop constraint FK510B2ACBF1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_EXTENSION" not found; SQL statement:
+alter table DescriptionBase_Extension drop constraint FKD5D2B32D927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_EXTENSION" not found; SQL statement:
+alter table DescriptionBase_Extension drop constraint FKD5D2B32DF1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_GEOSCOPE" not found; SQL statement:
+alter table DescriptionBase_GeoScope drop constraint FK3ADD7CD586D04E74 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_GEOSCOPE" not found; SQL statement:
+alter table DescriptionBase_GeoScope drop constraint FK3ADD7CD5D86445CE [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_IDENTIFIER" not found; SQL statement:
+alter table DescriptionBase_Identifier drop constraint FKEFE5F37BE12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_IDENTIFIER" not found; SQL statement:
+alter table DescriptionBase_Identifier drop constraint FKEFE5F37BF1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_MARKER" not found; SQL statement:
+alter table DescriptionBase_Marker drop constraint FK6132140C777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_MARKER" not found; SQL statement:
+alter table DescriptionBase_Marker drop constraint FK6132140CF1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DescriptionBase_OriginalSourceBase drop constraint FKDC75C70F3A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DescriptionBase_OriginalSourceBase drop constraint FKDC75C70FF1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_REFERENCE" not found; SQL statement:
+alter table DescriptionBase_Reference drop constraint FKC330D6395C601E49 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_REFERENCE" not found; SQL statement:
+alter table DescriptionBase_Reference drop constraint FKC330D639F1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_RIGHTSINFO" not found; SQL statement:
+alter table DescriptionBase_RightsInfo drop constraint FKFEADDDF7C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_RIGHTSINFO" not found; SQL statement:
+alter table DescriptionBase_RightsInfo drop constraint FKFEADDDF7F1DDBFAB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_SCOPE" not found; SQL statement:
+alter table DescriptionBase_Scope drop constraint FKB9257C4294E290CA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONBASE_SCOPE" not found; SQL statement:
+alter table DescriptionBase_Scope drop constraint FKB9257C42D86445CE [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76714FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE7671BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76714220AFEB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE767134AF0E81 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76711C3C3FF7 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE7671E8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE7671693C1147 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76716561D9B1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE767110A80E07 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76719108D9B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE" not found; SQL statement:
+alter table DescriptionElementBase drop constraint FK38FE76716D0D7A56 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_AUD" not found; SQL statement:
+alter table DescriptionElementBase_AUD drop constraint FKF3803C234869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ANNOTATION" not found; SQL statement:
+alter table DescriptionElementBase_Annotation drop constraint FK7EE5E5DD1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ANNOTATION" not found; SQL statement:
+alter table DescriptionElementBase_Annotation drop constraint FK7EE5E5DD3B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement:
+alter table DescriptionElementBase_LanguageString drop constraint FKC753F137ACF5F60B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement:
+alter table DescriptionElementBase_LanguageString drop constraint FKC753F137C6D55834 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" not found; SQL statement:
+alter table DescriptionElementBase_LanguageString drop constraint FKC753F137C086B46F [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MARKER" not found; SQL statement:
+alter table DescriptionElementBase_Marker drop constraint FK1CB715E8777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MARKER" not found; SQL statement:
+alter table DescriptionElementBase_Marker drop constraint FK1CB715E83B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MEDIA" not found; SQL statement:
+alter table DescriptionElementBase_Media drop constraint FK21F70076C2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MEDIA" not found; SQL statement:
+alter table DescriptionElementBase_Media drop constraint FK21F700763B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFIER" not found; SQL statement:
+alter table DescriptionElementBase_Modifier drop constraint FK97E0D105F4E35BCD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFIER" not found; SQL statement:
+alter table DescriptionElementBase_Modifier drop constraint FK97E0D1053B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement:
+alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C7F05D08D4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement:
+alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C79682414B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_MODIFYINGTEXT" not found; SQL statement:
+alter table DescriptionElementBase_ModifyingText drop constraint FK522D90C73B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DescriptionElementBase_OriginalSourceBase drop constraint FKF41ADEEBA6473CCC [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table DescriptionElementBase_OriginalSourceBase drop constraint FKF41ADEEB3B8BB609 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATEDATA" not found; SQL statement:
+alter table DescriptionElementBase_StateData drop constraint FK592D6F6D8E7BF9AB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATEDATA" not found; SQL statement:
+alter table DescriptionElementBase_StateData drop constraint FK592D6F6D987CC6A4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATEDATA_AUD" not found; SQL statement:
+alter table DescriptionElementBase_StateData_AUD drop constraint FK1D0A1EBE34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATISTICALMEASUREMENTVALUE" not found; SQL statement:
+alter table DescriptionElementBase_StatisticalMeasurementValue drop constraint FK8AF511C2D883945E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATISTICALMEASUREMENTVALUE" not found; SQL statement:
+alter table DescriptionElementBase_StatisticalMeasurementValue drop constraint FK8AF511C28F213219 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DESCRIPTIONELEMENTBASE_STATISTICALMEASUREMENTVALUE_AUD" not found; SQL statement:
+alter table DescriptionElementBase_StatisticalMeasurementValue_AUD drop constraint FK2DE8E9334869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB24974FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB2497BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB24973DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB24974B251DAD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB2497BD54CF92 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB2497AEC8CCAA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT" not found; SQL statement:
+alter table DeterminationEvent drop constraint FK1DB2497DA935185 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_AUD" not found; SQL statement:
+alter table DeterminationEvent_AUD drop constraint FKA0252EE834869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_ANNOTATION" not found; SQL statement:
+alter table DeterminationEvent_Annotation drop constraint FKB74F03F71E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_ANNOTATION" not found; SQL statement:
+alter table DeterminationEvent_Annotation drop constraint FKB74F03F76BE0BFDA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_MARKER" not found; SQL statement:
+alter table DeterminationEvent_Marker drop constraint FK5C475102777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_MARKER" not found; SQL statement:
+alter table DeterminationEvent_Marker drop constraint FK5C4751026BE0BFDA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_REFERENCE" not found; SQL statement:
+alter table DeterminationEvent_Reference drop constraint FK8FB1ED8355A53F64 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DETERMINATIONEVENT_REFERENCE" not found; SQL statement:
+alter table DeterminationEvent_Reference drop constraint FK8FB1ED836BE0BFDA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement:
+alter table DnaQuality drop constraint FK7F4518084FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement:
+alter table DnaQuality drop constraint FK7F451808BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement:
+alter table DnaQuality drop constraint FK7F45180823A844FA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement:
+alter table DnaQuality drop constraint FK7F45180887BB6462 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY" not found; SQL statement:
+alter table DnaQuality drop constraint FK7F451808632EAD0D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "DNAQUALITY_AUD" not found; SQL statement:
+alter table DnaQuality_AUD drop constraint FKA79601D934869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ENTITYCONSTRAINTVIOLATION" not found; SQL statement:
+alter table EntityConstraintViolation drop constraint FK8970AEC54FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ENTITYCONSTRAINTVIOLATION" not found; SQL statement:
+alter table EntityConstraintViolation drop constraint FK8970AEC5403EC952 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ENTITYVALIDATIONRESULT" not found; SQL statement:
+alter table EntityValidationResult drop constraint FK637AAC194FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement:
+alter table Extension drop constraint FK52EF3C1F4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement:
+alter table Extension drop constraint FK52EF3C1FBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "EXTENSION" not found; SQL statement:
+alter table Extension drop constraint FK52EF3C1FAD392BD3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "EXTENSION_AUD" not found; SQL statement:
+alter table Extension_AUD drop constraint FK92D2427034869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement:
+alter table FeatureNode drop constraint FK4CEED9F84FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement:
+alter table FeatureNode drop constraint FK4CEED9F8BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement:
+alter table FeatureNode drop constraint FK4CEED9F84220AFEB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement:
+alter table FeatureNode drop constraint FK4CEED9F847C496CB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE" not found; SQL statement:
+alter table FeatureNode drop constraint FK4CEED9F8E0AD2C59 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURENODE_AUD" not found; SQL statement:
+alter table FeatureNode_AUD drop constraint FK25AD4BC934869AAE [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement:
+alter table FeatureTree drop constraint FK4CF19F944FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement:
+alter table FeatureTree drop constraint FK4CF19F94BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE" not found; SQL statement:
+alter table FeatureTree drop constraint FK4CF19F94B7892921 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_AUD" not found; SQL statement:
+alter table FeatureTree_AUD drop constraint FK355BE36534869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ANNOTATION" not found; SQL statement:
+alter table FeatureTree_Annotation drop constraint FK5D8B8DA1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ANNOTATION" not found; SQL statement:
+alter table FeatureTree_Annotation drop constraint FK5D8B8DA47C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_CREDIT" not found; SQL statement:
+alter table FeatureTree_Credit drop constraint FK7536062432D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_CREDIT" not found; SQL statement:
+alter table FeatureTree_Credit drop constraint FK7536062447C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_EXTENSION" not found; SQL statement:
+alter table FeatureTree_Extension drop constraint FKAD1E6D34927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_EXTENSION" not found; SQL statement:
+alter table FeatureTree_Extension drop constraint FKAD1E6D3447C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_IDENTIFIER" not found; SQL statement:
+alter table FeatureTree_Identifier drop constraint FK2117A54E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_IDENTIFIER" not found; SQL statement:
+alter table FeatureTree_Identifier drop constraint FK2117A5447C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_MARKER" not found; SQL statement:
+alter table FeatureTree_Marker drop constraint FK855CEF65777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_MARKER" not found; SQL statement:
+alter table FeatureTree_Marker drop constraint FK855CEF6547C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table FeatureTree_OriginalSourceBase drop constraint FK13BD64E83A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table FeatureTree_OriginalSourceBase drop constraint FK13BD64E847C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_REPRESENTATION" not found; SQL statement:
+alter table FeatureTree_Representation drop constraint FK8C458F8B31C4747 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_REPRESENTATION" not found; SQL statement:
+alter table FeatureTree_Representation drop constraint FK8C458F847C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_RIGHTSINFO" not found; SQL statement:
+alter table FeatureTree_RightsInfo drop constraint FK10D964D0C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "FEATURETREE_RIGHTSINFO" not found; SQL statement:
+alter table FeatureTree_RightsInfo drop constraint FK10D964D047C496CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F34FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F3BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F33DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F3C15704E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F3F55AFD89 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT" not found; SQL statement:
+alter table GatheringEvent drop constraint FK6F1286F38B455EC6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_AUD" not found; SQL statement:
+alter table GatheringEvent_AUD drop constraint FK3EC034434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_ANNOTATION" not found; SQL statement:
+alter table GatheringEvent_Annotation drop constraint FK76DDD01B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_ANNOTATION" not found; SQL statement:
+alter table GatheringEvent_Annotation drop constraint FK76DDD01BF95F225A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_DEFINEDTERMBASE" not found; SQL statement:
+alter table GatheringEvent_DefinedTermBase drop constraint FK69D9A11A7C34B6D6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_DEFINEDTERMBASE" not found; SQL statement:
+alter table GatheringEvent_DefinedTermBase drop constraint FK69D9A11AF95F225A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_MARKER" not found; SQL statement:
+alter table GatheringEvent_Marker drop constraint FK7B49CF26777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GATHERINGEVENT_MARKER" not found; SQL statement:
+alter table GatheringEvent_Marker drop constraint FK7B49CF26F95F225A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "GRANTEDAUTHORITYIMPL" not found; SQL statement:
+alter table GrantedAuthorityImpl drop constraint FKB05CF9284FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP" not found; SQL statement:
+alter table HomotypicalGroup drop constraint FK7DECCC184FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP" not found; SQL statement:
+alter table HomotypicalGroup drop constraint FK7DECCC18BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_AUD" not found; SQL statement:
+alter table HomotypicalGroup_AUD drop constraint FKE4252DE934869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_ANNOTATION" not found; SQL statement:
+alter table HomotypicalGroup_Annotation drop constraint FK7A0351D61E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_ANNOTATION" not found; SQL statement:
+alter table HomotypicalGroup_Annotation drop constraint FK7A0351D6BFEAE500 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_MARKER" not found; SQL statement:
+alter table HomotypicalGroup_Marker drop constraint FK97D36661777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HOMOTYPICALGROUP_MARKER" not found; SQL statement:
+alter table HomotypicalGroup_Marker drop constraint FK97D36661BFEAE500 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE744FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE74BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE74AEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE749DD57A93 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE74AF4F9F62 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP" not found; SQL statement:
+alter table HybridRelationship drop constraint FK9033CE7455F241D4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_AUD" not found; SQL statement:
+alter table HybridRelationship_AUD drop constraint FK9C2BA24534869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table HybridRelationship_Annotation drop constraint FK2C7E7DFA1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table HybridRelationship_Annotation drop constraint FK2C7E7DFA59832240 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_MARKER" not found; SQL statement:
+alter table HybridRelationship_Marker drop constraint FKCEF24485777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "HYBRIDRELATIONSHIP_MARKER" not found; SQL statement:
+alter table HybridRelationship_Marker drop constraint FKCEF2448559832240 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement:
+alter table Identifier drop constraint FK165A88C94FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement:
+alter table Identifier drop constraint FK165A88C9BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER" not found; SQL statement:
+alter table Identifier drop constraint FK165A88C9E67FC44F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "IDENTIFIER_AUD" not found; SQL statement:
+alter table Identifier_AUD drop constraint FKE1132A1A34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement:
+alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC02BEBA58D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement:
+alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC028459272 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INDIVIDUALASSOCIATION_LANGUAGESTRING" not found; SQL statement:
+alter table IndividualAssociation_LanguageString drop constraint FKB5C75EC084FF3EDF [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement:
+alter table InstitutionalMembership drop constraint FK3C8E1FF94FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement:
+alter table InstitutionalMembership drop constraint FK3C8E1FF9BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement:
+alter table InstitutionalMembership drop constraint FK3C8E1FF916B9CA77 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP" not found; SQL statement:
+alter table InstitutionalMembership drop constraint FK3C8E1FF9AAC1B820 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "INSTITUTIONALMEMBERSHIP_AUD" not found; SQL statement:
+alter table InstitutionalMembership_AUD drop constraint FK847A94A34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT" not found; SQL statement:
+alter table KeyStatement drop constraint FK7125B9F04FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT" not found; SQL statement:
+alter table KeyStatement drop constraint FK7125B9F0BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_AUD" not found; SQL statement:
+alter table KeyStatement_AUD drop constraint FK93036FC134869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement:
+alter table KeyStatement_LanguageString drop constraint FK70BB5FD89C782795 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement:
+alter table KeyStatement_LanguageString drop constraint FK70BB5FD8DA0C376A [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "KEYSTATEMENT_LANGUAGESTRING" not found; SQL statement:
+alter table KeyStatement_LanguageString drop constraint FK70BB5FD8AAA67049 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LSIDAUTHORITY" not found; SQL statement:
+alter table LSIDAuthority drop constraint FK759DB8814FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LSIDAUTHORITY_NAMESPACES" not found; SQL statement:
+alter table LSIDAuthority_namespaces drop constraint FKB04948F64FFCFD94 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement:
+alter table LanguageString drop constraint FKB5FDC9A94FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement:
+alter table LanguageString drop constraint FKB5FDC9A9BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING" not found; SQL statement:
+alter table LanguageString drop constraint FKB5FDC9A9E8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_AUD" not found; SQL statement:
+alter table LanguageString_AUD drop constraint FK896AFAFA34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_ANNOTATION" not found; SQL statement:
+alter table LanguageString_Annotation drop constraint FK8400DFA51E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_ANNOTATION" not found; SQL statement:
+alter table LanguageString_Annotation drop constraint FK8400DFA537998500 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_MARKER" not found; SQL statement:
+alter table LanguageString_Marker drop constraint FK8DA633B0777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "LANGUAGESTRING_MARKER" not found; SQL statement:
+alter table LanguageString_Marker drop constraint FK8DA633B037998500 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement:
+alter table Marker drop constraint FK88F1805A4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement:
+alter table Marker drop constraint FK88F1805ABC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MARKER" not found; SQL statement:
+alter table Marker drop constraint FK88F1805AD64DC020 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MARKER_AUD" not found; SQL statement:
+alter table Marker_AUD drop constraint FKB951F12B34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264FBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F3DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F14D2C695 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F3781DA30 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F1600EAB3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT" not found; SQL statement:
+alter table MaterialOrMethodEvent drop constraint FK458A264F9A129634 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_AUD" not found; SQL statement:
+alter table MaterialOrMethodEvent_AUD drop constraint FK8C8C94A034869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_ANNOTATION" not found; SQL statement:
+alter table MaterialOrMethodEvent_Annotation drop constraint FKD9943F3F1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_ANNOTATION" not found; SQL statement:
+alter table MaterialOrMethodEvent_Annotation drop constraint FKD9943F3F2F50355A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_MARKER" not found; SQL statement:
+alter table MaterialOrMethodEvent_Marker drop constraint FKF0BD704A777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MATERIALORMETHODEVENT_MARKER" not found; SQL statement:
+alter table MaterialOrMethodEvent_Marker drop constraint FKF0BD704A2F50355A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement:
+alter table Media drop constraint FK46C7FC44FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement:
+alter table Media drop constraint FK46C7FC4BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA" not found; SQL statement:
+alter table Media drop constraint FK46C7FC4C2445443 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_NAMEDAREA" not found; SQL statement:
+alter table MediaKey_NamedArea drop constraint FK31E7D4023FF8E7B2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_NAMEDAREA" not found; SQL statement:
+alter table MediaKey_NamedArea drop constraint FK31E7D402BE59D760 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_SCOPE" not found; SQL statement:
+alter table MediaKey_Scope drop constraint FKBFFEE8F05431B96E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_SCOPE" not found; SQL statement:
+alter table MediaKey_Scope drop constraint FKBFFEE8F0BE59D760 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_TAXON" not found; SQL statement:
+alter table MediaKey_Taxon drop constraint FKC00C3966DE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAKEY_TAXON" not found; SQL statement:
+alter table MediaKey_Taxon drop constraint FKC00C3966815C7E9 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement:
+alter table MediaRepresentation drop constraint FK1966BDB14FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement:
+alter table MediaRepresentation drop constraint FK1966BDB1BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION" not found; SQL statement:
+alter table MediaRepresentation drop constraint FK1966BDB1C2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement:
+alter table MediaRepresentationPart drop constraint FK67A455444FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement:
+alter table MediaRepresentationPart drop constraint FK67A45544BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART" not found; SQL statement:
+alter table MediaRepresentationPart drop constraint FK67A45544E3818E37 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATIONPART_AUD" not found; SQL statement:
+alter table MediaRepresentationPart_AUD drop constraint FKA75C411534869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIAREPRESENTATION_AUD" not found; SQL statement:
+alter table MediaRepresentation_AUD drop constraint FK67AAAB0234869AAE [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_AUD" not found; SQL statement:
+alter table Media_AUD drop constraint FKF70B2B9534869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_ANNOTATION" not found; SQL statement:
+alter table Media_Annotation drop constraint FKA020DAAA1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_ANNOTATION" not found; SQL statement:
+alter table Media_Annotation drop constraint FKA020DAAAC2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_CREDIT" not found; SQL statement:
+alter table Media_Credit drop constraint FKC1F78FF432D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_CREDIT" not found; SQL statement:
+alter table Media_Credit drop constraint FKC1F78FF4C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement:
+alter table Media_Description drop constraint FK368283E12BEBA58D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement:
+alter table Media_Description drop constraint FK368283E128459272 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_DESCRIPTION" not found; SQL statement:
+alter table Media_Description drop constraint FK368283E1C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_EXTENSION" not found; SQL statement:
+alter table Media_Extension drop constraint FKDB62D164927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_EXTENSION" not found; SQL statement:
+alter table Media_Extension drop constraint FKDB62D164C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_IDENTIFIER" not found; SQL statement:
+alter table Media_Identifier drop constraint FK9C599C24E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_IDENTIFIER" not found; SQL statement:
+alter table Media_Identifier drop constraint FK9C599C24C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement:
+alter table Media_LanguageString drop constraint FK353DB784A1CA19B1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement:
+alter table Media_LanguageString drop constraint FK353DB784A0A6EDCE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_LANGUAGESTRING" not found; SQL statement:
+alter table Media_LanguageString drop constraint FK353DB784C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_MARKER" not found; SQL statement:
+alter table Media_Marker drop constraint FKD21E7935777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_MARKER" not found; SQL statement:
+alter table Media_Marker drop constraint FKD21E7935C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Media_OriginalSourceBase drop constraint FK2FEEB6B83A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Media_OriginalSourceBase drop constraint FK2FEEB6B8C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_REPRESENTATION" not found; SQL statement:
+alter table Media_Representation drop constraint FK1B8712C88F6CABE6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_REPRESENTATION" not found; SQL statement:
+alter table Media_Representation drop constraint FK1B8712C8BE59D760 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_RIGHTSINFO" not found; SQL statement:
+alter table Media_RightsInfo drop constraint FKAB2186A0C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_RIGHTSINFO" not found; SQL statement:
+alter table Media_RightsInfo drop constraint FKAB2186A0C2C29593 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_SEQUENCE" not found; SQL statement:
+alter table Media_Sequence drop constraint FK61D09FCF29B4761 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_SEQUENCE" not found; SQL statement:
+alter table Media_Sequence drop constraint FK61D09FC3282B64 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_TAXONBASE" not found; SQL statement:
+alter table Media_TaxonBase drop constraint FK1ABD49E07C3D0017 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MEDIA_TAXONBASE" not found; SQL statement:
+alter table Media_TaxonBase drop constraint FK1ABD49E0BE59D760 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_NAMEDAREA" not found; SQL statement:
+alter table MultiAccessKey_NamedArea drop constraint FK1F5A74893FF8E7B2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_NAMEDAREA" not found; SQL statement:
+alter table MultiAccessKey_NamedArea drop constraint FK1F5A7489B4555A9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_SCOPE" not found; SQL statement:
+alter table MultiAccessKey_Scope drop constraint FKCC6CE4F75431B96E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_SCOPE" not found; SQL statement:
+alter table MultiAccessKey_Scope drop constraint FKCC6CE4F7B4555A9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_TAXON" not found; SQL statement:
+alter table MultiAccessKey_Taxon drop constraint FKCC7A356DDE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "MULTIACCESSKEY_TAXON" not found; SQL statement:
+alter table MultiAccessKey_Taxon drop constraint FKCC7A356DB64A7B29 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E510834FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E51083BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E51083AEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E5108316CDFF85 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E5108328482454 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP" not found; SQL statement:
+alter table NameRelationship drop constraint FK5E51083AF619DE3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_AUD" not found; SQL statement:
+alter table NameRelationship_AUD drop constraint FK743F44D434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table NameRelationship_Annotation drop constraint FK2E38AC8B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table NameRelationship_Annotation drop constraint FK2E38AC8B7B4CB560 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_MARKER" not found; SQL statement:
+alter table NameRelationship_Marker drop constraint FKE3E46396777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NAMERELATIONSHIP_MARKER" not found; SQL statement:
+alter table NameRelationship_Marker drop constraint FKE3E463967B4CB560 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement:
+alter table NomenclaturalStatus drop constraint FK1FFEC88B4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement:
+alter table NomenclaturalStatus drop constraint FK1FFEC88BBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement:
+alter table NomenclaturalStatus drop constraint FK1FFEC88BAEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS" not found; SQL statement:
+alter table NomenclaturalStatus drop constraint FK1FFEC88B7029BD9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_AUD" not found; SQL statement:
+alter table NomenclaturalStatus_AUD drop constraint FKFB2DB8DC34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_ANNOTATION" not found; SQL statement:
+alter table NomenclaturalStatus_Annotation drop constraint FKE6E91F831E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_ANNOTATION" not found; SQL statement:
+alter table NomenclaturalStatus_Annotation drop constraint FKE6E91F838D2CB1D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_MARKER" not found; SQL statement:
+alter table NomenclaturalStatus_Marker drop constraint FK2F5128E777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "NOMENCLATURALSTATUS_MARKER" not found; SQL statement:
+alter table NomenclaturalStatus_Marker drop constraint FK2F5128E8D2CB1D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement:
+alter table OriginalSourceBase drop constraint FK505F2E5D4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement:
+alter table OriginalSourceBase drop constraint FK505F2E5DBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement:
+alter table OriginalSourceBase drop constraint FK505F2E5DAEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE" not found; SQL statement:
+alter table OriginalSourceBase drop constraint FK505F2E5D966B96B2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_AUD" not found; SQL statement:
+alter table OriginalSourceBase_AUD drop constraint FK9662E5AE34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_ANNOTATION" not found; SQL statement:
+alter table OriginalSourceBase_Annotation drop constraint FK208142711E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_ANNOTATION" not found; SQL statement:
+alter table OriginalSourceBase_Annotation drop constraint FK20814271B029DDA0 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_MARKER" not found; SQL statement:
+alter table OriginalSourceBase_Marker drop constraint FKB3FFDC7C777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "ORIGINALSOURCEBASE_MARKER" not found; SQL statement:
+alter table OriginalSourceBase_Marker drop constraint FKB3FFDC7CB029DDA0 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP" not found; SQL statement:
+alter table PermissionGroup drop constraint FK629941D04FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP_GRANTEDAUTHORITYIMPL" not found; SQL statement:
+alter table PermissionGroup_GrantedAuthorityImpl drop constraint FK53114371857F6C2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PERMISSIONGROUP_GRANTEDAUTHORITYIMPL" not found; SQL statement:
+alter table PermissionGroup_GrantedAuthorityImpl drop constraint FK5311437CA0971A3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement:
+alter table PolytomousKey drop constraint FKA9E6B1384FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement:
+alter table PolytomousKey drop constraint FKA9E6B138BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY" not found; SQL statement:
+alter table PolytomousKey drop constraint FKA9E6B138576595C3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775ABC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A4220AFEB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775AC73A7584 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A4FEE4393 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A808998FB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A9D3C2E93 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A4382686A [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775A1C0483C4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE" not found; SQL statement:
+alter table PolytomousKeyNode drop constraint FK860775ADE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_AUD" not found; SQL statement:
+alter table PolytomousKeyNode_AUD drop constraint FK6A6D682B34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement:
+alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12EF05D08D4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement:
+alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12E9682414B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEYNODE_LANGUAGESTRING" not found; SQL statement:
+alter table PolytomousKeyNode_LanguageString drop constraint FK5574E12EF135C42B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_AUD" not found; SQL statement:
+alter table PolytomousKey_AUD drop constraint FK867830934869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ANNOTATION" not found; SQL statement:
+alter table PolytomousKey_Annotation drop constraint FK278CF8B61E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ANNOTATION" not found; SQL statement:
+alter table PolytomousKey_Annotation drop constraint FK278CF8B689D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_CREDIT" not found; SQL statement:
+alter table PolytomousKey_Credit drop constraint FKADC940032D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_CREDIT" not found; SQL statement:
+alter table PolytomousKey_Credit drop constraint FKADC940089D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_EXTENSION" not found; SQL statement:
+alter table PolytomousKey_Extension drop constraint FKAE34C1D8927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_EXTENSION" not found; SQL statement:
+alter table PolytomousKey_Extension drop constraint FKAE34C1D889D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_IDENTIFIER" not found; SQL statement:
+alter table PolytomousKey_Identifier drop constraint FK23C5BA30E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_IDENTIFIER" not found; SQL statement:
+alter table PolytomousKey_Identifier drop constraint FK23C5BA3089D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_MARKER" not found; SQL statement:
+alter table PolytomousKey_Marker drop constraint FK1B037D41777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_MARKER" not found; SQL statement:
+alter table PolytomousKey_Marker drop constraint FK1B037D4189D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_NAMEDAREA" not found; SQL statement:
+alter table PolytomousKey_NamedArea drop constraint FK1C727CFF3FF8E7B2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_NAMEDAREA" not found; SQL statement:
+alter table PolytomousKey_NamedArea drop constraint FK1C727CFF89D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table PolytomousKey_OriginalSourceBase drop constraint FK839208C43A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table PolytomousKey_OriginalSourceBase drop constraint FK839208C489D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_RIGHTSINFO" not found; SQL statement:
+alter table PolytomousKey_RightsInfo drop constraint FK328DA4ACC13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_RIGHTSINFO" not found; SQL statement:
+alter table PolytomousKey_RightsInfo drop constraint FK328DA4AC89D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_SCOPE" not found; SQL statement:
+alter table PolytomousKey_Scope drop constraint FK8D97986D5431B96E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_SCOPE" not found; SQL statement:
+alter table PolytomousKey_Scope drop constraint FK8D97986D89D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXON" not found; SQL statement:
+alter table PolytomousKey_Taxon drop constraint FK8DA4E8E3DE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXON" not found; SQL statement:
+alter table PolytomousKey_Taxon drop constraint FK8DA4E8E389D97CB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXONBASE" not found; SQL statement:
+alter table PolytomousKey_TaxonBase drop constraint FKED8F3A547C3D0017 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "POLYTOMOUSKEY_TAXONBASE" not found; SQL statement:
+alter table PolytomousKey_TaxonBase drop constraint FKED8F3A5489D97CB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement:
+alter table Primer drop constraint FK8EFB89F34FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement:
+alter table Primer drop constraint FK8EFB89F3BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement:
+alter table Primer drop constraint FK8EFB89F36D2CE418 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER" not found; SQL statement:
+alter table Primer drop constraint FK8EFB89F3D0374392 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER_AUD" not found; SQL statement:
+alter table Primer_AUD drop constraint FK319B864434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER_ANNOTATION" not found; SQL statement:
+alter table Primer_Annotation drop constraint FK9044ED1B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER_ANNOTATION" not found; SQL statement:
+alter table Primer_Annotation drop constraint FK9044ED1B48BD1F55 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER_MARKER" not found; SQL statement:
+alter table Primer_Marker drop constraint FKF6C76C26777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "PRIMER_MARKER" not found; SQL statement:
+alter table Primer_Marker drop constraint FKF6C76C2648BD1F55 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2B4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2BBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2BD741CE1F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2BAD54327F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2B403E17F4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE" not found; SQL statement:
+alter table Reference drop constraint FK404D5F2BAEC3B8B8 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_AUD" not found; SQL statement:
+alter table Reference_AUD drop constraint FK8F0FFF7C34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ANNOTATION" not found; SQL statement:
+alter table Reference_Annotation drop constraint FKFC824E31E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ANNOTATION" not found; SQL statement:
+alter table Reference_Annotation drop constraint FKFC824E38D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_CREDIT" not found; SQL statement:
+alter table Reference_Credit drop constraint FK5BC6DEAD32D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_CREDIT" not found; SQL statement:
+alter table Reference_Credit drop constraint FK5BC6DEAD8D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_EXTENSION" not found; SQL statement:
+alter table Reference_Extension drop constraint FKDEFCDC0B927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_EXTENSION" not found; SQL statement:
+alter table Reference_Extension drop constraint FKDEFCDC0B8D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_IDENTIFIER" not found; SQL statement:
+alter table Reference_Identifier drop constraint FKC00E65DE12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_IDENTIFIER" not found; SQL statement:
+alter table Reference_Identifier drop constraint FKC00E65D8D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MARKER" not found; SQL statement:
+alter table Reference_Marker drop constraint FK6BEDC7EE777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MARKER" not found; SQL statement:
+alter table Reference_Marker drop constraint FK6BEDC7EE8D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MEDIA" not found; SQL statement:
+alter table Reference_Media drop constraint FKBBEF5B0C2C29593 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_MEDIA" not found; SQL statement:
+alter table Reference_Media drop constraint FKBBEF5B08D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Reference_OriginalSourceBase drop constraint FKD3E8B7F13A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table Reference_OriginalSourceBase drop constraint FKD3E8B7F18D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_RIGHTSINFO" not found; SQL statement:
+alter table Reference_RightsInfo drop constraint FK1AC8D0D9C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REFERENCE_RIGHTSINFO" not found; SQL statement:
+alter table Reference_RightsInfo drop constraint FK1AC8D0D98D0FB4DA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RELATIONSHIPTERMBASE_INVERSEREPRESENTATION" not found; SQL statement:
+alter table RelationshipTermBase_inverseRepresentation drop constraint FK98592F33473FB677 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RELATIONSHIPTERMBASE_INVERSEREPRESENTATION" not found; SQL statement:
+alter table RelationshipTermBase_inverseRepresentation drop constraint FK98592F33ECEEF4AF [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement:
+alter table Representation drop constraint FK9C4724ED4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement:
+alter table Representation drop constraint FK9C4724EDBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION" not found; SQL statement:
+alter table Representation drop constraint FK9C4724EDE8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_AUD" not found; SQL statement:
+alter table Representation_AUD drop constraint FK294D143E34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_ANNOTATION" not found; SQL statement:
+alter table Representation_Annotation drop constraint FK371091E11E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_ANNOTATION" not found; SQL statement:
+alter table Representation_Annotation drop constraint FK371091E147E8AE60 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_MARKER" not found; SQL statement:
+alter table Representation_Marker drop constraint FK560063EC777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "REPRESENTATION_MARKER" not found; SQL statement:
+alter table Representation_Marker drop constraint FK560063EC47E8AE60 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement:
+alter table RightsInfo drop constraint FK252273454FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement:
+alter table RightsInfo drop constraint FK25227345BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement:
+alter table RightsInfo drop constraint FK25227345E8D36B00 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement:
+alter table RightsInfo drop constraint FK25227345F7976FC5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO" not found; SQL statement:
+alter table RightsInfo drop constraint FK25227345E6D2D338 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_AUD" not found; SQL statement:
+alter table RightsInfo_AUD drop constraint FK1CA9769634869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_ANNOTATION" not found; SQL statement:
+alter table RightsInfo_Annotation drop constraint FKECC95C891E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_ANNOTATION" not found; SQL statement:
+alter table RightsInfo_Annotation drop constraint FKECC95C89EFE62333 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_MARKER" not found; SQL statement:
+alter table RightsInfo_Marker drop constraint FK81D8C294777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "RIGHTSINFO_MARKER" not found; SQL statement:
+alter table RightsInfo_Marker drop constraint FK81D8C294EFE62333 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement:
+alter table Sequence drop constraint FK544ADBE14FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement:
+alter table Sequence drop constraint FK544ADBE1BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement:
+alter table Sequence drop constraint FK544ADBE19F65E72B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement:
+alter table Sequence drop constraint FK544ADBE16D2CE418 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE" not found; SQL statement:
+alter table Sequence drop constraint FK544ADBE1E671A9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_AUD" not found; SQL statement:
+alter table Sequence_AUD drop constraint FK39F4313234869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_ANNOTATION" not found; SQL statement:
+alter table Sequence_Annotation drop constraint FK1010BA6D1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_ANNOTATION" not found; SQL statement:
+alter table Sequence_Annotation drop constraint FK1010BA6DD57FFDD5 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_MARKER" not found; SQL statement:
+alter table Sequence_Marker drop constraint FK3D22B278777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_MARKER" not found; SQL statement:
+alter table Sequence_Marker drop constraint FK3D22B278D57FFDD5 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_REFERENCE" not found; SQL statement:
+alter table Sequence_Reference drop constraint FK6944904D1DDDC219 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SEQUENCE_REFERENCE" not found; SQL statement:
+alter table Sequence_Reference drop constraint FK6944904DD57FFDD5 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1E4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1EBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1E3DA462D5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1ED320A65F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1EE0EBCFFE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1E55DDFE96 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD" not found; SQL statement:
+alter table SingleRead drop constraint FKAD45CA1E48BD1F55 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement:
+alter table SingleReadAlignment drop constraint FKE50A79654FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement:
+alter table SingleReadAlignment drop constraint FKE50A7965BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement:
+alter table SingleReadAlignment drop constraint FKE50A7965ECE53A6A [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT" not found; SQL statement:
+alter table SingleReadAlignment drop constraint FKE50A79653A5A5E15 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREADALIGNMENT_AUD" not found; SQL statement:
+alter table SingleReadAlignment_AUD drop constraint FKFEE16CB634869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_AUD" not found; SQL statement:
+alter table SingleRead_AUD drop constraint FKA323B8EF34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_ANNOTATION" not found; SQL statement:
+alter table SingleRead_Annotation drop constraint FK33E974101E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_ANNOTATION" not found; SQL statement:
+alter table SingleRead_Annotation drop constraint FK33E974103A5A5E15 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_MARKER" not found; SQL statement:
+alter table SingleRead_Marker drop constraint FKCF47B59B777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SINGLEREAD_MARKER" not found; SQL statement:
+alter table SingleRead_Marker drop constraint FKCF47B59B3A5A5E15 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA32724FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272F53E6AFA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA32728C35BD07 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272E35D77A3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272EB62BE9A [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272156CF96 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272C8505DB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA32727CC340C5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA327295CC5995 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA32724FF2F98B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272F95F225A [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase drop constraint FK21CA3272DADF76EA [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_AUD" not found; SQL statement:
+alter table SpecimenOrObservationBase_AUD drop constraint FKF3D3D74334869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ANNOTATION" not found; SQL statement:
+alter table SpecimenOrObservationBase_Annotation drop constraint FK365E4F3C1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ANNOTATION" not found; SQL statement:
+alter table SpecimenOrObservationBase_Annotation drop constraint FK365E4F3C3B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_CREDIT" not found; SQL statement:
+alter table SpecimenOrObservationBase_Credit drop constraint FK7E3A1D8632D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_CREDIT" not found; SQL statement:
+alter table SpecimenOrObservationBase_Credit drop constraint FK7E3A1D863B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT" not found; SQL statement:
+alter table SpecimenOrObservationBase_DerivationEvent drop constraint FK20132036BD59A1AD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT" not found; SQL statement:
+alter table SpecimenOrObservationBase_DerivationEvent drop constraint FK2013203654C216AA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_EXTENSION" not found; SQL statement:
+alter table SpecimenOrObservationBase_Extension drop constraint FKE03B8292927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_EXTENSION" not found; SQL statement:
+alter table SpecimenOrObservationBase_Extension drop constraint FKE03B82923B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_IDENTIFIER" not found; SQL statement:
+alter table SpecimenOrObservationBase_Identifier drop constraint FK329710B6E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_IDENTIFIER" not found; SQL statement:
+alter table SpecimenOrObservationBase_Identifier drop constraint FK329710B63B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement:
+alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA9316CD55E0D6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement:
+alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA93168028C309 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_LANGUAGESTRING" not found; SQL statement:
+alter table SpecimenOrObservationBase_LanguageString drop constraint FKCFAA93163B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_MARKER" not found; SQL statement:
+alter table SpecimenOrObservationBase_Marker drop constraint FK8E6106C7777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_MARKER" not found; SQL statement:
+alter table SpecimenOrObservationBase_Marker drop constraint FK8E6106C73B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase_OriginalSourceBase drop constraint FKCA7F794A3A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table SpecimenOrObservationBase_OriginalSourceBase drop constraint FKCA7F794A3B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_RIGHTSINFO" not found; SQL statement:
+alter table SpecimenOrObservationBase_RightsInfo drop constraint FK415EFB32C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SPECIMENOROBSERVATIONBASE_RIGHTSINFO" not found; SQL statement:
+alter table SpecimenOrObservationBase_RightsInfo drop constraint FK415EFB323B8A5ABA [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement:
+alter table StateData drop constraint FKFB1697BB4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement:
+alter table StateData drop constraint FKFB1697BBBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA" not found; SQL statement:
+alter table StateData drop constraint FKFB1697BB682A4E4B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_AUD" not found; SQL statement:
+alter table StateData_AUD drop constraint FKDA6A700C34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_DEFINEDTERMBASE" not found; SQL statement:
+alter table StateData_DefinedTermBase drop constraint FK107321E2F4E35BCD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_DEFINEDTERMBASE" not found; SQL statement:
+alter table StateData_DefinedTermBase drop constraint FK107321E28E7BF9AB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement:
+alter table StateData_LanguageString drop constraint FK93FFD2ADF05D08D4 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement:
+alter table StateData_LanguageString drop constraint FK93FFD2AD9682414B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATEDATA_LANGUAGESTRING" not found; SQL statement:
+alter table StateData_LanguageString drop constraint FK93FFD2AD8E7BF9AB [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement:
+alter table StatisticalMeasurementValue drop constraint FK2DCE02904FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement:
+alter table StatisticalMeasurementValue drop constraint FK2DCE0290BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE" not found; SQL statement:
+alter table StatisticalMeasurementValue drop constraint FK2DCE02904C428112 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_AUD" not found; SQL statement:
+alter table StatisticalMeasurementValue_AUD drop constraint FKBB16686134869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_DEFINEDTERMBASE" not found; SQL statement:
+alter table StatisticalMeasurementValue_DefinedTermBase drop constraint FK686C42B7F4E35BCD [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "STATISTICALMEASUREMENTVALUE_DEFINEDTERMBASE" not found; SQL statement:
+alter table StatisticalMeasurementValue_DefinedTermBase drop constraint FK686C42B75C9F4F2B [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB34FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB3BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB3AEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB34BAC703F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB3F8991B9D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP" not found; SQL statement:
+alter table SynonymRelationship drop constraint FKF483ADB380924EEC [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_AUD" not found; SQL statement:
+alter table SynonymRelationship_AUD drop constraint FK8AEBCA0434869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table SynonymRelationship_Annotation drop constraint FKF494F15B1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table SynonymRelationship_Annotation drop constraint FKF494F15B260A8379 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_MARKER" not found; SQL statement:
+alter table SynonymRelationship_Marker drop constraint FK7A439066777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "SYNONYMRELATIONSHIP_MARKER" not found; SQL statement:
+alter table SynonymRelationship_Marker drop constraint FK7A439066260A8379 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement:
+alter table TaxonBase drop constraint FK9249B49B4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement:
+alter table TaxonBase drop constraint FK9249B49BBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement:
+alter table TaxonBase drop constraint FK9249B49B8492378F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement:
+alter table TaxonBase drop constraint FK9249B49B74FED214 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE" not found; SQL statement:
+alter table TaxonBase drop constraint FK9249B49B7C7B5AED [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_AUD" not found; SQL statement:
+alter table TaxonBase_AUD drop constraint FK37041CEC34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ANNOTATION" not found; SQL statement:
+alter table TaxonBase_Annotation drop constraint FK41ED09731E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ANNOTATION" not found; SQL statement:
+alter table TaxonBase_Annotation drop constraint FK41ED09739C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_CREDIT" not found; SQL statement:
+alter table TaxonBase_Credit drop constraint FK4CB48B3D32D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_CREDIT" not found; SQL statement:
+alter table TaxonBase_Credit drop constraint FK4CB48B3D9C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_EXTENSION" not found; SQL statement:
+alter table TaxonBase_Extension drop constraint FKF961257B927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_EXTENSION" not found; SQL statement:
+alter table TaxonBase_Extension drop constraint FKF961257B9C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_IDENTIFIER" not found; SQL statement:
+alter table TaxonBase_Identifier drop constraint FK3E25CAEDE12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_IDENTIFIER" not found; SQL statement:
+alter table TaxonBase_Identifier drop constraint FK3E25CAED9C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_MARKER" not found; SQL statement:
+alter table TaxonBase_Marker drop constraint FK5CDB747E777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_MARKER" not found; SQL statement:
+alter table TaxonBase_Marker drop constraint FK5CDB747E9C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TaxonBase_OriginalSourceBase drop constraint FKFB680C813A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TaxonBase_OriginalSourceBase drop constraint FKFB680C819C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_RIGHTSINFO" not found; SQL statement:
+alter table TaxonBase_RightsInfo drop constraint FK4CEDB569C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONBASE_RIGHTSINFO" not found; SQL statement:
+alter table TaxonBase_RightsInfo drop constraint FK4CEDB5699C9D39 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement:
+alter table TaxonInteraction_LanguageString drop constraint FK579A1DC02BEBA58D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement:
+alter table TaxonInteraction_LanguageString drop constraint FK579A1DC028459272 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONINTERACTION_LANGUAGESTRING" not found; SQL statement:
+alter table TaxonInteraction_LanguageString drop constraint FK579A1DC086C86FE0 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C64FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C6BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C6BFEAE500 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C6617E62B3 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C6D7BE55A0 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C62B4FEDD6 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C6B14B73EF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C67F90DF03 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE" not found; SQL statement:
+alter table TaxonNameBase drop constraint FKB4870C662AD57A2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_AUD" not found; SQL statement:
+alter table TaxonNameBase_AUD drop constraint FK5CA2CB9734869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ANNOTATION" not found; SQL statement:
+alter table TaxonNameBase_Annotation drop constraint FK9E7794681E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ANNOTATION" not found; SQL statement:
+alter table TaxonNameBase_Annotation drop constraint FK9E7794688C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_CREDIT" not found; SQL statement:
+alter table TaxonNameBase_Credit drop constraint FK29BCD8B232D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_CREDIT" not found; SQL statement:
+alter table TaxonNameBase_Credit drop constraint FK29BCD8B28C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_EXTENSION" not found; SQL statement:
+alter table TaxonNameBase_Extension drop constraint FKC28EE7E6927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_EXTENSION" not found; SQL statement:
+alter table TaxonNameBase_Extension drop constraint FKC28EE7E68C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_IDENTIFIER" not found; SQL statement:
+alter table TaxonNameBase_Identifier drop constraint FK9AB055E2E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_IDENTIFIER" not found; SQL statement:
+alter table TaxonNameBase_Identifier drop constraint FK9AB055E28C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_MARKER" not found; SQL statement:
+alter table TaxonNameBase_Marker drop constraint FK39E3C1F3777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_MARKER" not found; SQL statement:
+alter table TaxonNameBase_Marker drop constraint FK39E3C1F38C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_NOMENCLATURALSTATUS" not found; SQL statement:
+alter table TaxonNameBase_NomenclaturalStatus drop constraint FK560BA7926615E90D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_NOMENCLATURALSTATUS" not found; SQL statement:
+alter table TaxonNameBase_NomenclaturalStatus drop constraint FK560BA7928C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TaxonNameBase_OriginalSourceBase drop constraint FKF746D2763A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TaxonNameBase_OriginalSourceBase drop constraint FKF746D2768C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_RIGHTSINFO" not found; SQL statement:
+alter table TaxonNameBase_RightsInfo drop constraint FKA978405EC13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_RIGHTSINFO" not found; SQL statement:
+alter table TaxonNameBase_RightsInfo drop constraint FKA978405E8C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TaxonNameBase_TypeDesignationBase drop constraint FKC0D6BBB5C7DF530C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNAMEBASE_TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TaxonNameBase_TypeDesignationBase drop constraint FKC0D6BBB58C85CF94 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCC4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCCBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCC84A3CE1B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCC39DB2DFB [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCC381381B5 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCCCC05993E [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE" not found; SQL statement:
+alter table TaxonNode drop constraint FK924F5BCCDE9A3E39 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_AUD" not found; SQL statement:
+alter table TaxonNode_AUD drop constraint FKE090C39D34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_ANNOTATION" not found; SQL statement:
+alter table TaxonNode_Annotation drop constraint FKD8A9A9A21E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_ANNOTATION" not found; SQL statement:
+alter table TaxonNode_Annotation drop constraint FKD8A9A9A2927D8399 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_MARKER" not found; SQL statement:
+alter table TaxonNode_Marker drop constraint FK395842D777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONNODE_MARKER" not found; SQL statement:
+alter table TaxonNode_Marker drop constraint FK395842D927D8399 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA024FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA02BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA02AEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA02E71EF6CE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA02F8991B9D [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP" not found; SQL statement:
+alter table TaxonRelationship drop constraint FK7482BA02F11BD77B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_AUD" not found; SQL statement:
+alter table TaxonRelationship_AUD drop constraint FKA0DE16D334869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table TaxonRelationship_Annotation drop constraint FK82C86DAC1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_ANNOTATION" not found; SQL statement:
+alter table TaxonRelationship_Annotation drop constraint FK82C86DAC2BD180D9 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_MARKER" not found; SQL statement:
+alter table TaxonRelationship_Marker drop constraint FK69FBDD37777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TAXONRELATIONSHIP_MARKER" not found; SQL statement:
+alter table TaxonRelationship_Marker drop constraint FK69FBDD372BD180D9 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY" not found; SQL statement:
+alter table TermVocabulary drop constraint FK487AA6924FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY" not found; SQL statement:
+alter table TermVocabulary drop constraint FK487AA692BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_AUD" not found; SQL statement:
+alter table TermVocabulary_AUD drop constraint FKA6ED3B6334869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ANNOTATION" not found; SQL statement:
+alter table TermVocabulary_Annotation drop constraint FK76D2071C1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ANNOTATION" not found; SQL statement:
+alter table TermVocabulary_Annotation drop constraint FK76D2071C258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_CREDIT" not found; SQL statement:
+alter table TermVocabulary_Credit drop constraint FK7604C56632D1B9F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_CREDIT" not found; SQL statement:
+alter table TermVocabulary_Credit drop constraint FK7604C566258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_EXTENSION" not found; SQL statement:
+alter table TermVocabulary_Extension drop constraint FKA8814EB2927DE9DF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_EXTENSION" not found; SQL statement:
+alter table TermVocabulary_Extension drop constraint FKA8814EB2258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_IDENTIFIER" not found; SQL statement:
+alter table TermVocabulary_Identifier drop constraint FK730AC896E12073FF [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_IDENTIFIER" not found; SQL statement:
+alter table TermVocabulary_Identifier drop constraint FK730AC896258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_MARKER" not found; SQL statement:
+alter table TermVocabulary_Marker drop constraint FK862BAEA7777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_MARKER" not found; SQL statement:
+alter table TermVocabulary_Marker drop constraint FK862BAEA7258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TermVocabulary_OriginalSourceBase drop constraint FK8F2D512A3A6735D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_ORIGINALSOURCEBASE" not found; SQL statement:
+alter table TermVocabulary_OriginalSourceBase drop constraint FK8F2D512A258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_REPRESENTATION" not found; SQL statement:
+alter table TermVocabulary_Representation drop constraint FKA408B63AB31C4747 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_REPRESENTATION" not found; SQL statement:
+alter table TermVocabulary_Representation drop constraint FKA408B63A258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_RIGHTSINFO" not found; SQL statement:
+alter table TermVocabulary_RightsInfo drop constraint FK81D2B312C13F7B21 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TERMVOCABULARY_RIGHTSINFO" not found; SQL statement:
+alter table TermVocabulary_RightsInfo drop constraint FK81D2B312258E060 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAE4FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAEBC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAEAEB7F3BE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAE9E3ED08 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAE4CB0F315 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE" not found; SQL statement:
+alter table TypeDesignationBase drop constraint FK8AC9DCAEFBFA41D9 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_AUD" not found; SQL statement:
+alter table TypeDesignationBase_AUD drop constraint FK243C037F34869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_ANNOTATION" not found; SQL statement:
+alter table TypeDesignationBase_Annotation drop constraint FK4D7327801E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_ANNOTATION" not found; SQL statement:
+alter table TypeDesignationBase_Annotation drop constraint FK4D73278044E9E6D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_MARKER" not found; SQL statement:
+alter table TypeDesignationBase_Marker drop constraint FKB914A10B777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "TYPEDESIGNATIONBASE_MARKER" not found; SQL statement:
+alter table TypeDesignationBase_Marker drop constraint FKB914A10B44E9E6D4 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT" not found; SQL statement:
+alter table UserAccount drop constraint FKB3F13C24FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT" not found; SQL statement:
+alter table UserAccount drop constraint FKB3F13C2AAC1B820 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_AUD" not found; SQL statement:
+alter table UserAccount_AUD drop constraint FK6A57909334869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_GRANTEDAUTHORITYIMPL" not found; SQL statement:
+alter table UserAccount_GrantedAuthorityImpl drop constraint FKFD724D851857F6C2 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_GRANTEDAUTHORITYIMPL" not found; SQL statement:
+alter table UserAccount_GrantedAuthorityImpl drop constraint FKFD724D855EA5DD89 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_PERMISSIONGROUP" not found; SQL statement:
+alter table UserAccount_PermissionGroup drop constraint FK812DE753DA9DCB5F [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "USERACCOUNT_PERMISSIONGROUP" not found; SQL statement:
+alter table UserAccount_PermissionGroup drop constraint FK812DE753887E3D12 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement:
+alter table WorkingSet drop constraint FK668D5B914FF2DB2C [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement:
+alter table WorkingSet drop constraint FK668D5B91BC5DA539 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET" not found; SQL statement:
+alter table WorkingSet drop constraint FK668D5B9123DB7F04 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_AUD" not found; SQL statement:
+alter table WorkingSet_AUD drop constraint FK628F58E234869AAE [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_ANNOTATION" not found; SQL statement:
+alter table WorkingSet_Annotation drop constraint FKCBBA8CBD1E403E0B [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_ANNOTATION" not found; SQL statement:
+alter table WorkingSet_Annotation drop constraint FKCBBA8CBDBBD2C869 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_DESCRIPTIONBASE" not found; SQL statement:
+alter table WorkingSet_DescriptionBase drop constraint FK731CC81F33B8A841 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_DESCRIPTIONBASE" not found; SQL statement:
+alter table WorkingSet_DescriptionBase drop constraint FK731CC81FBBD2C869 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_MARKER" not found; SQL statement:
+alter table WorkingSet_Marker drop constraint FK9CB22CC8777265A1 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_MARKER" not found; SQL statement:
+alter table WorkingSet_Marker drop constraint FK9CB22CC8BBD2C869 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_REPRESENTATION" not found; SQL statement:
+alter table WorkingSet_Representation drop constraint FKA003835BB31C4747 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_REPRESENTATION" not found; SQL statement:
+alter table WorkingSet_Representation drop constraint FKA003835BBBD2C869 [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_TAXONBASE" not found; SQL statement:
+alter table WorkingSet_TaxonBase drop constraint FK34EB896D7C3D0017 [42102-170]
+01-28 16:43:03 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Table "WORKINGSET_TAXONBASE" not found; SQL statement:
+alter table WorkingSet_TaxonBase drop constraint FK34EB896DB4555A9A [42102-170]
+01-28 16:43:03 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]
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 jdbc[2]: exception
+org.h2.jdbc.JdbcSQLException: Constraint "_UNIQUEKEY" already exists; SQL statement:
+alter table EntityValidationResult 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:04 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
+01-28 16:43:05 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.<init>(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:106)
+       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:106)
+       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:70)
+       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:279)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.<init>(CdmApplicationController.java:218)
+       at eu.etaxonomy.cdm.api.application.CdmApplicationController.NewInstance(CdmApplicationController.java:158)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.getApplicationController(CdmStoreConnector.java:154)
+       at eu.etaxonomy.taxeditor.store.CdmStoreConnector.run(CdmStoreConnector.java:102)
+       at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/log4j.properties b/eu.etaxonomy.taxeditor.test/src/main/resources/log4j.properties
new file mode 100644 (file)
index 0000000..155cec6
--- /dev/null
@@ -0,0 +1,17 @@
+### ************ 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
+
+
+### ************* 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
+#log4j.logger.eu.etaxonomy.taxeditor = INFO
\ No newline at end of file
diff --git a/eu.etaxonomy.taxeditor.test/src/main/resources/unitils.properties b/eu.etaxonomy.taxeditor.test/src/main/resources/unitils.properties
new file mode 100644 (file)
index 0000000..47c604d
--- /dev/null
@@ -0,0 +1,69 @@
+#\r
+# NOTE: this is the unitils.properties file for the cdmlib-persistence module\r
+# a separate unitils.properties exists for cdmlib-io and for cdmlib-services\r
+#\r
+#\r
+# the list of all properties is found in\r
+# http://unitils.org/unitils-default.properties\r
+#\r
+\r
+### Unitils Modules ###\r
+# List of modules that is loaded. Overloading this list is normally not useful, unless you want to add a custom\r
+# module. Disabling a module can be performed by setting unitils.module.<modulename>.enabled to false.\r
+# If a module's specific dependencies are not found (e.g. hibernate is not in you classpath), this module is not loaded,\r
+# even if it is in this list and the enabled property is set to true. It's therefore not strictly necessary to disable\r
+# any of these modules.\r
+#DEFAULT: unitils.modules=database,dbunit,hibernate,mock,easymock,inject,spring,jpa\r
+unitils.module.easymock.enabled=false\r
+unitils.module.mock.enabled=false\r
+\r
+\r
+### Database ###\r
+#\r
+# Name or path of the user specific properties file. This file should contain the necessary parameters to connect to the\r
+# developer's own unit test schema. It is recommended to override the name of this file in the project specific properties\r
+# file, to include the name of the project. The system will try to find this file in the classpath, the user home folder\r
+# (recommended) or the local filesystem.\r
+#\r
+unitils.configuration.localFileName=unitils-cdmlib-local.properties\r
+\r
+# H2 #\r
+#\r
+database.driverClassName=org.h2.Driver\r
+#database.url=jdbc:h2:file:./src/main/resources/h2/cdmTest;AUTO_SERVER=TRUE\r
+database.url=jdbc:h2:file:./target/classes/h2/cdmTest;AUTO_SERVER=TRUE\r
+database.dialect=h2\r
+database.userName=sa\r
+database.password=\r
+database.schemaNames=PUBLIC\r
+org.dbunit.dataset.datatype.IDataTypeFactory.implClassName.h2=org.dbunit.ext.h2.H2DataTypeFactory\r
+org.unitils.core.dbsupport.DbSupport.implClassName.h2=eu.etaxonomy.cdm.database.H2DbSupport\r
+database.storedIndentifierCase.h2=auto\r
+database.identifierQuoteString.h2=auto\r
+\r
+\r
+#### Transaction mode ###\r
+#\r
+# If set to commit or rollback, each test is run in a transaction,\r
+# which is committed or rolled back after the test is finished.\r
+# Since we have many tests with incomplete data these tests would be\r
+# failing during commit so it is better use rollback as default\r
+# and set commit for individual test where necessary\r
+DatabaseModule.Transactional.value.default=rollback\r
+\r
+# org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager is used by default:\r
+#\r
+#   Implements transactions for unit tests, by delegating to a spring PlatformTransactionManager.\r
+#   The concrete implementation of PlatformTransactionManager that is used depends on the test class.\r
+#   If a custom PlatformTransactionManager was configured in a spring ApplicationContext, this one is used.\r
+#   If not, a suitable subclass of PlatformTransactionManager is created, depending on the configuration\r
+#   of a test. E.g. if some ORM persistence unit was configured on the test, a PlatformTransactionManager\r
+#   that can offer transactional behavior for such a persistence unit is used.\r
+#   If no such configuration is found, a DataSourceTransactionManager is used.\r
+#\r
+# org.unitils.database.transaction.UnitilsTransactionManager.implClassName=org.unitils.database.transaction.impl.SpringTransactionManager\r
+\r
+### Hibernate ###\r
+#\r
+HibernateModule.configuration.implClassName=org.hibernate.cfg.Configuration\r
+\r
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 (file)
index 0000000..095262f
--- /dev/null
@@ -0,0 +1,431 @@
+// $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.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Before;
+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.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.session.MockSessionOwner;
+
+/**
+ * @author cmathew
+ * @date 7 Oct 2014
+ *
+ */
+@DataSet
+public class CdmClientCachingTest extends BaseRemotingTest {
+
+    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 CdmTransientEntityCacher cacher;
+    private ICdmEntitySession cdmEntitySession;
+
+    private static final List<String> PKEY_DEPTH1_INIT_STRATEGY = Arrays.asList(new String[] {
+                       });
+
+    private static final List<String> PKEY_DEPTH2_INIT_STRATEGY = Arrays.asList(new String[] {
+               "root"});
+
+    private static final List<String> PKEY_DEPTH3_INIT_STRATEGY = Arrays.asList(new String[] {
+               "root.statement"});
+
+    private ICdmEntitySessionEnabled sessionOwner;
+
+    @BeforeClass
+    public static void initializePolytomousKeyTest() {
+        logger.setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(true);
+    }
+
+    @Before
+    public void initializeSession() {
+       sessionOwner = new MockSessionOwner();
+       cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+       cacher = getCacher(sessionOwner);
+    }
+
+
+
+    @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(pkey1.getRoot(), 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(pkey.getRoot(), cacher.getFromCache(pkey.getRoot()));
+        Assert.assertSame(pkey.getRoot().getStatement(), cacher.getFromCache(pkey.getRoot().getStatement()));
+        Assert.assertSame(pkey.getRoot().getQuestion(), 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);
+
+        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_DEPTH2_INIT_STRATEGY),PolytomousKey.class);
+
+
+        Assert.assertSame(pkey2.getRoot().getStatement(), 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 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);
+
+        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(pkey2.getRoot().getStatement(), 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) 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(pkey1.getRoot().getStatement());
+        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);
+
+
+
+        Assert.assertSame(pkey2.getRoot().getStatement(), 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(pkey2.getRoot().getStatement(), cacher.getFromCache(pkey2.getRoot().getStatement(), KeyStatement.class));
+       Assert.assertSame(st, pkey2.getRoot().getStatement());
+       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<Language, LanguageString> labelMap = pkey.getRoot().getStatement().getLabel();
+       Set<Language> languages = labelMap.keySet();
+       Iterator<Language> 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/cdm/api/cache/CdmModelGetMethodCacherTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/api/cache/CdmModelGetMethodCacherTest.java
new file mode 100644 (file)
index 0000000..36b790c
--- /dev/null
@@ -0,0 +1,66 @@
+package eu.etaxonomy.cdm.api.cache;
+
+import java.io.IOException;
+import java.util.List;
+
+import net.sf.ehcache.Cache;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+
+import eu.etaxonomy.taxeditor.remoting.cache.CdmClientCacheException;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmModelCacher;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmModelFieldPropertyFromClass;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager.CdmCacheManagerType;
+
+
+public class CdmModelGetMethodCacherTest {
+
+       private static final Logger logger = Logger.getLogger(CdmModelGetMethodCacherTest.class);
+
+    public static final Resource CDMLIB_DISK_STORE_RESOURCE =
+            new ClassPathResource("/eu/etaxonomy/cache");
+    
+    
+
+       @Test
+       public void cacheGettersTest() {
+               
+               Logger.getRootLogger().setLevel(Level.INFO);
+               try {
+                       System.setProperty("ehcache.disk.store.dir", CDMLIB_DISK_STORE_RESOURCE.getFile().getAbsolutePath());
+               } catch (IOException e) {
+                       throw new CdmClientCacheException(e);
+               }               
+               CdmModelCacher cmdmc = new CdmModelCacher();
+               
+               //cmdmc.checkGetterMethods();
+               
+               cmdmc.cacheGetterFields();
+
+                                               
+               Cache cdmlibCache = CdmRemoteCacheManager.getInstance().getCdmModelGetMethodsCache();
+               List<CdmModelFieldPropertyFromClass> cmgmfcList = cmdmc.getCdmModelGetMethodFromClassList();
+               
+               List<Object> keys = cdmlibCache.getKeys();
+               Assert.assertEquals(cmgmfcList.size(), keys.size());
+                               
+               for(CdmModelFieldPropertyFromClass cmgmfc: cmgmfcList) {
+                       String className = cmgmfc.getClassName();
+                       Assert.assertTrue(keys.contains(className));
+                       logger.info("Class Name : " + className + " has been cached");
+               }
+               cdmlibCache.removeAll();
+               cdmlibCache.flush();
+               CdmRemoteCacheManager.getInstance().shutdown(CdmCacheManagerType.CDMLIB_MODEL);
+       }
+
+       
+        
+
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/PolytomousKeyTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/PolytomousKeyTest.java
new file mode 100644 (file)
index 0000000..899e022
--- /dev/null
@@ -0,0 +1,402 @@
+// $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.model;
+
+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.Level;
+import org.apache.log4j.Logger;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.junit.Assert;
+import org.junit.Before;
+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.agent.AgentBase;
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.model.common.Credit;
+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.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.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
+import eu.etaxonomy.taxeditor.remoting.cache.EntityCacherDebugResult;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.session.MockSessionOwner;
+
+/**
+ * @author cmathew
+ * @date 7 Oct 2014
+ *
+ */
+@DataSet
+public class PolytomousKeyTest extends BaseRemotingTest {
+
+    private static final Logger logger = Logger.getLogger(PolytomousKeyTest.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");
+
+
+    IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService();
+    IPolytomousKeyNodeService polytomousKeyNodeService = getRemoteApplicationController().getPolytomousKeyNodeService();
+    ICommonService commonService = getRemoteApplicationController().getCommonService();
+    ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
+
+
+    private CdmTransientEntityCacher cacher;
+    private ICdmEntitySessionEnabled sessionOwner;
+
+    private ICdmEntitySession cdmEntitySession;
+
+    Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+
+
+    @BeforeClass
+    public static void initializePolytomousKeyTest() {
+        logger.setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(true);
+        initializeController("default",
+                "localhost",
+                8080,
+                "",
+                NomenclaturalCode.ICNAFP,
+                "admin",
+                "00000");
+    }
+
+    @Before
+    public void initializeSession() {
+        sessionOwner = new MockSessionOwner();
+        cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+        cacher = getCacher(sessionOwner);
+    }
+
+    @Test
+    public void readAllPolytomousKeys() {
+        List<PolytomousKey> pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null);
+        Iterator<PolytomousKey> 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<Taxon> taxonomicScope = pKey.getTaxonomicScope();
+        Iterator<Taxon> tsItr = taxonomicScope.iterator();
+        Taxon taxon = tsItr.next();
+
+        Assert.assertEquals("Achillea sec. Cyprus", taxon.getTitleCache());
+        Assert.assertEquals(tsItr.hasNext(), false);
+
+        List<Credit> 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<Extension> exts = pKey.getExtensions();
+        Iterator<Extension> extItr = exts.iterator();
+        Extension ext = extItr.next();
+        Assert.assertEquals(ext.getValue(), "http://test.com");
+
+        Set<Rights> rights = pKey.getRights();
+        Iterator<Rights> rightsItr = rights.iterator();
+        Rights right = rightsItr.next();
+        Assert.assertEquals(right.getText(),"Rights Text Test");
+
+        Set<IdentifiableSource> sources = pKey.getSources();
+        Iterator<IdentifiableSource> 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(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(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(english), statement);
+        Assert.assertEquals(rootNode.getChildAt(1).getChildAt(0).getChildAt(0).getTaxon().getTitleCache(), "Achillea arabica Kotschy sec. Cyprus");
+    }
+
+    @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(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(english).getText(),"Modifying Text 1a");
+        String modifyingText = "Modifying Text 1a updated";
+
+        //pkeynode.getChildAt(0).putModifyingText(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);
+
+        EntityCacherDebugResult debugResult = new EntityCacherDebugResult(cacher,  Arrays.asList(pkey));
+
+        polytomousKeyService.merge(pkey);
+
+        pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+        sessionOwner = new MockSessionOwner();
+
+
+        pkeynode = pkey.getRoot();
+        for(PolytomousKeyNode node : pkeynode.getChildren()) {
+            Assert.assertNull(node.getQuestion());
+            node.setQuestion(KeyStatement.NewInstance(english,newQuestion));
+            Assert.assertNull(node.getStatement());
+            node.setStatement(KeyStatement.NewInstance(english,newStatement));
+        }
+
+
+        Assert.assertEquals(pkeynode.getChildAt(1).getTaxon(), taxon);
+
+        polytomousKeyService.merge(pkey);
+
+        pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+        sessionOwner = new MockSessionOwner();
+
+
+        pkeynode = pkey.getRoot();
+        for(PolytomousKeyNode node : pkeynode.getChildren()) {
+            Assert.assertNotNull(node.getQuestion());
+            Map<Language, LanguageString> label = node.getQuestion().getLabel();
+            Assert.assertEquals(newQuestion, label.get(english).getText());
+            Assert.assertNotNull(node.getStatement());
+            Assert.assertEquals(newStatement, node.getStatement().getLabel(english).getText());
+        }
+        //Assert.assertEquals(pkeynode.getFeature().getId(), feature.getId());
+
+    }
+
+    @Test
+    public void savePolytomousKeyNodeDataWithSameSubKey() {
+
+        ICdmEntitySessionEnabled sessionOwner = new MockSessionOwner();
+        cdmEntitySessionManager.bind(sessionOwner);
+        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(children, 0);
+        PolytomousKey subkey1 = CdmBase.deproxy(childNode0.getSubkey(),PolytomousKey.class);
+        String subkey1title = subkey1.getTitleCache();
+        subkey1.setTitleCache(subkey1title + "test", true);
+
+        PolytomousKeyNode childNode1 = (PolytomousKeyNode)commonService.get(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<Language, LanguageString> label1 = pkeynode.getQuestion().getLabel();
+        label1.size();
+
+
+        Map<Language, LanguageString> 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);
+
+        // since subKey was not initialized before the delete, an attempt
+        // to initialize it after will lead to an NPE
+        try {
+            PolytomousKeyNode subKeyRootNode = subKey.getRoot();
+            Assert.fail("A NullPointerException indicating null root node should be thrown here");
+        } catch(NullPointerException npe) {
+
+        }
+        // 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
+        Assert.assertNotNull(subKey);
+        // after reloading the object graph, accessing subKey should throw a null pointer exception
+        try {
+            PolytomousKeyNode subKeyRootNode = subKey.getRoot();
+            Assert.fail("A NullPointerException indicating null root node should be thrown here");
+        } catch(NullPointerException npe) {
+
+        }
+
+    }
+
+    @Test
+    public void deleteSubKeyInPolytomousNode() {
+        PolytomousKey pKey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+
+
+        PolytomousKeyNode rootNode = pKey.getRoot();
+        List<PolytomousKeyNode> 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);
+
+    }
+
+
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNameEditorTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNameEditorTest.java
new file mode 100644 (file)
index 0000000..f797695
--- /dev/null
@@ -0,0 +1,195 @@
+// $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.model;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.eclipse.core.commands.ExecutionException;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+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.name.BotanicalName;
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+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.httpinvoker.CDMServer;
+import eu.etaxonomy.taxeditor.operations.OperationTestBase;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.session.MockSessionOwner;
+
+/**
+ * @author cmathew
+ * @date 3 Feb 2015
+ *
+ */
+@DataSet
+public class TaxonNameEditorTest extends OperationTestBase {
+
+    private static final Logger logger = Logger.getLogger(TaxonNameEditorTest.class);
+
+
+
+
+    ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService();
+    ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
+    IClassificationService classificationService = getRemoteApplicationController().getClassificationService();
+
+
+    private CdmTransientEntityCacher cacher;
+    private ICdmEntitySessionEnabled sessionOwner;
+
+    private ICdmEntitySession cdmEntitySession;
+
+    Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+
+
+    @BeforeClass
+    public static void initializePolytomousKeyTest() {
+        logger.setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(true);
+        initializeController("default",
+                "localhost",
+                8080,
+                "",
+                NomenclaturalCode.ICNAFP,
+                "admin",
+                "00000");
+    }
+
+    @Before
+    public void initializeSession() {
+        sessionOwner = new MockSessionOwner();
+        cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+        cacher = getCacher(sessionOwner);
+    }
+
+    @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<Synonym> 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<Synonym> 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<TaxonNode> rootEntities = new ArrayList<TaxonNode>();
+        UUID taxonNodeUuid = UUID.fromString("d425a971-1abe-4895-9e1f-1e5c8ff1c84c");
+        TaxonNode taxonNode = taxonNodeService.load(taxonNodeUuid);
+        rootEntities.add(taxonNode);
+        sessionOwner = new MockSessionOwner(rootEntities);
+        cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+
+        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);
+    }
+}
+
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNavigatorTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/cdm/model/TaxonNavigatorTest.java
new file mode 100644 (file)
index 0000000..485f272
--- /dev/null
@@ -0,0 +1,97 @@
+// $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.model;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+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.name.NomenclaturalCode;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+import eu.etaxonomy.taxeditor.operations.OperationTestBase;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+import eu.etaxonomy.taxeditor.session.MockSessionOwner;
+
+/**
+ * @author cmathew
+ * @date 9 Mar 2015
+ *
+ */
+public class TaxonNavigatorTest extends OperationTestBase {
+
+    private static final Logger logger = Logger.getLogger(TaxonNameEditorTest.class);
+
+
+
+
+    ITaxonNodeService taxonNodeService = getRemoteApplicationController().getTaxonNodeService();
+    ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
+    IClassificationService classificationService = getRemoteApplicationController().getClassificationService();
+
+
+    private CdmTransientEntityCacher cacher;
+    private ICdmEntitySessionEnabled sessionOwner;
+    private ICdmEntitySession cdmEntitySession;
+
+    Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+
+
+    @BeforeClass
+    public static void initializePolytomousKeyTest() {
+        logger.setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(true);
+        initializeController("default",
+                "localhost",
+                8080,
+                "",
+                NomenclaturalCode.ICNAFP,
+                "admin",
+                "00000");
+    }
+
+
+    @Before
+    public void initializeSession() {
+        sessionOwner = new MockSessionOwner();
+        cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+        cacher = getCacher(sessionOwner);
+    }
+
+    @Test
+    public void addNewTaxonTest() {
+
+    }
+
+    @Test
+    public void addNewClassificationTest() {
+
+    }
+
+    @Test
+    public void changeAcceptedTaxonToSynonymTest() {
+
+    }
+
+    @Test
+    public void moveTaxonTest() {
+
+    }
+
+
+}
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 (file)
index 0000000..2672fdc
--- /dev/null
@@ -0,0 +1,202 @@
+/**
+ * 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.IOException;
+import java.lang.reflect.Field;
+import java.util.Map;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+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.UnitilsJUnit4;
+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.model.name.NomenclaturalCode;
+import eu.etaxonomy.taxeditor.remoting.cache.CdmClientCacheException;
+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.CdmRemoteSourceException;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
+import eu.etaxonomy.taxeditor.session.CdmEntitySession;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+
+
+/**
+ * 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 class BaseRemotingTest extends UnitilsJUnit4 {
+    //private static final Logger logger = Logger.getLogger(BaseRemotingTest.class);
+
+    private static final Resource TEST_REMOTE_APPLICATION_CONTEXT_RESOURCE =
+            new ClassPathResource("/eu/etaxonomy/cdm/testRemotingApplicationContext.xml");
+
+    private static CdmApplicationRemoteController remoteApplicationController;
+    private static ICdmRemoteSource cdmRemoteSource;
+    private static CdmPersistentRemoteSource remotePersistentSource;
+
+    public static boolean useManagedServer = false;
+
+    public static final Resource CDMLIB_DISK_STORE_RESOURCE =
+            new ClassPathResource("/eu/etaxonomy/cache");
+
+    protected static ICdmEntitySessionManager cdmEntitySessionManager;
+
+
+    @BeforeClass
+    public static void initializeBaseRemotingTest() {
+        //NOTE: Run this the cdmTest H2 DB whenever it needs to be
+       //      recreated e.g. after a model change
+       DatabaseUnitils.disableConstraints();
+
+               try {
+                       System.setProperty("ehcache.disk.store.dir", CDMLIB_DISK_STORE_RESOURCE.getFile().getAbsolutePath());
+               } catch (IOException e) {
+                       throw new CdmClientCacheException(e);
+               }
+
+        useManagedServer = (System.getProperty("use.managed.server") == null) ? useManagedServer : Boolean.valueOf(System.getProperty("use.managed.server"));
+        if(useManagedServer) {
+            try {
+                CDMServer.getInstance().start();
+            } catch (Exception e) {
+                e.printStackTrace();
+                Assert.fail("Server failed to start. Reason : " + e.getMessage());
+            }
+
+        initializeController(CDMServer.getInstance().getName(),
+                CDMServer.getInstance().getHost(),
+                CDMServer.getInstance().getPort(),
+                CDMServer.getInstance().getContextPath(),
+                NomenclaturalCode.ICNAFP,
+                "admin",
+                "00000");
+        }
+
+
+    }
+
+
+    @Test
+    public void disableConstraints() {
+       // To be run on the src/test/resources/h2/cdmTest h2 db after
+       // updating the unitils.properties 'database.url' property
+       DatabaseUnitils.disableConstraints();
+    }
+
+    public static void initializeController(String sourceName, String host, int port, String contextPath, NomenclaturalCode ncode, String username, String password) {
+
+        cdmRemoteSource = CdmRemoteSource.NewInstance(sourceName, host, port, contextPath, ncode);
+        remoteApplicationController =
+                CdmApplicationRemoteController.NewInstance(cdmRemoteSource,
+                        false,
+                        null,
+                        null);
+
+        try {
+            remotePersistentSource = CdmPersistentRemoteSource.NewInstance(sourceName);
+        } catch (CdmRemoteSourceException e) {
+            Assert.fail("Default Remote Persistent Source failed to load. Reason : " + e.getMessage());
+        }
+        cdmEntitySessionManager = getRemoteApplicationController().getCdmEntitySessionManager();
+
+        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);
+    }
+
+
+
+    protected static CdmApplicationRemoteController getRemoteApplicationController() {
+        return remoteApplicationController;
+    }
+
+    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<ICdmEntitySessionEnabled, CdmEntitySession> ownerSessionMap =
+                       (Map<ICdmEntitySessionEnabled, CdmEntitySession>) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap");
+       return ownerSessionMap.get(sessionOwner);
+    }
+
+    protected static CdmTransientEntityCacher getActiveSession() {
+       return (CdmTransientEntityCacher) getFieldValueViaReflection(cdmEntitySessionManager, "activeSession");
+    }
+
+    protected static CdmTransientEntityCacher getCacher(ICdmEntitySessionEnabled sessionOwner) {
+       return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher");
+    }
+
+    @AfterClass
+    public static void cleanup() {
+        try {
+            CDMServer.getInstance().stop();
+        } catch (Exception e) {
+            Assert.fail("Server could not be stopped. Reason : " + e.getMessage());
+        }
+    }
+
+
+    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;
+    }
+
+
+
+
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CDMServer.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CDMServer.java
new file mode 100644 (file)
index 0000000..cdb5abe
--- /dev/null
@@ -0,0 +1,350 @@
+// $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.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.Socket;
+
+import javax.sql.DataSource;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.unitils.database.annotations.TestDataSource;
+
+import eu.etaxonomy.taxeditor.remoting.server.CDMServerException;
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceBase;
+
+/**
+ *
+ * (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);
+
+    @TestDataSource
+    protected DataSource dataSource;
+
+    private final String name = "default";
+    private final String host = "127.0.0.1";
+    private final int port = 9090;
+    private final int stopPort = 9191;
+    private final String stopKey = "jetty-cdm-server";
+    private final String contextPath = "";
+
+    private boolean keepServerRunning = false;
+
+    public static final Resource DEFAULT_CDM_WEBAPP_RESOURCE =
+            new ClassPathResource("/etc/jetty/cdmlib-remote-webapp.war");
+
+    public static final Resource DEFAULT_JETTY_CONFIG_RESOURCE =
+            new ClassPathResource("/etc/jetty/jetty.xml");
+
+    public static final Resource DEFAULT_JETTY_TEMP_RESOURCE =
+            new ClassPathResource("/etc/jetty/temp");
+
+    public static final Resource DEFAULT_JETTY_TEMP_WAR_LIB_RESOURCE =
+            new ClassPathResource("/etc/jetty/temp/webapp/WEB-INF/lib");
+
+    public static final Resource DEFAULT_DATASOURCE_FILE =
+            new ClassPathResource("datasources.xml");
+
+    public static final Resource DEFAULT_JETTY_RUNNER_RESOURCE =
+            new ClassPathResource("/etc/jetty/jetty-runner-9.2.3.v20140905.jar");
+
+    public static final Resource DEFAULT_JETTY_RESOURCE =
+            new ClassPathResource("/etc/jetty/start-9.2.3.v20140905.jar");
+
+
+
+    private static CDMServer cdmServer = null;
+    private static CDMServerException cdmse = null;
+
+    private void CDMServer() {
+        logger.setLevel(Level.INFO);
+    }
+
+    public static CDMServer getInstance() {
+        if(cdmServer == null) {
+            cdmServer = new CDMServer();
+        }
+        return cdmServer;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public String getContextPath() {
+        return contextPath;
+    }
+
+    public boolean getKeepServerRunning() {
+        return keepServerRunning;
+    }
+
+    public void setKeepServerRunning(boolean keepServerRunning) {
+        this.keepServerRunning = keepServerRunning;
+    }
+
+    public static boolean isRunningInEclipse() {
+        return (System.getProperty("sun.java.command") != null &&
+                System.getProperty("sun.java.command").startsWith("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner"));
+    }
+
+    private String getVMArgs() throws IOException {
+        StringBuilder sb = new StringBuilder();
+        sb.append(" -Dspring.profiles.active=remoting");
+        sb.append(" -Dcdm.beanDefinitionFile=" + DEFAULT_DATASOURCE_FILE.getFile().getAbsolutePath());
+        sb.append(" -Dcdm.datasource=cdmTest");
+        return sb.toString();
+    }
+
+    private String getStartServerArgs() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(" --port ");
+        sb.append(port);
+        return sb.toString();
+    }
+
+    private String getStopServerSettings() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(" --stop-port ");
+        sb.append(stopPort);
+        sb.append(" --stop-key ");
+        sb.append(stopKey);
+        return sb.toString();
+    }
+
+    private String getStopServerArgs() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(" STOP.PORT=");
+        sb.append(stopPort);
+        sb.append(" STOP.KEY=");
+        sb.append(stopKey);
+        return sb.toString();
+    }
+
+    public void start() throws CDMServerException {
+
+        /**
+         * First check if the CDM server responds to a service request, which implies that
+         * the server has started properly. If no response is received then check if the
+         * server is listening on specific host / port, which implies that the server
+         * has started but incorrectly, in which case we try to force stop it (if we can)
+         * and start a new server.
+         */
+        if(isRunning(1)) {
+            logger.info("[CDM-Server] Server already running @ " + host + ":" + port );
+            return;
+        } else if (isAvailable(1)){
+            logger.info("[CDM-Server] Server available, but not started correctly @ " + host + ":" + port );
+            logger.info("[CDM-Server] .... trying to force stop server @ " + host + ":" + port );
+            try {
+                stop(true);
+            } catch (Exception e) {
+                throw new CDMServerException("CDM Server could not be stopped : " + e.getMessage());
+            }
+        }
+
+        Thread t = new Thread() {
+            @Override
+            public void run() {
+                StringBuffer output = new StringBuffer();
+                try{
+                    Process p;
+                    String command = "java "
+                            + getVMArgs()
+                            + " -jar "
+                            + DEFAULT_JETTY_RUNNER_RESOURCE.getFile().getAbsolutePath()
+                            + getStartServerArgs()
+                            + getStopServerSettings()
+                            + " "
+                            + DEFAULT_CDM_WEBAPP_RESOURCE.getFile().getAbsolutePath();
+                    logger.info("[CDM-Server] Starting server with Command : " + command);
+                    p = Runtime.getRuntime().exec(command);
+
+                    BufferedReader reader =
+                            new BufferedReader(new InputStreamReader(p.getInputStream()));
+
+                    String line = "";
+                    while ((line = reader.readLine())!= null) {
+                        logger.info("[CDM-Server] Start : " + line);
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    cdmse = new CDMServerException(e);
+                }
+
+            }
+        };
+
+        t.setDaemon(true);
+        cdmse = null;
+        t.start();
+
+        if(isRunning(60)) {
+            logger.info("[CDM-Server] Started Server @ " + host + ":" + port );
+        } else {
+            logger.info("[CDM-Server] Server not started within given interval");
+            // making sure to kill server if it is not started correctly
+            try {
+                stop(true);
+            } catch (Exception e) {
+                throw new CDMServerException("CDM Server could not be stopped : " + e.getMessage());
+            }
+            throw new CDMServerException("CDM Server not started : ");
+        }
+
+    }
+
+    public boolean isAvailable(int checkingIntervals) throws CDMServerException {
+        int intervalsCount = 0;
+        do {
+            try {
+                Socket s = new Socket(host, port);
+                logger.info("[CDM-Server] Available @ " + host + ":" + port );
+                return true;
+            } catch (IOException ioe) {
+
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ie) {
+                throw new CDMServerException("Error checking CDM Server status", ie);
+            }
+            intervalsCount++;
+        } while (intervalsCount < checkingIntervals);
+
+        return false;
+    }
+
+    public boolean isStopped(int checkingIntervals) throws CDMServerException {
+        int intervalsCount = 0;
+        do {
+            try {
+                Socket s = new Socket(host, port);
+            } catch (IOException ioe) {
+                return true;
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ie) {
+                throw new CDMServerException("Error checking CDM Server status", ie);
+            }
+            intervalsCount++;
+        } while (intervalsCount < checkingIntervals);
+
+        return false;
+    }
+
+    public boolean isRunning(int checkingIntervals) throws CDMServerException  {
+        CdmRemoteSourceBase crsb = new CdmRemoteSourceBase("local-cdm-server",
+                host,
+                port,
+                contextPath,
+                null);
+        int intervalsCount = 0;
+        do {
+            try {
+                if(cdmse != null) {
+                    return false;
+                }
+                boolean check = crsb.checkConnection();
+                if(check) {
+                    logger.info("[CDM-Server] Running @ " + host + ":" + port );
+                    return true;
+                }
+            } catch (Exception e) {
+
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ie) {
+                throw new CDMServerException("Error checking CDM Server status", ie);
+            }
+            intervalsCount++;
+        } while (intervalsCount < checkingIntervals);
+        return false;
+    }
+
+    public void stop() throws Exception {
+        stop(false);
+    }
+    public void stop(boolean force) throws Exception {
+
+        if(!force) {
+            if(!getInstance().isAvailable(1)) {
+                logger.info("[CDM-Server] Server already stopped @ " + host + ":" + port );
+                return;
+            }
+
+            if(getInstance().getKeepServerRunning()) {
+                logger.info("[CDM-Server] Server @ " + host + ":" + port + " is set to keep running");
+                return;
+            }
+        }
+        Thread t = new Thread() {
+            @Override
+            public void run() {
+                StringBuffer output = new StringBuffer();
+                try{
+                    Process p;
+                    String command = "java -jar " + DEFAULT_JETTY_RESOURCE.getFile().getAbsolutePath()
+                            + getStopServerArgs() + " --stop ";
+                    logger.info("[CDM-Server] Stop Command : " + command);
+                    p = Runtime.getRuntime().exec(command);
+                    p.waitFor();
+                    BufferedReader reader =
+                            new BufferedReader(new InputStreamReader(p.getInputStream()));
+                    String line = "";
+                    while ((line = reader.readLine())!= null) {
+                        logger.info("CDM-Server Stop : " + line + "\n");
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+
+            }
+        };
+
+        t.setDaemon(true);
+        t.start();
+
+        if(isStopped(5)) {
+            logger.info("[CDM-Server] Stopped Server @ " + host + ":" + port );
+        } else {
+            logger.info("[CDM-Server] Could not stop @ " + host + ":" + port + ". Please kill it manually");
+        }
+    }
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmPersistentRemoteSourceTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmPersistentRemoteSourceTest.java
new file mode 100644 (file)
index 0000000..ba58bd2
--- /dev/null
@@ -0,0 +1,221 @@
+/**
+ * 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 static org.hamcrest.CoreMatchers.containsString;
+
+import java.util.Map;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.config.CdmPersistentSourceUtils;
+import eu.etaxonomy.cdm.config.CdmPersistentXMLSource.CdmSourceProperties;
+import eu.etaxonomy.cdm.config.CdmSourceException;
+import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.taxeditor.remoting.source.CdmPersistentRemoteSource;
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource;
+import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException;
+import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
+
+/**
+ * Class to test the cdm persistent source functionality, including
+ * initialising / saving / updating and deleting
+ *
+ * Corresponding test sources settings can be found at
+ * /src/text/resources/eu.etaxonomy.cdm/cdm.datasources.xml
+ *
+ */
+public class CdmPersistentRemoteSourceTest extends BaseRemotingTest {
+    private static final Logger logger = Logger.getLogger(CdmPersistentRemoteSourceTest.class);
+
+    private CdmPersistentRemoteSource remotePersistentSource;
+
+    @BeforeClass
+    public static void initialize() {
+        Logger.getRootLogger().setLevel(Level.INFO);
+    }
+
+    @Test
+    public void whenLoadingExistingCompleteRemoteSourceThenLoadIsSuccessful() {
+
+        remotePersistentSource = getCdmPersistentRemoteSource();
+
+        String expectedServer = "127.0.0.1";
+        String expectedPort = "9090";
+        String expectedContextPath = "";
+        logger.info("Default remote source server : " + remotePersistentSource.getServer());
+        Assert.assertTrue("Default server should be " + expectedServer,
+                expectedServer.equals(remotePersistentSource.getServer()));
+
+        logger.info("Default remote source port : " + remotePersistentSource.getPort());
+        Assert.assertTrue("Default port should be 9090",
+                expectedPort.equals(String.valueOf(remotePersistentSource.getPort())));
+
+        logger.info("Default remote source context path : " + remotePersistentSource.getContextPath());
+        Assert.assertTrue("Default remote source context path should be " + expectedContextPath,
+                expectedContextPath.equals(remotePersistentSource.getContextPath()));
+
+        logger.info("Default remote source nomenclatural code : " + remotePersistentSource.getNomenclaturalCode().toString());
+        Assert.assertTrue("Default NomenclaturalCode should be ICNAFP",
+                NomenclaturalCode.ICNAFP.equals(remotePersistentSource.getNomenclaturalCode()));
+    }
+
+
+
+
+    @Test
+    public void whenConnectingToAnActiveServerThenConnectSuccessfully() {
+        // check if active server throws the right exception
+
+        remotePersistentSource = getCdmPersistentRemoteSource();
+
+        String dbSchemaVersion = "";
+        try {
+            dbSchemaVersion = remotePersistentSource.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 = remotePersistentSource.isDbEmpty();
+        } catch (CdmSourceException e) {
+            Assert.fail("isDbEmpty() on active cdm server should not have thrown CdmSourceException");
+        }
+        Assert.assertFalse(isDbEmpty);
+
+
+        boolean check = false;
+        try {
+            check = remotePersistentSource.checkConnection();
+        } catch (CdmSourceException e) {
+            Assert.fail("checkConnection() on active cdm server should not have thrown CdmSourceException");
+        }
+        Assert.assertTrue(check);
+
+
+    }
+
+    @Test
+    public void whenRequestingMetadatFromRemoteSourceThenMetaDataIsRetrieved() {
+        try {
+            remotePersistentSource = getCdmPersistentRemoteSource();
+            Map<MetaDataPropertyName, String> cdmMetaDataMap = remotePersistentSource.getMetaDataMap();
+            for(MetaDataPropertyName mdpn : cdmMetaDataMap.keySet()) {
+                String value = cdmMetaDataMap.get(mdpn);
+                logger.info("MetaData Property " + mdpn.name() + " has value " + value);
+                Assert.assertNotNull("Meta Data Value for property for " + mdpn.name() + " should not be null", value);
+            }
+        } catch (CdmSourceException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+
+    @Test
+    public void whenLoadingNonExistingRemoteSourceThenThrowException() {
+        try {
+            remotePersistentSource = CdmPersistentRemoteSource.NewInstance("nonExistingSource");
+            Assert.fail("Initialising a non-existing remote source should throw an exception");
+        } catch (CdmRemoteSourceException e) {
+            logger.info(e.getMessage());
+        }
+    }
+
+    @Test
+    public void whenLoadingExistingIncompleteRemoteSourceThenThrowException() {
+        try {
+            remotePersistentSource = CdmPersistentRemoteSource.NewInstance("incomplete");
+            Assert.fail("Initialising an incomplete remote source should throw an exception");
+        } catch (CdmRemoteSourceException e) {
+            Assert.assertThat(e.getMessage(), containsString("Required property '" + CdmSourceProperties.SERVER.toString() + "' is missing"));
+        }
+    }
+
+    @Test
+    public void whenSavingUpdatingDeletingNewCompleteRemoteSourceThenSaveUpdateDeleteIsSuccessful() {
+        String strRemoteSource = "local";
+        Assert.assertFalse("New remote source '" + strRemoteSource + "' should not yet exist in source settings file",
+                CdmPersistentRemoteSource.exists(strRemoteSource));
+        try {
+            ICdmRemoteSource remoteSource =
+                    CdmRemoteSource.NewInstance(strRemoteSource,
+                            "127.0.0.1",
+                            8080,
+                            "col",
+                            NomenclaturalCode.ICNAFP);
+            remotePersistentSource = CdmPersistentRemoteSource.save(strRemoteSource,remoteSource);
+
+            logger.info("Server : " + remotePersistentSource.getServer());
+            Assert.assertTrue("Server value should be equal",
+                    remoteSource.getServer().equals(remotePersistentSource.getServer()));
+
+            logger.info("Port : " + remotePersistentSource.getPort());
+            Assert.assertTrue("Port value should be equal",
+                    remoteSource.getPort() == remotePersistentSource.getPort());
+
+            logger.info("Context Path : " + remotePersistentSource.getContextPath());
+            Assert.assertTrue("Context Path value should be equal",
+                    remoteSource.getContextPath().equals(remotePersistentSource.getContextPath()));
+
+            logger.info("Nomenclatural Code : " + remotePersistentSource.getNomenclaturalCode().name());
+            Assert.assertTrue("Nomenclatural Code value should be equal",
+                    remoteSource.getNomenclaturalCode().name().equals(remotePersistentSource.getNomenclaturalCode().name()));
+
+            Assert.assertTrue("New remote source '" + strRemoteSource + "' should be saved in source settings file",
+                    CdmPersistentRemoteSource.exists(strRemoteSource));
+
+            remoteSource = CdmRemoteSource.NewInstance(strRemoteSource,
+                    "127.0.0.55",
+                    9090,
+                    "cyprus",
+                    NomenclaturalCode.ICNB);
+            remotePersistentSource = CdmPersistentRemoteSource.update(strRemoteSource,remoteSource);
+
+            logger.info("Server : " + remotePersistentSource.getServer());
+            Assert.assertTrue("Server value should be equal",
+                    remoteSource.getServer().equals(remotePersistentSource.getServer()));
+
+            logger.info("Port : " + remotePersistentSource.getPort());
+            Assert.assertTrue("Port value should be equal",
+                    remoteSource.getPort() == remotePersistentSource.getPort());
+
+            logger.info("Context Path : " + remotePersistentSource.getContextPath());
+            Assert.assertTrue("Context Path value should be equal",
+                    remoteSource.getContextPath().equals(remotePersistentSource.getContextPath()));
+
+            logger.info("Nomenclatural Code : " + remotePersistentSource.getNomenclaturalCode().name());
+            Assert.assertTrue("Nomenclatural Code value should be equal",
+                    remoteSource.getNomenclaturalCode().name().equals(remotePersistentSource.getNomenclaturalCode().name()));
+
+            Assert.assertTrue("New remote source '" + strRemoteSource + "' should be saved in source settings file",
+                    CdmPersistentRemoteSource.exists(strRemoteSource));
+
+            CdmPersistentSourceUtils.delete(remotePersistentSource);
+
+            Assert.assertFalse("New remote source '" + strRemoteSource + "' should no longer exist in source settings file",
+                    CdmPersistentRemoteSource.exists(strRemoteSource));
+
+        } catch (CdmRemoteSourceException e) {
+            Assert.fail("Saving a new complete remote source should not throw an exception");
+            logger.info(e.getMessage());
+        }
+    }
+
+
+
+}
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 (file)
index 0000000..3a8a786
--- /dev/null
@@ -0,0 +1,112 @@
+/**
+* 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.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+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);
+
+
+       @BeforeClass
+       public static void initialize() {
+
+               Logger.getRootLogger().setLevel(Level.INFO);
+
+       }
+
+       @Test
+       public void whenConnectingToInactiveServerThenFailToConnect() {
+               // check if non-active server throws the right exception
+               CdmRemoteSource inactiveCrs = CdmRemoteSource.NewInstance(CDMServer.getInstance().getName(),
+                       CDMServer.getInstance().getHost(),
+                       808080,
+                       CDMServer.getInstance().getContextPath(),
+                       NomenclaturalCode.ICNAFP);
+               try {
+                       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 whenConnectingToAnActiveServerWithServicesBlockedThenFailToAccessServices() {
+
+       }
+
+       @Test
+       public void whenConnectingToAnActiveServerThenConnectSuccessfully() {
+               // check if active server throws the right exception
+               CdmRemoteSource activeCrs = CdmRemoteSource.NewInstance(CDMServer.getInstance().getName(),
+                CDMServer.getInstance().getHost(),
+                CDMServer.getInstance().getPort(),
+                CDMServer.getInstance().getContextPath(),
+                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 (file)
index 0000000..816b18b
--- /dev/null
@@ -0,0 +1,41 @@
+// $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 org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.unitils.UnitilsJUnit4;
+
+import eu.etaxonomy.taxeditor.lazyloading.AbstractLazyInitializerTest;
+
+/**
+ * @author cmathew
+ * @date 6 Oct 2014
+ *
+ */
+public class CdmServerTest extends UnitilsJUnit4 {
+    private static final Logger logger = Logger.getLogger(CdmServerTest.class);
+
+
+    @Test
+    public void stopCdmServer() {
+        Logger.getRootLogger().setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(false);
+        try {
+            CDMServer.getInstance().stop(true);
+        } catch (Exception e) {
+            Assert.fail("Server could not be stopped. Reason : " + e.getMessage());
+        }
+    }
+
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTestManager.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/CdmServerTestManager.java
new file mode 100644 (file)
index 0000000..64261d2
--- /dev/null
@@ -0,0 +1,41 @@
+// $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 org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.unitils.UnitilsJUnit4;
+
+import eu.etaxonomy.taxeditor.lazyloading.AbstractLazyInitializerTest;
+
+/**
+ * @author cmathew
+ * @date 6 Oct 2014
+ *
+ */
+public class CdmServerTestManager extends UnitilsJUnit4 {
+    private static final Logger logger = Logger.getLogger(CdmServerTestManager.class);
+
+
+    @Test
+    public void stopCdmServer() {
+        Logger.getRootLogger().setLevel(Level.INFO);
+        
+        try {
+            CDMServer.getInstance().stop();
+        } catch (Exception e) {
+            Assert.fail("Server could not be stopped. 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 (file)
index 0000000..86ebe8b
--- /dev/null
@@ -0,0 +1,44 @@
+/**
+ * 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.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.config.CdmSourceException;
+
+/**
+ * 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);
+
+    @BeforeClass
+    public static void initializeHttpInvokerServicesTest() {
+        logger.setLevel(Level.INFO);
+        //initializeController("default", "127.0.0.1", 8080, "", NomenclaturalCode.ICNAFP);
+    }
+
+    @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");
+        }
+    }
+
+}
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 (file)
index 0000000..9bfdc0d
--- /dev/null
@@ -0,0 +1,214 @@
+/**
+ * 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.Level;
+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}
+ *
+ */
+@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<TaxonNode> 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 void initializeRemoteLazyLoading() {
+
+        Logger.getRootLogger().setLevel(Level.DEBUG);
+
+        taxonService = getRemoteApplicationController().getTaxonService();
+        classificationService= getRemoteApplicationController().getClassificationService();
+        List<Classification> 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<TaxonNode> 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.assertNotEquals("Title caches should not be equal",oldTitleCache,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.setCombinationAuthorTeam(combAuthor);
+            Taxon tax1 = Taxon.NewInstance(name, null);
+            UUID taxonUuid1 = taxonService.save(tax1);
+
+            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.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);
+            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<SynonymRelationship> synRelations = taxon.getSynonymRelations();
+            Set<String> relToTitles = new HashSet<String>();
+            Iterator<SynonymRelationship> 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<SynonymRelationship> synRelationsNew = taxonNew.getSynonymRelations();
+
+            Iterator<SynonymRelationship> srItrNew = synRelationsNew.iterator();
+            Iterator<String> 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.assertNotEquals("Synonym Title caches should not be equal", srNew.getSynonym().getTitleCache(), relToTitle);
+                srNew.getSynonym().setTitleCache(relToTitle);
+            }
+
+            Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1);
+
+            Set<SynonymRelationship> synRelationsOld = taxonNew.getSynonymRelations();
+            Iterator<SynonymRelationship> 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/CdmEntityCacherTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/CdmEntityCacherTest.java
new file mode 100644 (file)
index 0000000..d935013
--- /dev/null
@@ -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.lazyloading;
+
+import java.util.UUID;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.api.service.ICommonService;
+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.description.PolytomousKey;
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+
+/**
+ * @author cmathew
+ * @date 16 Oct 2014
+ *
+ */
+public class CdmEntityCacherTest extends BaseRemotingTest {
+
+    private static final Logger logger = Logger.getLogger(CdmEntityCacherTest.class);
+
+    UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66");
+    UUID taxon1Uuid = UUID.fromString("2b336df7-29e8-4f79-985f-66502739d22f");
+
+
+    IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService();
+    ICommonService commonService = getRemoteApplicationController().getCommonService();
+    ITaxonService taxonService = getRemoteApplicationController().getTaxonService();
+
+    Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+    @BeforeClass
+    public static void initializePolytomousKeyTest() {
+        logger.setLevel(Level.INFO);
+        CDMServer.getInstance().setKeepServerRunning(true);
+
+        //initializeController("default", "127.0.0.1", 8080, "", NomenclaturalCode.ICNAFP);
+    }
+
+    @Test
+    public void testSimpleCache() {
+
+
+    }
+
+    @Test
+    public void testCachingCdmEntities() {
+        PolytomousKey pkey = CdmBase.deproxy(polytomousKeyService.find(polytomousKeyUuid),PolytomousKey.class);
+        PolytomousKeyNode pkeynode = pkey.getRoot();
+
+        PersistentCollection children = (PersistentCollection) pkeynode.getChildren();
+        PolytomousKeyNode childNode0 = (PolytomousKeyNode)commonService.get(children, 0);
+        PolytomousKey subkey1 = CdmBase.deproxy(childNode0.getSubkey(),PolytomousKey.class);
+        String subkey1title = subkey1.getTitleCache();
+        subkey1.setTitleCache(subkey1title + "test", true);
+
+        PolytomousKeyNode childNode1 = (PolytomousKeyNode)commonService.get(children, 1);
+        PolytomousKey subkey2 = CdmBase.deproxy(childNode1.getSubkey(),PolytomousKey.class);
+        String subkey2title = subkey2.getTitleCache();
+        subkey2.setTitleCache(subkey2title + "test", true);
+
+        Assert.assertNotSame(subkey1, subkey2);
+
+        polytomousKeyService.merge(pkey);
+
+
+    }
+
+
+}
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 (file)
index 0000000..3a88c43
--- /dev/null
@@ -0,0 +1,39 @@
+package eu.etaxonomy.taxeditor.lazyloading;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+
+
+public class CdmServiceCacherTest extends BaseRemotingTest {
+       private static final Logger logger = Logger.getLogger(CdmServiceCacherTest.class);
+
+
+       private static CdmServiceCacher cdmServiceCacher;
+
+       @BeforeClass
+       public void initialize() {
+               Logger.getRootLogger().setLevel(Level.INFO);
+               cdmServiceCacher = (CdmServiceCacher)getRemoteApplicationController().getBean("cdmServiceCacher");
+       }
+
+       @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/RemoteLazyLoadingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/lazyloading/RemoteLazyLoadingTest.java
new file mode 100644 (file)
index 0000000..30fe70b
--- /dev/null
@@ -0,0 +1,278 @@
+/**
+ * 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.Level;
+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.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;
+
+
+
+/**
+ * Test class which tests remoting for persistent cdm entities.
+ *
+ * FIXME:Remoting saving tests are ignored until the merge development is underway
+ * @author c.mathew
+ *
+ */
+//@DataSet
+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<TaxonNode> 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() {
+
+        Logger.getRootLogger().setLevel(Level.DEBUG);
+        taxonService = getRemoteApplicationController().getTaxonService();
+
+        classificationService= getRemoteApplicationController().getClassificationService();
+        //List<Classification> 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<TaxonNode> 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.assertNotEquals("Title caches should not be equal",oldTitleCache,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.setCombinationAuthorTeam(combAuthor);
+        Taxon taxon = Taxon.NewInstance(name, null);
+        UUID taxonUuid = taxonService.save(taxon);
+
+        //        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<String> 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.getCombinationAuthorTeam(),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.setCombinationAuthorTeam(combAuthor);
+        Taxon tax1 = Taxon.NewInstance(name, null);
+        UUID taxonUuid1 = taxonService.save(tax1);
+
+        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.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);
+        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<SynonymRelationship> synRelations = taxon.getSynonymRelations();
+        Set<String> relToTitles = new HashSet<String>();
+        Iterator<SynonymRelationship> 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<SynonymRelationship> synRelationsNew = taxonNew.getSynonymRelations();
+
+        Iterator<SynonymRelationship> srItrNew = synRelationsNew.iterator();
+        Iterator<String> 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.assertNotEquals("Synonym Title caches should not be equal", srNew.getSynonym().getTitleCache(), relToTitle);
+            srNew.getSynonym().setTitleCache(relToTitle);
+        }
+
+        Taxon taxonOld = (Taxon)taxonService.find(taxonUuid1);
+
+        Set<SynonymRelationship> synRelationsOld = taxonNew.getSynonymRelations();
+        Iterator<SynonymRelationship> 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 (file)
index 0000000..a3c94b9
--- /dev/null
@@ -0,0 +1,226 @@
+/**
+* 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.Level;
+import org.apache.log4j.Logger;
+import org.hibernate.collection.internal.AbstractPersistentCollection;
+import org.hibernate.collection.spi.PersistentCollection;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+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.name.TaxonNameBase;
+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.httpinvoker.BaseRemotingTest;
+
+/**
+ * Test class which tests remoting for persistent collections.
+ *
+ * @author c.mathew
+ * @created 13.03.2014
+ */
+public class RemotePersistentCollectionTest extends BaseRemotingTest {
+       private static final Logger logger = Logger.getLogger(RemotePersistentCollectionTest.class);
+
+       private static IClassificationService classificationService;
+       private static ICommonService commonService;
+
+       @BeforeClass
+       public void initializeServices() {
+               Logger.getRootLogger().setLevel(Level.INFO);
+               classificationService = getRemoteApplicationController().getClassificationService();
+               commonService = getRemoteApplicationController().getCommonService();
+       }
+
+       /**
+        * Test method which checks remoting for persistent lists.
+        *
+        */
+       @Test
+       public void persistentListTest() {
+
+               List<TaxonNode> 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<TaxonNode> 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((PersistentCollection)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((PersistentCollection)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((PersistentCollection)childNodes, localTaxonNode));
+                               Assert.assertTrue(commonService.contains((PersistentCollection)childNodes, remoteTaxonNode));
+                               Assert.assertNotNull(remoteTaxonNode);
+                               Assert.assertNotNull(localTaxonNode);
+                               Assert.assertEquals(remoteTaxonNode,localTaxonNode);
+                       }
+               }
+       }
+
+//     @Test
+//     public void persistentSetTest() {
+//             List<Classification> 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<TaxonNode> 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<Taxon> 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<TaxonNode> taxonNodes = classificationService.getAllNodes();
+               // calling iterator will initialise the collection
+               Iterator<TaxonNode> taxonNodesItr = taxonNodes.iterator();
+               while(taxonNodesItr.hasNext()) {
+                       TaxonNode taxonNode = taxonNodesItr.next();
+                       Taxon taxon = taxonNode.getTaxon();
+
+                       if(taxon != null) {
+                               Set<TaxonDescription> descriptions = taxon.getDescriptions();
+                               Iterator<TaxonDescription> 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<Language, LanguageString> 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((PersistentCollection)multilanguagetextMap);
+                                                                       Assert.assertFalse(empty);
+                                                                       // test retrieval of key set, which should already by initialised
+                                                                       Set<Language> langKeySet = multilanguagetextMap.keySet();
+                                                                       Iterator<Language> 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((PersistentCollection)multilanguagetextMap, 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((PersistentCollection)multilanguagetextMap, value);
+                                                                               Assert.assertTrue(remoteContainsValue);
+
+                                                                       }
+                                                                       return;
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operations/OperationTestBase.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/operations/OperationTestBase.java
new file mode 100644 (file)
index 0000000..3a84348
--- /dev/null
@@ -0,0 +1,39 @@
+// $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.operations;
+
+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 eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.operation.AbstractPostOperation;
+import eu.etaxonomy.taxeditor.operation.IPostOperationEnabled;
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
+
+/**
+ * @author n.hoffmann
+ * @created 15.04.2009
+ * @version 1.0
+ */
+public class OperationTestBase extends BaseRemotingTest {
+
+       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 ICdmEntitySessionEnabled cdmEntitySessionEnabled = null;
+
+       protected static AbstractPostOperation operation;
+
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ITestService.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ITestService.java
new file mode 100644 (file)
index 0000000..37ca7a2
--- /dev/null
@@ -0,0 +1,8 @@
+package eu.etaxonomy.taxeditor.service;
+
+public interface ITestService {
+
+       public String test(String arg);
+       public String test(Object arg);
+       public String notest();
+}
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 (file)
index 0000000..6e94ef5
--- /dev/null
@@ -0,0 +1,33 @@
+package eu.etaxonomy.taxeditor.service;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import eu.etaxonomy.cdm.api.cache.CdmCacher;
+import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;
+import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.taxeditor.httpinvoker.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+
+public class ServiceInterceptorTest extends BaseRemotingTest {
+       
+        private static final Logger logger = Logger.getLogger(ServiceInterceptorTest.class);
+        ITermService termService = getRemoteApplicationController().getTermService();
+        
+           @BeforeClass
+           public static void initializeServiceInterceptorTest() {             
+               CDMServer.getInstance().setKeepServerRunning(true);       
+           }
+           
+           @Test
+           public void termServiceInterceptorTest() {
+               List<DefinedTermBase<?>> terms = termService.listByTermType(TermType.Language, null, null, null, null);
+               Assert.assertEquals(terms.size(),CdmCacher.getDefaultCache().getSize());
+               // 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/service/ServiceRebasingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/ServiceRebasingTest.java
new file mode 100644 (file)
index 0000000..b2e95aa
--- /dev/null
@@ -0,0 +1,35 @@
+package eu.etaxonomy.taxeditor.service;
+
+import net.bytebuddy.ByteBuddy;
+import net.bytebuddy.dynamic.ClassLoadingStrategy;
+import net.bytebuddy.instrumentation.MethodDelegation;
+import net.bytebuddy.matcher.ElementMatchers;
+
+import org.apache.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ServiceRebasingTest  {
+
+       private static final Logger logger = Logger.getLogger(ServiceRebasingTest.class);
+       
+       @Test
+       public void nameArgumentTest() throws InstantiationException, IllegalAccessException {
+               ITestService testService = new TestService();
+               String value = testService.test("Hello World");
+               Assert.assertEquals("String : Hello World", value);
+               
+               testService = new ByteBuddy()
+               .subclass(ITestService.class)           
+               .method(ElementMatchers.named("test"))
+               .intercept(MethodDelegation.to(TargetTestService.class).filter(ElementMatchers.named("test")))
+               .make()
+               .load(getClass().getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
+               .getLoaded()
+               .newInstance();
+               
+               value = testService.test("Hello World");
+               Assert.assertEquals("Overridden String : Hello World", value);
+       }
+       
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TargetTestService.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TargetTestService.java
new file mode 100644 (file)
index 0000000..8f7f815
--- /dev/null
@@ -0,0 +1,15 @@
+package eu.etaxonomy.taxeditor.service;
+
+
+public class TargetTestService {
+       
+       public static String test(String arg) {
+               //String value = testService.test(arg);
+               return "Overridden " + arg;
+       }
+       
+       public static String test(Object arg) {
+               //String value = testService.test(arg);
+               return "Overridden " + arg;
+       }
+}
diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TestService.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/service/TestService.java
new file mode 100644 (file)
index 0000000..ab21151
--- /dev/null
@@ -0,0 +1,20 @@
+package eu.etaxonomy.taxeditor.service;
+
+public class TestService implements ITestService {
+
+       @Override
+       public String test(String arg) {
+               return "String : " + arg;
+       }
+
+       @Override
+       public String test(Object arg) {
+               return "Object : " + arg.toString();
+       }
+
+       @Override
+       public String notest() {                
+               return "No Test";
+       }
+
+}
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 (file)
index 0000000..92c00fe
--- /dev/null
@@ -0,0 +1,106 @@
+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.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+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.BaseRemotingTest;
+import eu.etaxonomy.taxeditor.httpinvoker.CDMServer;
+
+public class CdmEntitySessionManagerTest extends BaseRemotingTest {
+
+       private static final Logger logger = Logger.getLogger(CdmEntitySessionManagerTest.class);
+
+       private ICdmEntitySessionEnabled sessionOwner;
+       private final ICdmEntitySessionManager cdmEntitySessionManager = getRemoteApplicationController().getCdmEntitySessionManager();
+       IPolytomousKeyService polytomousKeyService = getRemoteApplicationController().getPolytomousKeyService();
+
+       private final UUID polytomousKeyUuid = UUID.fromString("0d53ba20-7de4-4baa-bd8a-401048447d66");
+       private final Language english = Language.getLanguageFromUuid(Language.uuidEnglish);
+
+       private ICdmEntitySession cdmEntitySession;
+
+       @BeforeClass
+       public static void initializeCdmEntitySessionManagerTest() {
+               CDMServer.getInstance().setKeepServerRunning(true);
+               //initializeController("default", "127.0.0.1", 8080, "", NomenclaturalCode.ICNAFP);
+       }
+
+       @Before
+       public void initializeSession() {
+               sessionOwner = new MockSessionOwner();
+               cdmEntitySession = cdmEntitySessionManager.newSession(sessionOwner, true);
+       }
+
+       @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());
+               List<CdmBase> rootEntities = (List<CdmBase>)getFieldValueViaReflection(getActiveSession(), "rootEntities");
+
+               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);
+
+               sessionOwner = new MockSessionOwner();
+               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<PolytomousKey> pKeys = polytomousKeyService.list(PolytomousKey.class, null, null, null, null);
+               Assert.assertNotNull(getActiveSession());
+               List<CdmBase> rootEntities = (List<CdmBase>)getFieldValueViaReflection(getActiveSession(), "rootEntities");
+
+               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));
+
+               sessionOwner = new MockSessionOwner();
+               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 (file)
index 0000000..983329f
--- /dev/null
@@ -0,0 +1,45 @@
+package eu.etaxonomy.taxeditor.session;
+
+import java.util.List;
+
+import eu.etaxonomy.cdm.model.common.CdmBase;
+import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
+import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySession;
+
+public class MockSessionOwner<T extends CdmBase> implements ICdmEntitySessionEnabled {
+
+    List<T> rootEntities;
+
+
+    public MockSessionOwner() {
+        rootEntities = null;
+    }
+
+    public MockSessionOwner(List<T> rootEntities) {
+        this.rootEntities = rootEntities;
+    }
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
+     */
+    @Override
+    public void update(CdmDataChangeMap arg0) {
+
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getCdmEntitySession()
+     */
+    @Override
+    public ICdmEntitySession getCdmEntitySession() {
+        return new MockCdmEntitySession();
+    }
+
+    /* (non-Javadoc)
+     * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled#getRootEntities()
+     */
+    @Override
+    public  List<T> getRootEntities() {
+        return rootEntities;
+    }
+
+}
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 (file)
index 0000000..15dd69b
--- /dev/null
@@ -0,0 +1,63 @@
+// $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.Test;
+import org.unitils.UnitilsJUnit4;
+
+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<CdmServerInfo> servers = CdmServerInfo.getCdmServers();
+        for(CdmServerInfo server : servers) {
+            server.pingServer();
+        }
+    }
+
+    @Test
+    public void pingInstancesTest() {
+        CdmServerInfo csii = new CdmServerInfo("localhost", "localhost", 8080);
+        try {
+            csii.refreshInstances();
+            List<CdmInstanceInfo> instances = csii.getInstances();
+            for(CdmInstanceInfo instance : instances) {
+                Assert.assertTrue(csii.pingInstance(instance));
+            }
+        } 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<CdmInstanceInfo> instances = wrongCsii.getInstances();
+            Assert.fail("Execption should be thrown here");
+        } catch (CDMServerException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+    }
+}