Project

General

Profile

Download (6.49 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2014 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.cdm.api.application;
10

    
11
import java.util.List;
12

    
13
import org.apache.logging.log4j.LogManager;
14
import org.apache.logging.log4j.Logger;
15
import org.hibernate.collection.internal.AbstractPersistentCollection;
16
import org.hibernate.proxy.AbstractLazyInitializer;
17
import org.springframework.context.ApplicationListener;
18
import org.springframework.core.io.ClassPathResource;
19
import org.springframework.core.io.Resource;
20

    
21
import eu.etaxonomy.cdm.api.service.ITestService;
22
import eu.etaxonomy.cdm.cache.CdmRemoteCacheManager;
23
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
24
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
25
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
26
import eu.etaxonomy.cdm.io.service.IIOService;
27
import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
28
import eu.etaxonomy.taxeditor.service.ICachedCommonService;
29
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
30

    
31
/**
32
 * CDM Application Controller class for remoting clients
33
 *
34
 * FIXME:Remoting extending {@link CdmApplicationController} is a temporary workaround.
35
 * The {@link CdmApplicationController} should be split into a CdmApplicationControllerBase
36
 * class with {@link CdmApplicationController} and this class as subclasses
37
 */
38
public class CdmApplicationRemoteController extends CdmApplicationControllerBase {
39

    
40
    private static final Logger logger = LogManager.getLogger();
41

    
42
    public static final Resource DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE =
43
            new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml");
44
    private final Resource applicationContextResource;
45
    private final IProgressMonitor progressMonitor;
46
    private final ICdmRemoteSource remoteSource;
47

    
48
//    public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource,
49
//            ICdmRemoteSource remoteSource,
50
//            IProgressMonitor progressMonitor,
51
//            List<ApplicationListener> listeners) {
52
//        return new CdmApplicationRemoteController(applicationContextResource,
53
//                remoteSource,
54
//                false,
55
//                progressMonitor,
56
//                listeners);
57
//
58
//    }
59

    
60
    /**
61
     * Creates new instance of CdmApplicationRemoteController
62
     *
63
     * @param applicationContextResource
64
     * @param remoteSource
65
     * @param omitTermLoading
66
     * @param progressMonitor
67
     * @param listeners
68
     * @return
69
     */
70
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
71
            IProgressMonitor progressMonitor,
72
            List<ApplicationListener> listeners) {
73

    
74
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
75
                remoteSource,
76
                false,
77
                progressMonitor,
78
                listeners);
79
    }
80

    
81
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
82
            boolean validateXml,
83
            IProgressMonitor progressMonitor,
84
            List<ApplicationListener> listeners) {
85

    
86
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
87
                remoteSource,
88
                validateXml,
89
                progressMonitor,
90
                listeners);
91
    }
92

    
93
    /**
94
     * Constructs CdmApplicationRemoteController
95
     *
96
     * @param applicationContextResource
97
     * @param remoteSource
98
     * @param omitTermLoading
99
     * @param progressMonitor
100
     * @param listeners
101
     */
102
    private CdmApplicationRemoteController(Resource applicationContextResource,
103
            ICdmRemoteSource remoteSource,
104
            boolean validateXml,
105
            IProgressMonitor progressMonitor,
106
            List<ApplicationListener> listeners){
107
        logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName());
108
        this.applicationContextResource =
109
                applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
110
        this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
111
        this.remoteSource = remoteSource;
112
        setNewRemoteSource(remoteSource, validateXml, listeners);
113

    
114
    }
115

    
116
    /**
117
     * Creates and starts a new spring application context
118
     *
119
     * @param remoteSource object for connecting to an http-invoker server
120
     * @param omitTermLoading
121
     * @param listeners
122
     * @return
123
     */
124
    public boolean setNewRemoteSource(ICdmRemoteSource remoteSource,
125
            boolean validateXml,
126
            List<ApplicationListener> listeners){
127

    
128
        logger.info("Connecting to '" + remoteSource.getName() + "'");
129

    
130
        int nTasks = 2;
131

    
132
        progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
133

    
134
        progressMonitor.subTask("Initialising CDM Model Cache ...");
135
        CdmRemoteCacheManager.getInstance();
136
        CdmRemoteCacheManager.removeEntityCaches();
137
        progressMonitor.worked(1);
138
        progressMonitor.subTask("Starting application context ...");
139
        init();
140
        progressMonitor.worked(1);
141
        progressMonitor.done();
142
        return true;
143
    }
144

    
145
    @Override
146
    protected void init(){
147
        configuration = new CdmApplicationRemoteConfiguration(remoteSource);
148
        ((CdmApplicationRemoteConfiguration)configuration).setApplicationContext(applicationContext);
149
        AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
150
        AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
151
    }
152

    
153
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
154
        return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
155
    }
156

    
157
    public IIOService getIOService(){
158
        return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
159
    }
160

    
161
    public ITestService getTestService(){
162
        return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
163
    }
164

    
165
    public ICachedCommonService getCachedCommonService(){
166
        return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
167
    }
168

    
169
    public IEditGeoService getEditGeoService() {
170
        return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService();
171
    }
172
}
(3-3/8)