Project

General

Profile

Download (6.48 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.cache.CdmRemoteCacheManager;
24
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
25
import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
26
import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
27
import eu.etaxonomy.cdm.io.service.IIOService;
28
import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
29
import eu.etaxonomy.taxeditor.service.ICachedCommonService;
30
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
31

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

    
42
    private static final Logger logger = Logger.getLogger(CdmApplicationRemoteController.class);
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 final ICdmRemoteSource remoteSource;
49

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

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

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

    
82
    }
83

    
84
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
85
            boolean validateXml,
86
            IProgressMonitor progressMonitor,
87
            List<ApplicationListener> listeners) {
88

    
89
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
90
                remoteSource,
91
                validateXml,
92
                progressMonitor,
93
                listeners);
94
    }
95

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

    
117
    }
118

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

    
131
        logger.info("Connecting to '" + remoteSource.getName() + "'");
132

    
133
        int nTasks = 2;
134

    
135
        progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
136

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

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

    
156
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
157
        return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
158
    }
159

    
160
    public IIOService getIOService(){
161
        return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
162
    }
163

    
164
    public ITestService getTestService(){
165
        return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
166
    }
167

    
168
    public ICachedCommonService getCachedCommonService(){
169
        return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
170
    }
171

    
172
    public IEditGeoService getEditGeoService() {
173
        return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService();
174
    }
175
}
(3-3/8)