Project

General

Profile

Download (6.16 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
public class CdmApplicationRemoteController
35
        extends CdmApplicationControllerBase<ICdmRepository> {
36

    
37
    private static final Logger logger = LogManager.getLogger();
38

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

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

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

    
71
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
72
                remoteSource,
73
                false,
74
                progressMonitor,
75
                listeners);
76
    }
77

    
78
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
79
            boolean validateXml,
80
            IProgressMonitor progressMonitor,
81
            List<ApplicationListener> listeners) {
82

    
83
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
84
                remoteSource,
85
                validateXml,
86
                progressMonitor,
87
                listeners);
88
    }
89

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

    
111
    }
112

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

    
125
        logger.info("Connecting to '" + remoteSource.getName() + "'");
126

    
127
        int nTasks = 2;
128

    
129
        progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
130

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

    
142
    @Override
143
    protected void init(){
144
        configuration = new CdmApplicationRemoteConfiguration(remoteSource);
145
        AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
146
        AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
147
    }
148

    
149
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
150
        return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
151
    }
152

    
153
    public IIOService getIOService(){
154
        return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
155
    }
156

    
157
    public ITestService getTestService(){
158
        return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
159
    }
160

    
161
    public ICachedCommonService getCachedCommonService(){
162
        return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
163
    }
164

    
165
    public IEditGeoService getEditGeoService() {
166
        return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService();
167
    }
168
}
(3-3/8)