Project

General

Profile

Download (6.6 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

    
10

    
11
package eu.etaxonomy.cdm.api.application;
12

    
13
import java.util.List;
14

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

    
22
import eu.etaxonomy.cdm.api.service.ITestService;
23
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
24
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
25
import eu.etaxonomy.cdm.io.service.IIOService;
26
import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager;
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
 */
39
public class CdmApplicationRemoteController  extends CdmApplicationController {
40

    
41
    private static final Logger logger = Logger.getLogger(CdmApplicationRemoteController.class);
42

    
43

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

    
50

    
51
    /**
52
     * Creates new instance of CdmApplicationRemoteController
53
     *
54
     * @param applicationContextResource
55
     * @param remoteSource
56
     * @param omitTermLoading
57
     * @param progressMonitor
58
     * @param listeners
59
     * @return
60
     */
61
//    public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource,
62
//            ICdmRemoteSource remoteSource,
63
//            IProgressMonitor progressMonitor,
64
//            List<ApplicationListener> listeners) {
65
//        return new CdmApplicationRemoteController(applicationContextResource,
66
//                remoteSource,
67
//                false,
68
//                progressMonitor,
69
//                listeners);
70
//
71
//    }
72
    /**
73
     * Creates new instance of CdmApplicationRemoteController
74
     *
75
     * @param applicationContextResource
76
     * @param remoteSource
77
     * @param omitTermLoading
78
     * @param progressMonitor
79
     * @param listeners
80
     * @return
81
     */
82
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
83
            IProgressMonitor progressMonitor,
84
            List<ApplicationListener> listeners) {
85

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

    
92
    }
93

    
94
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
95
            boolean validateXml,
96
            IProgressMonitor progressMonitor,
97
            List<ApplicationListener> listeners) {
98

    
99
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
100
                remoteSource,
101
                validateXml,
102
                progressMonitor,
103
                listeners);
104

    
105
    }
106

    
107
    /**
108
     * Constructs CdmApplicationRemoteController
109
     *
110
     * @param applicationContextResource
111
     * @param remoteSource
112
     * @param omitTermLoading
113
     * @param progressMonitor
114
     * @param listeners
115
     */
116
    private CdmApplicationRemoteController(Resource applicationContextResource,
117
            ICdmRemoteSource remoteSource,
118
            boolean validateXml,
119
            IProgressMonitor progressMonitor,
120
            List<ApplicationListener> listeners){
121
        logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName());
122
        this.applicationContextResource =
123
                applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
124
        this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
125
        this.remoteSource = remoteSource;
126
        setNewRemoteSource(remoteSource, validateXml, listeners);
127

    
128
    }
129

    
130

    
131

    
132

    
133
    /**
134
     * Creates and starts a new spring application context
135
     *
136
     * @param remoteSource object for connecting to an http-invoker server
137
     * @param omitTermLoading
138
     * @param listeners
139
     * @return
140
     */
141
    public boolean setNewRemoteSource(ICdmRemoteSource remoteSource,
142
            boolean validateXml,
143
            List<ApplicationListener> listeners){
144

    
145
        logger.info("Connecting to '" + remoteSource.getName() + "'");
146

    
147
        int nTasks = 2;
148

    
149
        progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
150

    
151
        progressMonitor.subTask("Initialising CDM Model Cache ...");
152
        CdmRemoteCacheManager.getInstance();
153
        progressMonitor.worked(1);
154
        progressMonitor.subTask("Starting application context ...");
155
        init();
156
        progressMonitor.worked(1);
157
        progressMonitor.done();
158
        return true;
159
    }
160

    
161

    
162

    
163
    /* (non-Javadoc)
164
     * @see eu.etaxonomy.cdm.api.application.CdmApplicationController#init()
165
     */
166
    @Override
167
    protected void init(){
168
        configuration = new CdmApplicationRemoteConfiguration(remoteSource);
169
        ((CdmApplicationRemoteConfiguration)configuration).setApplicationContext(applicationContext);
170
        AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
171
        AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
172
    }
173

    
174
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
175
        return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
176
    }
177

    
178
    public IIOService getIOService(){
179
        return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
180
    }
181

    
182
    public ITestService getTestService(){
183
        return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
184
    }
185

    
186
    public ICachedCommonService getCachedCommonService(){
187
        return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
188
    }
189
}
(3-3/8)