Project

General

Profile

Download (23.4 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
package eu.etaxonomy.taxeditor.store;
10

    
11
import java.util.EnumSet;
12

    
13
import org.eclipse.core.runtime.IProgressMonitor;
14
import org.eclipse.core.runtime.jobs.Job;
15
import org.eclipse.swt.widgets.Display;
16
import org.slf4j.Marker;
17
import org.springframework.core.io.ClassPathResource;
18
import org.springframework.core.io.Resource;
19
import org.springframework.security.authentication.AuthenticationManager;
20
import org.springframework.security.core.Authentication;
21
import org.springframework.security.core.GrantedAuthority;
22
import org.springframework.security.core.context.SecurityContext;
23
import org.springframework.security.core.context.SecurityContextHolder;
24

    
25
import eu.etaxonomy.cdm.api.application.CdmApplicationException;
26
import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController;
27
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
28
import eu.etaxonomy.cdm.api.application.ICdmRepository;
29
import eu.etaxonomy.cdm.api.cache.CdmServiceCacher;
30
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
31
import eu.etaxonomy.cdm.api.service.IAgentService;
32
import eu.etaxonomy.cdm.api.service.IAnnotationService;
33
import eu.etaxonomy.cdm.api.service.IClassificationService;
34
import eu.etaxonomy.cdm.api.service.ICollectionService;
35
import eu.etaxonomy.cdm.api.service.ICommonService;
36
import eu.etaxonomy.cdm.api.service.IDescriptionService;
37
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
38
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;
39
import eu.etaxonomy.cdm.api.service.IEntityValidationService;
40
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;
41
import eu.etaxonomy.cdm.api.service.IGroupService;
42
import eu.etaxonomy.cdm.api.service.IMarkerService;
43
import eu.etaxonomy.cdm.api.service.IMediaService;
44
import eu.etaxonomy.cdm.api.service.INameService;
45
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
46
import eu.etaxonomy.cdm.api.service.IPolytomousKeyNodeService;
47
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
48
import eu.etaxonomy.cdm.api.service.IReferenceService;
49
import eu.etaxonomy.cdm.api.service.IRegistrationService;
50
import eu.etaxonomy.cdm.api.service.IRightsService;
51
import eu.etaxonomy.cdm.api.service.IService;
52
import eu.etaxonomy.cdm.api.service.ITaxonService;
53
import eu.etaxonomy.cdm.api.service.ITermNodeService;
54
import eu.etaxonomy.cdm.api.service.ITermService;
55
import eu.etaxonomy.cdm.api.service.ITermTreeService;
56
import eu.etaxonomy.cdm.api.service.IUserService;
57
import eu.etaxonomy.cdm.api.service.IVocabularyService;
58
import eu.etaxonomy.cdm.api.service.molecular.IAmplificationService;
59
import eu.etaxonomy.cdm.api.service.molecular.IPrimerService;
60
import  eu.etaxonomy.cdm.cache.CdmRemoteCacheManager;
61
import eu.etaxonomy.cdm.config.ICdmSource;
62
import eu.etaxonomy.cdm.database.DbSchemaValidation;
63
import eu.etaxonomy.cdm.model.agent.AgentBase;
64
import eu.etaxonomy.cdm.model.common.Annotation;
65
import eu.etaxonomy.cdm.model.common.CdmBase;
66
import eu.etaxonomy.cdm.model.common.Language;
67
import eu.etaxonomy.cdm.model.description.DescriptionBase;
68
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
69
import eu.etaxonomy.cdm.model.description.PolytomousKey;
70
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
71
import eu.etaxonomy.cdm.model.media.Media;
72
import eu.etaxonomy.cdm.model.media.Rights;
73
import eu.etaxonomy.cdm.model.molecular.Amplification;
74
import eu.etaxonomy.cdm.model.molecular.Primer;
75
import eu.etaxonomy.cdm.model.name.Registration;
76
import eu.etaxonomy.cdm.model.name.TaxonName;
77
import eu.etaxonomy.cdm.model.occurrence.Collection;
78
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
79
import eu.etaxonomy.cdm.model.permission.CRUD;
80
import eu.etaxonomy.cdm.model.permission.Group;
81
import eu.etaxonomy.cdm.model.reference.Reference;
82
import eu.etaxonomy.cdm.model.taxon.Classification;
83
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
84
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
85
import eu.etaxonomy.cdm.model.term.TermNode;
86
import eu.etaxonomy.cdm.model.term.TermTree;
87
import eu.etaxonomy.cdm.model.term.TermVocabulary;
88
import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;
89
import eu.etaxonomy.cdm.model.validation.EntityValidation;
90
import eu.etaxonomy.cdm.persistence.permission.ICdmPermissionEvaluator;
91
import eu.etaxonomy.cdm.persistence.permission.Role;
92
import eu.etaxonomy.taxeditor.io.ExportManager;
93
import eu.etaxonomy.taxeditor.io.ImportManager;
94
import eu.etaxonomy.taxeditor.model.MessagingUtils;
95
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
96
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
97
import eu.etaxonomy.taxeditor.store.internal.TaxeditorStorePlugin;
98
import eu.etaxonomy.taxeditor.ui.dialog.RemotingLoginDialog;
99
import eu.etaxonomy.taxeditor.util.ProgressMonitorClientManager;
100

    
101
/**
102
 * This implementation of ICdmDataRepository depends on hibernate sessions to
103
 * store the data correctly for the current session. No state is held in this
104
 * class.
105
 *
106
 * Only methods that either get or manipulate data are exposed here. So this
107
 * class acts as a facade for the methods in cdmlib-service.
108
 *
109
 * NOTE by AM: TODO this description is outdated since we use remoting now.
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 Language language;
139

    
140
    private ICdmSource cdmSource;
141

    
142
    private boolean isConnected;
143

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

    
157
    protected static CdmStore getDefault(){
158
       return getDefault(false);
159
    }
160

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

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

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

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

    
205
        MessagingUtils.info("Connecting to datasource: " + cdmSource);
206

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

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

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

    
234
    }
235

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

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

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

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

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

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

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

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

    
306
    public static CdmApplicationRemoteController getCurrentApplicationConfiguration() {
307
        CdmStore defaultStore = getDefault();
308
        if (defaultStore != null) {
309
            return defaultStore.getApplicationConfiguration();
310
        }
311
        return null;
312
    }
313

    
314
    /*
315
     * CONVERSATIONS
316
     */
317

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

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

    
339
    private ICdmEntitySessionManager getSessionManager() {
340
        return getCurrentApplicationConfiguration().getCdmEntitySessionManager();
341
    }
342
    public static ICdmEntitySessionManager getCurrentSessionManager() {
343
        return getCurrentSessionManager(false);
344
    }
345

    
346
    public static  ICdmEntitySessionManager getCurrentSessionManager(boolean connecting) {
347
        CdmStore cdmStore = getDefault(connecting);
348
        if (cdmStore != null) {
349
            return cdmStore.getSessionManager();
350
        }
351
        return null;
352
    }
353

    
354
    /**
355
     * Generic method that will scan the getters of {@link ICdmRepository} for the given service
356
     * interface. If a matching getter is found the according service implementation is returned by
357
     * invoking the getter otherwise the method returns <code>null</code>.
358
     *
359
     * @param <T>
360
     * @param serviceClass
361
     * @return the configured implementation of <code>serviceClass</code> or <code>null</code>
362
     */
363
    public static <T extends IService> T getService(Class<T> serviceClass) {
364
        T service = null;
365
        try {
366
            service = CdmApplicationState.getService(serviceClass);
367
        } catch (CdmApplicationException cae) {
368
            MessagingUtils.error(CdmStore.class, cae);
369
        }
370

    
371
        return service;
372
    }
373

    
374
    /**
375
     * @see #getService(Class)
376
     * As ICommonService is not extending IService we need a specific request here
377
     */
378
    public static ICommonService getCommonService() {
379
        return CdmApplicationState.getCommonService();
380
    }
381

    
382
    public static AuthenticationManager getAuthenticationManager() {
383
        return getCurrentApplicationConfiguration().getAuthenticationManager();
384
    }
385

    
386
    public static ICdmPermissionEvaluator getPermissionEvaluator() {
387
        return getCurrentApplicationConfiguration().getPermissionEvaluator();
388
    }
389

    
390
    /*
391
     * SECURITY RELATED CONVENIENCE METHODS
392
     */
393

    
394
    /**
395
     * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
396
     *
397
     * @param targetDomainObject
398
     * @param permission
399
     * @return
400
     */
401
    public static boolean currentAuthentiationHasPermission(CdmBase targetDomainObject, EnumSet<CRUD> permission){
402
        //TODO use getCurrentApplicationConfiguration().currentAuthentiationHasPermission(CdmBase targetDomainObject, Operation permission) instead
403
        SecurityContext context = SecurityContextHolder.getContext();
404
        boolean hasPermission = false;
405
        try {
406
            hasPermission = getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject,
407
                    permission);
408
        } catch (org.springframework.security.access.AccessDeniedException e) {
409
            /* IGNORE */
410
        }
411
        return hasPermission;
412
    }
413

    
414
    /**
415
     * @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication, java.lang.Object, java.lang.Object)
416
     *
417
     * @param targetDomainObject
418
     * @param permission
419
     * @return
420
     */
421
    public static boolean currentAuthentiationHasPermission(Class<? extends CdmBase> targetType, EnumSet<CRUD> permission){
422
        boolean hasPermission = false;
423
        try {
424
            hasPermission = getPermissionEvaluator().hasPermission(getCurrentAuthentiation(), null, targetType.getName(), permission);
425
        } catch (org.springframework.security.access.AccessDeniedException e) {
426
            /* IGNORE */
427
        }
428
        return hasPermission;
429
    }
430

    
431
    public static boolean currentAuthentiationHasOneOfRoles(Role ... roles){
432
        boolean hasPermission = false;
433
        try {
434
            hasPermission =  getPermissionEvaluator().hasOneOfRoles(getCurrentAuthentiation(), roles);
435
        } catch (org.springframework.security.access.AccessDeniedException e) {
436
            /* IGNORE */
437
        }
438
        return hasPermission;
439
    }
440

    
441
    public static Authentication getCurrentAuthentiation() {
442
        SecurityContext context = SecurityContextHolder.getContext();
443
        return context.getAuthentication();
444
    }
445

    
446
    /*
447
     * LANGUAGE
448
     */
449

    
450
    /**
451
     * Provides access to the global default language set in the application preferences.
452
     *
453
     * @return a {@link eu.etaxonomy.cdm.model.common.Language} object.
454
     */
455
    public static Language getDefaultLanguage() {
456
        if (getDefault().getLanguage() == null) {
457
            getDefault().setLanguage(PreferencesUtil.getPreferredDefaultLanguage());
458
        }
459
        return getDefault().getLanguage();
460
    }
461

    
462
    public static void setDefaultLanguage(Language language) {
463
        getDefault().setLanguage(language);
464
    }
465

    
466
    private Language getLanguage() {
467
        return language;
468
    }
469

    
470
    private void setLanguage(Language language) {
471
        this.language = language;
472
    }
473

    
474
    /*
475
     * LOGIN
476
     */
477

    
478
    public static LoginManager getLoginManager() {
479
        return loginManager;
480
    }
481

    
482
    public static ContextManager getContextManager() {
483
        return contextManager;
484
    }
485

    
486
    public static TermManager getTermManager() {
487
        return termManager;
488
    }
489

    
490
    public static SearchManager getSearchManager() {
491
        return searchManager;
492
    }
493

    
494

    
495
    public static ProgressMonitorClientManager getProgressMonitorClientManager() {
496
        return progressMonitorClientManager;
497
    }
498

    
499
    /*
500
     * IMPORT/EXPORT FACTORIES
501
     */
502

    
503
    public static ImportManager getImportManager() {
504
        return ImportManager.NewInstance(getCurrentApplicationConfiguration());
505
    }
506

    
507
    public static ExportManager getExportManager() {
508
        return ExportManager.NewInstance(getCurrentApplicationConfiguration());
509
    }
510

    
511
    /**
512
     * Whether this CdmStore is currently connected to a datasource
513
     *
514
     * @return a boolean.
515
     */
516
    public static boolean isActive() {
517
        return instance != null && instance.isConnected();
518
    }
519

    
520
    public static ICdmSource getActiveCdmSource() {
521
        if (isActive()) {
522
            return instance.getCdmSource();
523
        }
524
        return null;
525
    }
526

    
527
    private ICdmSource getCdmSource() {
528
        return cdmSource;
529
    }
530

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

    
626
    public boolean isConnected() {
627
        return isConnected;
628
    }
629

    
630
    public void setConnected(boolean isConnected) {
631
        this.isConnected = isConnected;
632
    }
633
}
(3-3/13)