Project

General

Profile

Download (24 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
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.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.store;
11

    
12
import java.util.EnumSet;
13

    
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.slf4j.Marker;
18
import org.springframework.core.io.ClassPathResource;
19
import org.springframework.core.io.Resource;
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;
25

    
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.IDescriptiveDataSetService;
39
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
40
import eu.etaxonomy.cdm.api.service.IEntityValidationService;
41
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
42
import eu.etaxonomy.cdm.api.service.IGroupService;
43
import eu.etaxonomy.cdm.api.service.IMarkerService;
44
import eu.etaxonomy.cdm.api.service.IMediaService;
45
import eu.etaxonomy.cdm.api.service.INameService;
46
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
47
import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
48
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
49
import eu.etaxonomy.cdm.api.service.IReferenceService;
50
import eu.etaxonomy.cdm.api.service.IRegistrationService;
51
import eu.etaxonomy.cdm.api.service.IRightsService;
52
import eu.etaxonomy.cdm.api.service.IService;
53
import eu.etaxonomy.cdm.api.service.ITaxonService;
54
import eu.etaxonomy.cdm.api.service.ITermNodeService;
55
import eu.etaxonomy.cdm.api.service.ITermService;
56
import eu.etaxonomy.cdm.api.service.ITermTreeService;
57
import eu.etaxonomy.cdm.api.service.IUserService;
58
import eu.etaxonomy.cdm.api.service.IVocabularyService;
59
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
60
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
61
import  eu.etaxonomy.cdm.cache.CdmRemoteCacheManager;
62
import eu.etaxonomy.cdm.config.ICdmSource;
63
import eu.etaxonomy.cdm.database.DbSchemaValidation;
64
import eu.etaxonomy.cdm.model.agent.AgentBase;
65
import eu.etaxonomy.cdm.model.common.Annotation;
66
import eu.etaxonomy.cdm.model.common.CdmBase;
67
import eu.etaxonomy.cdm.model.common.Language;
68
import eu.etaxonomy.cdm.model.description.DescriptionBase;
69
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
70
import eu.etaxonomy.cdm.model.description.PolytomousKey;
71
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
72
import eu.etaxonomy.cdm.model.media.Media;
73
import eu.etaxonomy.cdm.model.media.Rights;
74
import eu.etaxonomy.cdm.model.molecular.Amplification;
75
import eu.etaxonomy.cdm.model.molecular.Primer;
76
import eu.etaxonomy.cdm.model.name.Registration;
77
import eu.etaxonomy.cdm.model.name.TaxonName;
78
import eu.etaxonomy.cdm.model.occurrence.Collection;
79
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
80
import eu.etaxonomy.cdm.model.permission.CRUD;
81
import eu.etaxonomy.cdm.model.permission.Group;
82
import eu.etaxonomy.cdm.model.reference.Reference;
83
import eu.etaxonomy.cdm.model.taxon.Classification;
84
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
85
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
86
import eu.etaxonomy.cdm.model.term.TermNode;
87
import eu.etaxonomy.cdm.model.term.TermTree;
88
import eu.etaxonomy.cdm.model.term.TermVocabulary;
89
import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;
90
import eu.etaxonomy.cdm.model.validation.EntityValidation;
91
import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;
92
import eu.etaxonomy.cdm.persistence.permission.Role;
93
import eu.etaxonomy.taxeditor.io.ExportManager;
94
import eu.etaxonomy.taxeditor.io.ImportManager;
95
import eu.etaxonomy.taxeditor.model.MessagingUtils;
96
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
97
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
98
import eu.etaxonomy.taxeditor.session.mock.MockCdmEntitySessionManager;
99
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
100
import eu.etaxonomy.taxeditor.ui.dialog.RemotingLoginDialog;
101
import eu.etaxonomy.taxeditor.util.ProgressMonitorClientManager;
102

    
103
/**
104
 * This implementation of ICdmDataRepository depends on hibernate sessions to
105
 * store the data correctly for the current session. No state is held in this
106
 * class.
107
 *
108
 * Only methods that either get or manipulate data are exposed here. So this
109
 * class acts as a facade for the methods in cdmlib-service.
110
 *
111
 * @author n.hoffmann
112
 * @created 17.03.2009
113
 */
114
public class CdmStore {
115

    
116
    public static final Resource DEFAULT_APPLICATION_CONTEXT = new ClassPathResource(
117
            "/eu/etaxonomy/cdm/editorApplicationContext.xml",
118
            TaxeditorStorePlugin.class);
119

    
120
    public static final DbSchemaValidation DEFAULT_DB_SCHEMA_VALIDATION = DbSchemaValidation.VALIDATE;
121

    
122
    protected static CdmStore instance;
123

    
124
    private static ContextManager contextManager = new ContextManager();
125

    
126
    private static LoginManager loginManager = new LoginManager();
127

    
128
    private static TermManager termManager = new TermManager();
129

    
130
    private static SearchManager searchManager = new SearchManager();
131

    
132
    private static UseObjectStore useObjectInitializer = new UseObjectStore();
133

    
134
    private static ProgressMonitorClientManager progressMonitorClientManager = new ProgressMonitorClientManager();
135

    
136
    private static CdmStoreConnector job;
137

    
138
//    private static CdmServer managedServer;
139

    
140
    private Language language;
141

    
142
    private ICdmSource cdmSource;
143

    
144
    private boolean isConnected;
145

    
146
    protected static CdmStore getDefault(boolean connecting){
147
        if (instance != null && instance.isConnected()) {
148
            return instance;
149
        } else{// if (instance == null || !instance.isConnected) {
150
            if (connecting){
151
                MessagingUtils.dataSourceNotAvailableWarningDialog(instance);
152
            }else{
153
                MessagingUtils.noDataSourceWarningDialog(instance);
154
            }
155
            return null;
156
        }
157
    }
158

    
159
    protected static CdmStore getDefault(){
160
       return getDefault(false);
161
    }
162

    
163
    /**
164
     * Initialize the with the last edited datasource
165
     * @deprecated this method is not needed anymore after fully changing to remoting.
166
     * Therefore it will be removed
167
     */
168
//    @Deprecated
169
//    public static void connect() {
170
//        try {
171
//            ICdmSource cdmSource = CdmDataSourceRepository.getCurrentCdmSource();
172
//            connect(cdmSource);
173
//        } catch (Exception e) {
174
//            MessagingUtils.messageDialog("Connection to CDM Source Failed", CdmStore.class, "Could not connect to target CDM Source", e);
175
//        }
176
//    }
177

    
178
    /**
179
     * Initialize with a specific datasource
180
     *
181
     * @param datasource
182
     *            a {@link eu.etaxonomy.cdm.database.ICdmDataSource} object.
183
     */
184
    public static void connect(ICdmSource cdmSource) {
185
        connect(cdmSource, DEFAULT_DB_SCHEMA_VALIDATION,
186
                DEFAULT_APPLICATION_CONTEXT);
187
    }
188

    
189
    public static void connect(ICdmSource cdmSource, RemotingLoginDialog loginDialog) {
190
        connect(cdmSource,
191
                DEFAULT_DB_SCHEMA_VALIDATION,
192
                DEFAULT_APPLICATION_CONTEXT,
193
                loginDialog);
194
    }
195

    
196
    /**
197
     * Initialize and provide
198
     *
199
     * @param datasource
200
     * @param dbSchemaValidation
201
     * @param applicationContextBean
202
     */
203
    private static void connect(final ICdmSource cdmSource,
204
            final DbSchemaValidation dbSchemaValidation,
205
            final Resource applicationContextBean) {
206

    
207
        MessagingUtils.info("Connecting to datasource: " + cdmSource);
208

    
209
        job = new CdmStoreConnector(Display.getDefault(), cdmSource,
210
                dbSchemaValidation, applicationContextBean);
211
        job.setUser(true);
212
        job.setPriority(Job.BUILD);
213
        job.schedule();
214
    }
215

    
216
    private static void connect(final ICdmSource cdmSource,
217
            final DbSchemaValidation dbSchemaValidation,
218
            final Resource applicationContextBean,
219
            RemotingLoginDialog remotingLoginDialog) {
220
        RemotingLoginDialog loginDialog = remotingLoginDialog;
221
        if(isActive()) {
222
            // before we connect we clear the entity caches and the sessions
223
           CdmRemoteCacheManager.removeEntityCaches();
224
            if(getCurrentSessionManager(true) != null) {
225
                getCurrentSessionManager(true).disposeAll();
226
            }
227
        }
228
        MessagingUtils.info("Connecting to datasource: " + cdmSource);
229

    
230
        job = new CdmStoreConnector(Display.getDefault(),
231
                cdmSource,
232
                dbSchemaValidation,
233
                applicationContextBean);
234
        job.start(loginDialog);
235

    
236
    }
237

    
238
    public static boolean isConnecting() {
239
        return job != null && job.getState() == Job.RUNNING;
240
    }
241

    
242
    /**
243
     * Closes the current application context
244
     *
245
     * @param monitor
246
     *            a {@link org.eclipse.core.runtime.IProgressMonitor} object.
247
     */
248
    public static void close(final IProgressMonitor monitor) {
249
        Display.getDefault().asyncExec(new Runnable() {
250

    
251
            @Override
252
            public void run() {
253
                getContextManager().notifyContextAboutToStop(monitor);
254
                if ((monitor == null || (!monitor.isCanceled()) && isActive())) {
255
                    getContextManager().notifyContextStop(monitor);
256
                    instance.close();
257
                }
258
            }
259
        });
260
    }
261

    
262
    public static void close(IProgressMonitor monitor, boolean async) {
263
        if(async) {
264
            close(monitor);
265
        } else {
266
            getContextManager().notifyContextAboutToStop(monitor);
267
            if ((monitor == null || (!monitor.isCanceled()) && isActive())) {
268
                getContextManager().notifyContextStop(monitor);
269
                instance.close();
270
            }
271
        }
272
    }
273

    
274
    private void close() {
275
        this.setConnected(false);
276
        this.cdmSource = null;
277
        CdmApplicationState.dispose();
278
    }
279

    
280
    public static void setInstance(ICdmRepository applicationController,
281
            ICdmSource cdmSource) {
282
        instance = new CdmStore(applicationController, cdmSource);
283
        CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher());
284
    }
285

    
286
    protected CdmStore(ICdmRepository repository,
287
            ICdmSource cdmSource) {
288
        CdmApplicationState.setCurrentAppConfig(repository);
289
        CdmApplicationState.setCurrentDataChangeService(new CdmUIDataChangeService());
290
        this.cdmSource = cdmSource;
291
        setConnected(true);
292
    }
293

    
294
    /**
295
     * All calls to the datastore require
296
     *
297
     * @return
298
     */
299
    private ICdmRepository getApplicationConfiguration() {
300
        try {
301
            return CdmApplicationState.getCurrentAppConfig();
302
        } catch (Exception e) {
303
            MessagingUtils.error(CdmStore.class, e);
304
        }
305
        return null;
306
    }
307

    
308
    public static ICdmRepository getCurrentApplicationConfiguration() {
309
        if (getDefault() != null) {
310
            return getDefault().getApplicationConfiguration();
311
        }
312
        return null;
313
    }
314

    
315
    /*
316
     * CONVERSATIONS
317
     */
318

    
319
    /**
320
     * Creates a new conversation, binds resources to the conversation and start
321
     * a transaction for this conversation.
322
     *
323
     * @return a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
324
     *         object.
325
     */
326
    public static ConversationHolder createConversation() {
327
        ConversationHolder conversation = getCurrentApplicationConfiguration()
328
                .NewConversation();
329
        try {
330
            conversation.startTransaction();
331
        }catch(Exception e){
332
            MessagingUtils.messageDialog("No database connection", CdmStore.class, "No database connection available", e);
333
        }
334
        return conversation;
335
    }
336

    
337
    //FIXME:Remoting should be removed after moving completely to remoting
338
    private MockCdmEntitySessionManager mockCdmEntitySessionManager;
339

    
340
    private ICdmEntitySessionManager getSessionManager() {
341
        //FIXME:Remoting we should only have CdmApplicationRemoteConfiguration after move to remoting
342
        //               bad hack which should be finally removed
343
        if(getCurrentApplicationConfiguration() instanceof CdmApplicationRemoteController) {
344
            return ((CdmApplicationRemoteController)getCurrentApplicationConfiguration()).getCdmEntitySessionManager();
345
        } else {
346
            if(mockCdmEntitySessionManager == null) {
347
                mockCdmEntitySessionManager = new MockCdmEntitySessionManager();
348
            }
349
            return mockCdmEntitySessionManager;
350
        }
351
    }
352
    public static ICdmEntitySessionManager getCurrentSessionManager() {
353
        return getCurrentSessionManager(false);
354
    }
355

    
356
    public static  ICdmEntitySessionManager getCurrentSessionManager(boolean connecting) {
357
        CdmStore cdmStore = getDefault(connecting);
358
        if (cdmStore != null) {
359
            return cdmStore.getSessionManager();
360
        }
361
        return null;
362
    }
363

    
364
    /**
365
     * Generic method that will scan the getters of {@link ICdmRepository} for the given service
366
     * interface. If a matching getter is found the according service implementation is returned by
367
     * invoking the getter otherwise the method returns <code>null</code>.
368
     *
369
     * @param <T>
370
     * @param serviceClass
371
     * @return the configured implementation of <code>serviceClass</code> or <code>null</code>
372
     */
373
    public static <T extends IService> T getService(Class<T> serviceClass) {
374
        T service = null;
375
        try {
376
            service = CdmApplicationState.getService(serviceClass);
377
        } catch (CdmApplicationException cae) {
378
            MessagingUtils.error(CdmStore.class, cae);
379
        }
380

    
381
        return service;
382
    }
383

    
384
    /**
385
     * @see #getService(Class)
386
     * As ICommonService is not extending IService we need a specific request here
387
     */
388
    public static ICommonService getCommonService() {
389
        return CdmApplicationState.getCommonService();
390
    }
391

    
392
    public static AuthenticationManager getAuthenticationManager() {
393
        return getCurrentApplicationConfiguration().getAuthenticationManager();
394
    }
395

    
396
    public static ICdmPermissionEvaluator getPermissionEvaluator() {
397
        return getCurrentApplicationConfiguration().getPermissionEvaluator();
398
    }
399

    
400
    /*
401
     * SECURITY RELATED CONVENIENCE METHODS
402
     */
403

    
404
    /**
405
     * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
406
     *
407
     * @param targetDomainObject
408
     * @param permission
409
     * @return
410
     */
411
    public static boolean currentAuthentiationHasPermission(CdmBase targetDomainObject, EnumSet<CRUD> permission){
412
        //TODO use getCurrentApplicationConfiguration().currentAuthentiationHasPermission(CdmBase targetDomainObject, Operation permission) instead
413
        SecurityContext context = SecurityContextHolder.getContext();
414
        boolean hasPermission = false;
415
        try {
416
            hasPermission = getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject,
417
                    permission);
418
        } catch (org.springframework.security.access.AccessDeniedException e) {
419
            /* IGNORE */
420
        }
421
        return hasPermission;
422
    }
423

    
424
    /**
425
     * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
426
     *
427
     * @param targetDomainObject
428
     * @param permission
429
     * @return
430
     */
431
    public static boolean currentAuthentiationHasPermission(Class<? extends CdmBase> targetType, EnumSet<CRUD> permission){
432
        boolean hasPermission = false;
433
        try {
434
            hasPermission = getPermissionEvaluator().hasPermission(getCurrentAuthentiation(), null, targetType.getName(), permission);
435
        } catch (org.springframework.security.access.AccessDeniedException e) {
436
            /* IGNORE */
437
        }
438
        return hasPermission;
439
    }
440

    
441
    public static boolean currentAuthentiationHasOneOfRoles(Role ... roles){
442
        boolean hasPermission = false;
443
        try {
444
            hasPermission =  getPermissionEvaluator().hasOneOfRoles(getCurrentAuthentiation(), roles);
445
        } catch (org.springframework.security.access.AccessDeniedException e) {
446
            /* IGNORE */
447
        }
448
        return hasPermission;
449
    }
450

    
451
    public static Authentication getCurrentAuthentiation() {
452
        SecurityContext context = SecurityContextHolder.getContext();
453
        return context.getAuthentication();
454
    }
455

    
456
    /*
457
     * LANGUAGE
458
     */
459

    
460
    /**
461
     * Provides access to the global default language set in the application preferences.
462
     *
463
     * @return a {@link eu.etaxonomy.cdm.model.common.Language} object.
464
     */
465
    public static Language getDefaultLanguage() {
466
        if (getDefault().getLanguage() == null) {
467
            getDefault().setLanguage(PreferencesUtil.getPreferredDefaultLanguage());
468
        }
469
        return getDefault().getLanguage();
470
    }
471

    
472
    public static void setDefaultLanguage(Language language) {
473
        getDefault().setLanguage(language);
474
    }
475

    
476
    private Language getLanguage() {
477
        return language;
478
    }
479

    
480
    private void setLanguage(Language language) {
481
        this.language = language;
482
    }
483

    
484
    /*
485
     * LOGIN
486
     */
487

    
488
    public static LoginManager getLoginManager() {
489
        return loginManager;
490
    }
491

    
492
    public static ContextManager getContextManager() {
493
        return contextManager;
494
    }
495

    
496
    public static TermManager getTermManager() {
497
        return termManager;
498
    }
499

    
500
    public static SearchManager getSearchManager() {
501
        return searchManager;
502
    }
503

    
504

    
505
    public static ProgressMonitorClientManager getProgressMonitorClientManager() {
506
        return progressMonitorClientManager;
507
    }
508

    
509
    /*
510
     * IMPORT/EXPORT FACTORIES
511
     */
512

    
513
    public static ImportManager getImportManager() {
514
        return ImportManager.NewInstance(getCurrentApplicationConfiguration());
515
    }
516

    
517
    public static ExportManager getExportManager() {
518
        return ExportManager.NewInstance(getCurrentApplicationConfiguration());
519
    }
520

    
521
    /**
522
     * Whether this CdmStore is currently connected to a datasource
523
     *
524
     * @return a boolean.
525
     */
526
    public static boolean isActive() {
527
        return instance != null && instance.isConnected();
528
    }
529

    
530
    public static ICdmSource getActiveCdmSource() {
531
        if (isActive()) {
532
            return instance.getCdmSource();
533
        }
534
        return null;
535
    }
536

    
537
    private ICdmSource getCdmSource() {
538
        return cdmSource;
539
    }
540

    
541
    @SuppressWarnings("unchecked")
542
    public static <T extends CdmBase> IService<T> getService(T cdmBase){
543
        IService<T> service = null;
544
        if(cdmBase!=null){
545
            //get corresponding service
546
            if(cdmBase.isInstanceOf(Reference.class)){
547
                service = (IService<T>) getService(IReferenceService.class);
548
            }
549
            else if (cdmBase.isInstanceOf(AgentBase.class)){
550
                service = (IService<T>) getService(IAgentService.class);
551
            }
552
            else if (cdmBase instanceof TaxonName) {
553
                service = (IService<T>) getService(INameService.class);
554
            }
555
            else if (cdmBase instanceof TaxonBase) {
556
                service = (IService<T>) getService(ITaxonService.class);
557
            }
558
            else if (cdmBase instanceof SpecimenOrObservationBase) {
559
                service = (IService<T>) getService(IOccurrenceService.class);
560
            }
561
            else if (cdmBase instanceof Media) {
562
                service = (IService<T>) getService(IMediaService.class);
563
            }
564
            else if (cdmBase instanceof Collection) {
565
                service = (IService<T>) getService(ICollectionService.class);
566
            }
567
            else if (cdmBase instanceof eu.etaxonomy.cdm.model.permission.User) {
568
                service = (IService<T>) getService(IUserService.class);
569
            }
570
            else if (cdmBase instanceof Group) {
571
            	service = (IService<T>) getService(IGroupService.class);
572
            }
573
            else if (cdmBase instanceof DescriptiveDataSet) {
574
            	service = (IService<T>) getService(IDescriptiveDataSetService.class);
575
            }
576
            else if (cdmBase instanceof TermVocabulary<?>) {
577
            	service = (IService<T>) getService(IVocabularyService.class);
578
            }
579
            else if (cdmBase instanceof DefinedTermBase<?>) {
580
            	service = (IService<T>) getService(ITermService.class);
581
            }
582
            else if (cdmBase instanceof Primer) {
583
                service = (IService<T>) getService(IPrimerService.class);
584
            }
585
            else if (cdmBase instanceof Amplification) {
586
                service = (IService<T>) getService(IAmplificationService.class);
587
            }
588
            else if (cdmBase instanceof PolytomousKey) {
589
                service = (IService<T>) getService(IPolytomousKeyService.class);
590
            }
591
            else if (cdmBase instanceof PolytomousKeyNode) {
592
                service = (IService<T>) getService(IPolytomousKeyNodeService.class);
593
            }
594
            else if (cdmBase instanceof Annotation) {
595
                service = (IService<T>) getService(IAnnotationService.class);
596
            }
597
            else if (cdmBase instanceof Classification) {
598
                service = (IService<T>) getService(IClassificationService.class);
599
            }
600
            else if (cdmBase instanceof DescriptionBase<?>) {
601
                service = (IService<T>) getService(IDescriptionService.class);
602
            }
603
            else if (cdmBase instanceof EntityConstraintViolation) {
604
                service = (IService<T>) getService(IEntityConstraintViolationService.class);
605
            }
606
            else if (cdmBase instanceof EntityValidation) {
607
                service = (IService<T>) getService(IEntityValidationService.class);
608
            }
609
            else if (cdmBase instanceof TermNode) {
610
                service = (IService<T>) getService(ITermNodeService.class);
611
            }
612
            else if (cdmBase instanceof TermTree) {
613
                service = (IService<T>) getService(ITermTreeService.class);
614
            }
615
            else if (cdmBase instanceof GrantedAuthority) {
616
                service = (IService<T>) getService(IGrantedAuthorityService.class);
617
            }
618
            else if (cdmBase instanceof Marker) {
619
                service = (IService<T>) getService(IMarkerService.class);
620
            }
621
            else if (cdmBase instanceof Registration) {
622
                service = (IService<T>) getService(IRegistrationService.class);
623
            }
624
            else if (cdmBase instanceof Rights) {
625
                service = (IService<T>) getService(IRightsService.class);
626
            }
627
            else{
628
            	String message = "Service for entity of class %s not yet implemented in TaxEditor";
629
            	message = String.format(message, cdmBase.getClass().getSimpleName());
630
            	throw new RuntimeException(message);
631
            }
632
        }
633
        return service;
634
    }
635

    
636
//
637
//    public static void setManagedServer(ICdmServer server) {
638
//        managedServer = server;
639
//    }
640
//
641
//    public static ICdmServer getManagedServer() {
642
//        return managedServer;
643

    
644
    public boolean isConnected() {
645
        return isConnected;
646
    }
647

    
648
    public void setConnected(boolean isConnected) {
649
        this.isConnected = isConnected;
650

    
651
    }
652

    
653

    
654
}
(3-3/13)