Project

General

Profile

Download (5.84 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
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
61
            IProgressMonitor progressMonitor,
62
            List<ApplicationListener> listeners) {
63

    
64
        return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
65
                remoteSource,
66
                false,
67
                progressMonitor,
68
                listeners);
69
    }
70

    
71
    public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
72
            boolean validateXml,
73
            IProgressMonitor progressMonitor,
74
            List<ApplicationListener> listeners) {
75

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

    
83
    /**
84
     * Constructs CdmApplicationRemoteController
85
     */
86
    private CdmApplicationRemoteController(Resource applicationContextResource,
87
            ICdmRemoteSource remoteSource,
88
            boolean validateXml,
89
            IProgressMonitor progressMonitor,
90
            List<ApplicationListener> listeners){
91
        logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName());
92
        this.applicationContextResource =
93
                applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
94
        this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
95
        this.remoteSource = remoteSource;
96
        setNewRemoteSource(remoteSource, validateXml, listeners);
97

    
98
    }
99

    
100
    /**
101
     * Creates and starts a new spring application context
102
     *
103
     * @param remoteSource object for connecting to an http-invoker server
104
     * @param omitTermLoading
105
     * @param listeners
106
     * @return
107
     */
108
    public boolean setNewRemoteSource(ICdmRemoteSource remoteSource,
109
            boolean validateXml,
110
            List<ApplicationListener> listeners){
111

    
112
        logger.info("Connecting to '" + remoteSource.getName() + "'");
113

    
114
        int nTasks = 2;
115

    
116
        progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
117

    
118
        progressMonitor.subTask("Initialising CDM Model Cache ...");
119
        CdmRemoteCacheManager.getInstance();
120
        CdmRemoteCacheManager.removeEntityCaches();
121
        progressMonitor.worked(1);
122
        progressMonitor.subTask("Starting application context ...");
123
        init();
124
        progressMonitor.worked(1);
125
        progressMonitor.done();
126
        return true;
127
    }
128

    
129
    @Override
130
    protected void init(){
131
        configuration = new CdmApplicationRemoteConfiguration(remoteSource);
132
        AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
133
        AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
134
    }
135

    
136
    public ICdmEntitySessionManager getCdmEntitySessionManager() {
137
        return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
138
    }
139

    
140
    public IIOService getIOService(){
141
        return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
142
    }
143

    
144
    public ITestService getTestService(){
145
        return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
146
    }
147

    
148
    public ICachedCommonService getCachedCommonService(){
149
        return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
150
    }
151

    
152
    public IEditGeoService getEditGeoService() {
153
        return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService();
154
    }
155
}
(3-3/8)