2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.store
;
12 import java
.util
.EnumSet
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.core
.runtime
.jobs
.Job
;
16 import org
.eclipse
.swt
.widgets
.Display
;
17 import org
.springframework
.core
.io
.ClassPathResource
;
18 import org
.springframework
.core
.io
.Resource
;
19 import org
.springframework
.security
.access
.PermissionEvaluator
;
20 import org
.springframework
.security
.authentication
.AuthenticationManager
;
21 import org
.springframework
.security
.core
.Authentication
;
22 import org
.springframework
.security
.core
.GrantedAuthority
;
23 import org
.springframework
.security
.core
.context
.SecurityContext
;
24 import org
.springframework
.security
.core
.context
.SecurityContextHolder
;
26 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationException
;
27 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationRemoteController
;
28 import eu
.etaxonomy
.cdm
.api
.application
.CdmApplicationState
;
29 import eu
.etaxonomy
.cdm
.api
.application
.ICdmRepository
;
30 import eu
.etaxonomy
.cdm
.api
.cache
.CdmServiceCacher
;
31 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
32 import eu
.etaxonomy
.cdm
.api
.service
.IAgentService
;
33 import eu
.etaxonomy
.cdm
.api
.service
.IAnnotationService
;
34 import eu
.etaxonomy
.cdm
.api
.service
.IClassificationService
;
35 import eu
.etaxonomy
.cdm
.api
.service
.ICollectionService
;
36 import eu
.etaxonomy
.cdm
.api
.service
.ICommonService
;
37 import eu
.etaxonomy
.cdm
.api
.service
.IDescriptionService
;
38 import eu
.etaxonomy
.cdm
.api
.service
.IEntityConstraintViolationService
;
39 import eu
.etaxonomy
.cdm
.api
.service
.IEntityValidationService
;
40 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureNodeService
;
41 import eu
.etaxonomy
.cdm
.api
.service
.IFeatureTreeService
;
42 import eu
.etaxonomy
.cdm
.api
.service
.IGrantedAuthorityService
;
43 import eu
.etaxonomy
.cdm
.api
.service
.IGroupService
;
44 import eu
.etaxonomy
.cdm
.api
.service
.IMarkerService
;
45 import eu
.etaxonomy
.cdm
.api
.service
.IMediaService
;
46 import eu
.etaxonomy
.cdm
.api
.service
.INameService
;
47 import eu
.etaxonomy
.cdm
.api
.service
.IOccurrenceService
;
48 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyNodeService
;
49 import eu
.etaxonomy
.cdm
.api
.service
.IPolytomousKeyService
;
50 import eu
.etaxonomy
.cdm
.api
.service
.IPreferenceService
;
51 import eu
.etaxonomy
.cdm
.api
.service
.IReferenceService
;
52 import eu
.etaxonomy
.cdm
.api
.service
.IRegistrationService
;
53 import eu
.etaxonomy
.cdm
.api
.service
.IRightsService
;
54 import eu
.etaxonomy
.cdm
.api
.service
.IService
;
55 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
56 import eu
.etaxonomy
.cdm
.api
.service
.ITermService
;
57 import eu
.etaxonomy
.cdm
.api
.service
.IUserService
;
58 import eu
.etaxonomy
.cdm
.api
.service
.IVocabularyService
;
59 import eu
.etaxonomy
.cdm
.api
.service
.IWorkingSetService
;
60 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.IAmplificationService
;
61 import eu
.etaxonomy
.cdm
.api
.service
.molecular
.IPrimerService
;
62 import eu
.etaxonomy
.cdm
.api
.service
.statistics
.Statistics
;
63 import eu
.etaxonomy
.cdm
.config
.ICdmSource
;
64 import eu
.etaxonomy
.cdm
.database
.DbSchemaValidation
;
65 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
66 import eu
.etaxonomy
.cdm
.model
.common
.Annotation
;
67 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
68 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
69 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
70 import eu
.etaxonomy
.cdm
.model
.common
.Group
;
71 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
72 import eu
.etaxonomy
.cdm
.model
.common
.Marker
;
73 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
74 import eu
.etaxonomy
.cdm
.model
.common
.User
;
75 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
76 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
77 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
78 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKey
;
79 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKeyNode
;
80 import eu
.etaxonomy
.cdm
.model
.description
.WorkingSet
;
81 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
82 import eu
.etaxonomy
.cdm
.model
.media
.Rights
;
83 import eu
.etaxonomy
.cdm
.model
.metadata
.CdmPreference
;
84 import eu
.etaxonomy
.cdm
.model
.molecular
.Amplification
;
85 import eu
.etaxonomy
.cdm
.model
.molecular
.Primer
;
86 import eu
.etaxonomy
.cdm
.model
.name
.Registration
;
87 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
88 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
89 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
90 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
91 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
92 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
93 import eu
.etaxonomy
.cdm
.model
.validation
.EntityConstraintViolation
;
94 import eu
.etaxonomy
.cdm
.model
.validation
.EntityValidation
;
95 import eu
.etaxonomy
.cdm
.model
.view
.AuditEvent
;
96 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.permission
.CRUD
;
97 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.permission
.ICdmPermissionEvaluator
;
98 import eu
.etaxonomy
.cdm
.persistence
.hibernate
.permission
.Role
;
99 import eu
.etaxonomy
.taxeditor
.datasource
.CdmDataSourceRepository
;
100 import eu
.etaxonomy
.taxeditor
.io
.ExportManager
;
101 import eu
.etaxonomy
.taxeditor
.io
.ImportManager
;
102 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
103 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
104 import eu
.etaxonomy
.taxeditor
.remoting
.cache
.CdmRemoteCacheManager
;
105 import eu
.etaxonomy
.taxeditor
.session
.ICdmEntitySessionManager
;
106 import eu
.etaxonomy
.taxeditor
.session
.mock
.MockCdmEntitySessionManager
;
107 import eu
.etaxonomy
.taxeditor
.store
.internal
.TaxeditorStorePlugin
;
108 import eu
.etaxonomy
.taxeditor
.ui
.dialog
.RemotingLoginDialog
;
109 import eu
.etaxonomy
.taxeditor
.util
.ProgressMonitorClientManager
;
110 import eu
.etaxonomy
.taxeditor
.webapp
.CDMServer
;
113 * This implementation of ICdmDataRepository depends on hibernate sessions to
114 * store the data correctly for the current session. No state is held in this
117 * Only methods that either get or manipulate data are exposed here. So this
118 * class acts as a facade for the methods in cdmlib-service.
121 * @created 17.03.2009
124 public class CdmStore
{
126 private static final Resource DEFAULT_APPLICATION_CONTEXT
= new ClassPathResource(
127 "/eu/etaxonomy/cdm/editorApplicationContext.xml",
128 TaxeditorStorePlugin
.class);
129 private static final DbSchemaValidation DEFAULT_DB_SCHEMA_VALIDATION
= DbSchemaValidation
.VALIDATE
;
131 private static CdmStore instance
;
133 //private final ICdmRepository applicationConfiguration;
135 private static ContextManager contextManager
= new ContextManager();
137 private static LoginManager loginManager
= new LoginManager();
139 private static TermManager termManager
= new TermManager();
141 private static SearchManager searchManager
= new SearchManager();
143 private static EditorManager editorManager
= new EditorManager();
145 private static UseObjectStore useObjectInitializer
= new UseObjectStore();
147 private static ProgressMonitorClientManager progressMonitorClientManager
= new ProgressMonitorClientManager();
149 private static CdmStoreConnector job
;
151 private static CDMServer managedServer
;
153 private Language language
;
155 private ICdmSource cdmSource
;
157 private boolean isConnected
;
166 * @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
168 protected static CdmStore
getDefault(boolean connecting
){
169 if (instance
!= null && instance
.isConnected
) {
171 } else{// if (instance == null || !instance.isConnected) {
173 MessagingUtils
.dataSourceNotAvailableWarningDialog(instance
);
175 MessagingUtils
.noDataSourceWarningDialog(instance
);
187 * @return a {@link eu.etaxonomy.taxeditor.store.CdmStore} object.
189 protected static CdmStore
getDefault(){
190 return getDefault(false);
194 * Initialize the with the last edited datasource
196 public static void connect() {
198 ICdmSource cdmSource
;
201 cdmSource
= CdmDataSourceRepository
.getCurrentCdmSource();
203 } catch (Exception e
) {
204 MessagingUtils
.messageDialog("Connection to CDM Source Failed", CdmStore
.class, "Could not connect to target CDM Source", e
);
211 * Initialize with a specific datasource
214 * a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
216 public static void connect(ICdmSource cdmSource
) {
217 connect(cdmSource
, DEFAULT_DB_SCHEMA_VALIDATION
,
218 DEFAULT_APPLICATION_CONTEXT
);
221 public static void connect(ICdmSource cdmSource
, RemotingLoginDialog loginDialog
) {
223 DEFAULT_DB_SCHEMA_VALIDATION
,
224 DEFAULT_APPLICATION_CONTEXT
,
229 * Initialize and provide
232 * @param dbSchemaValidation
233 * @param applicationContextBean
235 private static void connect(final ICdmSource cdmSource
,
236 final DbSchemaValidation dbSchemaValidation
,
237 final Resource applicationContextBean
) {
239 MessagingUtils
.info("Connecting to datasource: " + cdmSource
);
241 job
= new CdmStoreConnector(Display
.getDefault(), cdmSource
,
242 dbSchemaValidation
, applicationContextBean
);
244 job
.setPriority(Job
.BUILD
);
249 private static void connect(final ICdmSource cdmSource
,
250 final DbSchemaValidation dbSchemaValidation
,
251 final Resource applicationContextBean
,
252 RemotingLoginDialog remotingLoginDialog
) {
253 RemotingLoginDialog loginDialog
= remotingLoginDialog
;
255 // before we connect we clear the entity caches and the sessions
256 CdmRemoteCacheManager
.removeEntityCaches();
257 if(getCurrentSessionManager(true) != null) {
258 getCurrentSessionManager(true).disposeAll();
261 MessagingUtils
.info("Connecting to datasource: " + cdmSource
);
263 job
= new CdmStoreConnector(Display
.getDefault(),
266 applicationContextBean
);
267 job
.start(loginDialog
);
271 public static boolean isConnecting() {
272 return job
!= null && job
.getState() == Job
.RUNNING
;
276 * Closes the current application context
279 * a {@link org.eclipse.core.runtime.IProgressMonitor} object.
281 public static void close(final IProgressMonitor monitor
) {
282 Display
.getDefault().asyncExec(new Runnable() {
286 getContextManager().notifyContextAboutToStop(monitor
);
287 if ((monitor
== null || (!monitor
.isCanceled()) && isActive())) {
288 getContextManager().notifyContextStop(monitor
);
295 public static void close(IProgressMonitor monitor
, boolean async
) {
299 getContextManager().notifyContextAboutToStop(monitor
);
300 if ((monitor
== null || (!monitor
.isCanceled()) && isActive())) {
301 getContextManager().notifyContextStop(monitor
);
307 private void close() {
310 CdmApplicationState
.dispose();
313 static void setInstance(ICdmRepository applicationController
,
314 ICdmSource cdmSource
) {
315 instance
= new CdmStore(applicationController
, cdmSource
);
316 CdmApplicationState
.setCdmServiceCacher(new CdmServiceCacher());
320 private CdmStore(ICdmRepository repository
,
321 ICdmSource cdmSource
) {
322 CdmApplicationState
.setCurrentAppConfig(repository
);
323 CdmApplicationState
.setCurrentDataChangeService(new CdmUIDataChangeService());
324 this.cdmSource
= cdmSource
;
329 * All calls to the datastore require
333 private ICdmRepository
getApplicationConfiguration() {
335 return CdmApplicationState
.getCurrentAppConfig();
336 } catch (Exception e
) {
337 MessagingUtils
.error(CdmStore
.class, e
);
344 * getCurrentApplicationController
348 * {@link eu.etaxonomy.cdm.remote.api.application.CdmApplicationController}
351 public static ICdmRepository
getCurrentApplicationConfiguration() {
352 if (getDefault() != null) {
353 return getDefault().getApplicationConfiguration();
363 * Creates a new conversation, binds resources to the conversation and start
364 * a transaction for this conversation.
366 * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
369 public static ConversationHolder
createConversation() {
370 ConversationHolder conversation
= getCurrentApplicationConfiguration()
373 conversation
.startTransaction();
375 MessagingUtils
.messageDialog("No database connection", CdmStore
.class, "No database connection available", e
);
380 //FIXME:Remoting should be removed after moving completely to remoting
381 private MockCdmEntitySessionManager mockCdmEntitySessionManager
;
383 private ICdmEntitySessionManager
getSessionManager() {
384 //FIXME:Remoting we should only have CdmApplicationRemoteConfiguration after move to remoting
385 // bad hack which should be finally removed
386 if(getCurrentApplicationConfiguration() instanceof CdmApplicationRemoteController
) {
387 return ((CdmApplicationRemoteController
)getCurrentApplicationConfiguration()).getCdmEntitySessionManager();
389 if(mockCdmEntitySessionManager
== null) {
390 mockCdmEntitySessionManager
= new MockCdmEntitySessionManager();
392 return mockCdmEntitySessionManager
;
395 public static ICdmEntitySessionManager
getCurrentSessionManager() {
396 return getCurrentSessionManager(false);
400 public static ICdmEntitySessionManager
getCurrentSessionManager(boolean connecting
) {
401 if (getDefault(connecting
) != null) {
402 return getDefault(connecting
).getSessionManager();
409 * Generic method that will scan the getters of {@link ICdmRepository} for the given service
410 * interface. If a matching getter is found the according service implementation is returned by
411 * invoking the getter otherwise the method returns <code>null</code>.
414 * @param serviceClass
415 * @return the configured implementation of <code>serviceClass</code> or <code>null</code>
417 public static <T
extends IService
> T
getService(Class
<T
> serviceClass
) {
420 service
= CdmApplicationState
.getService(serviceClass
);
421 } catch (CdmApplicationException cae
) {
422 MessagingUtils
.error(CdmStore
.class, cae
);
429 * @see #getService(Class)
430 * As ICommonService is not extending IService we need a specific request here
432 public static ICommonService
getCommonService() {
433 return CdmApplicationState
.getCommonService();
439 * getAuthenticationManager
443 * {@link org.springframework.security.authentication.ProviderManager}
446 public static AuthenticationManager
getAuthenticationManager() {
447 return getCurrentApplicationConfiguration().getAuthenticationManager();
452 * getAuthenticationManager
456 * {@link ICdmPermissionEvaluator} object.
458 public static ICdmPermissionEvaluator
getPermissionEvaluator() {
459 return getCurrentApplicationConfiguration().getPermissionEvaluator();
464 * SECURITY RELATED CONVENIENCE METHODS
468 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
470 * @param targetDomainObject
474 public static boolean currentAuthentiationHasPermission(CdmBase targetDomainObject
, EnumSet
<CRUD
> permission
){
475 //TODO use getCurrentApplicationConfiguration().currentAuthentiationHasPermission(CdmBase targetDomainObject, Operation permission) instead
476 SecurityContext context
= SecurityContextHolder
.getContext();
477 PermissionEvaluator pe
= getPermissionEvaluator();
478 boolean hasPermission
= false;
480 hasPermission
= getPermissionEvaluator().hasPermission(context
.getAuthentication(), targetDomainObject
,
482 } catch (org
.springframework
.security
.access
.AccessDeniedException e
) {
485 return hasPermission
;
489 * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
491 * @param targetDomainObject
495 public static boolean currentAuthentiationHasPermission(Class
<?
extends CdmBase
> targetType
, EnumSet
<CRUD
> permission
){
496 boolean hasPermission
= false;
498 hasPermission
= getPermissionEvaluator().hasPermission(getCurrentAuthentiation(), null, targetType
.getName(), permission
);
499 } catch (org
.springframework
.security
.access
.AccessDeniedException e
) {
502 return hasPermission
;
505 public static boolean currentAuthentiationHasOneOfRoles(Role
... roles
){
506 boolean hasPermission
= false;
508 hasPermission
= getPermissionEvaluator().hasOneOfRoles(getCurrentAuthentiation(), roles
);
509 } catch (org
.springframework
.security
.access
.AccessDeniedException e
) {
512 return hasPermission
;
515 public static Authentication
getCurrentAuthentiation() {
516 SecurityContext context
= SecurityContextHolder
.getContext();
517 return context
.getAuthentication();
525 * Provides access to the global default language set in the application preferences.
527 * @return a {@link eu.etaxonomy.cdm.model.common.Language} object.
529 public static Language
getDefaultLanguage() {
530 if (getDefault().getLanguage() == null) {
531 getDefault().setLanguage(PreferencesUtil
.getGlobalLanguage());
533 return getDefault().getLanguage();
542 * a {@link eu.etaxonomy.cdm.model.common.Language} object.
544 public static void setDefaultLanguage(Language language
) {
545 getDefault().setLanguage(language
);
549 * @return the language
551 private Language
getLanguage() {
557 * the language to set
559 private void setLanguage(Language language
) {
560 this.language
= language
;
569 * Getter for the field <code>loginManager</code>.
572 * @return a {@link eu.etaxonomy.taxeditor.store.LoginManager} object.
574 public static LoginManager
getLoginManager() {
580 * Getter for the field <code>contextManager</code>.
583 * @return a {@link eu.etaxonomy.taxeditor.store.ContextManager} object.
585 public static ContextManager
getContextManager() {
586 return contextManager
;
589 public static TermManager
getTermManager() {
593 public static SearchManager
getSearchManager() {
594 return searchManager
;
597 public static EditorManager
getEditorManager() {
598 return editorManager
;
601 public static ProgressMonitorClientManager
getProgressMonitorClientManager() {
602 return progressMonitorClientManager
;
606 * IMPORT/EXPORT FACTORIES
611 * Getter for the field <code>importHandler</code>.
614 * @return a {@link eu.etaxonomy.taxeditor.io.ImportManager} object.
616 public static ImportManager
getImportManager() {
617 return ImportManager
.NewInstance(getCurrentApplicationConfiguration());
622 * Getter for the field <code>exportHandler</code>.
625 * @return a {@link eu.etaxonomy.taxeditor.io.ExportManager} object.
627 public static ExportManager
getExportManager() {
628 return ExportManager
.NewInstance(getCurrentApplicationConfiguration());
632 * Whether this CdmStore is currently connected to a datasource
636 public static boolean isActive() {
637 return instance
!= null && instance
.isConnected
;
640 public static ICdmSource
getActiveCdmSource() {
642 return instance
.getCdmSource();
652 * @return a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
653 * @deprecated currently retained for backward compatibility - use {@link getActiveCdmSource()} instead
655 // public static ICdmDataSource getDataSource() {
657 // return (ICdmDataSource)instance.getCdmSource();
665 private ICdmSource
getCdmSource() {
670 public static <T
extends CdmBase
> IService
<T
> getService(T cdmBase
){
671 IService
<T
> service
= null;
673 //get corresponding service
674 if(cdmBase
.isInstanceOf(Reference
.class)){
675 service
= (IService
<T
>) getService(IReferenceService
.class);
677 else if (cdmBase
.isInstanceOf(AgentBase
.class)){
678 service
= (IService
<T
>) getService(IAgentService
.class);
680 else if (cdmBase
instanceof TaxonName
) {
681 service
= (IService
<T
>) getService(INameService
.class);
683 else if (cdmBase
instanceof TaxonBase
) {
684 service
= (IService
<T
>) getService(ITaxonService
.class);
686 else if (cdmBase
instanceof SpecimenOrObservationBase
) {
687 service
= (IService
<T
>) getService(IOccurrenceService
.class);
689 else if (cdmBase
instanceof Media
) {
690 service
= (IService
<T
>) getService(IMediaService
.class);
692 else if (cdmBase
instanceof Collection
) {
693 service
= (IService
<T
>) getService(ICollectionService
.class);
695 else if (cdmBase
instanceof User
) {
696 service
= (IService
<T
>) getService(IUserService
.class);
698 else if (cdmBase
instanceof Group
) {
699 service
= (IService
<T
>) getService(IGroupService
.class);
701 else if (cdmBase
instanceof WorkingSet
) {
702 service
= (IService
<T
>) getService(IWorkingSetService
.class);
704 else if (cdmBase
instanceof TermVocabulary
<?
>) {
705 service
= (IService
<T
>) getService(IVocabularyService
.class);
707 else if (cdmBase
instanceof DefinedTermBase
<?
>) {
708 service
= (IService
<T
>) getService(ITermService
.class);
710 else if (cdmBase
instanceof Primer
) {
711 service
= (IService
<T
>) getService(IPrimerService
.class);
713 else if (cdmBase
instanceof Amplification
) {
714 service
= (IService
<T
>) getService(IAmplificationService
.class);
716 else if (cdmBase
instanceof PolytomousKey
) {
717 service
= (IService
<T
>) getService(IPolytomousKeyService
.class);
719 else if (cdmBase
instanceof PolytomousKeyNode
) {
720 service
= (IService
<T
>) getService(IPolytomousKeyNodeService
.class);
722 else if (cdmBase
instanceof Annotation
) {
723 service
= (IService
<T
>) getService(IAnnotationService
.class);
725 else if (cdmBase
instanceof Classification
) {
726 service
= (IService
<T
>) getService(IClassificationService
.class);
728 else if (cdmBase
instanceof DescriptionBase
<?
>) {
729 service
= (IService
<T
>) getService(IDescriptionService
.class);
731 else if (cdmBase
instanceof EntityConstraintViolation
) {
732 service
= (IService
<T
>) getService(IEntityConstraintViolationService
.class);
734 else if (cdmBase
instanceof EntityValidation
) {
735 service
= (IService
<T
>) getService(IEntityValidationService
.class);
737 else if (cdmBase
instanceof FeatureNode
) {
738 service
= (IService
<T
>) getService(IFeatureNodeService
.class);
740 else if (cdmBase
instanceof FeatureTree
) {
741 service
= (IService
<T
>) getService(IFeatureTreeService
.class);
743 else if (cdmBase
instanceof GrantedAuthority
) {
744 service
= (IService
<T
>) getService(IGrantedAuthorityService
.class);
746 else if (cdmBase
instanceof Marker
) {
747 service
= (IService
<T
>) getService(IMarkerService
.class);
749 else if (cdmBase
instanceof Registration
) {
750 service
= (IService
<T
>) getService(IRegistrationService
.class);
752 else if (cdmBase
instanceof Rights
) {
753 service
= (IService
<T
>) getService(IRightsService
.class);
755 // else if (cdmBase instanceof AuditEvent) {
756 // service = (IService<T>) getService(IAuditEventService.class);
758 // else if (cdmBase instanceof CdmPreference) {
759 // service = (IService<T>) getService(IPreferenceService.class);
762 String message
= "Service for entity of class %s not yet implemented in TaxEditor";
763 message
= String
.format(message
, cdmBase
.getClass().getSimpleName());
764 throw new RuntimeException(message
);
770 public static void setManagedServer(CDMServer server
) {
771 managedServer
= server
;
774 public static CDMServer
getManagedServer() {
775 return managedServer
;