minor
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / cdm / api / application / CdmApplicationRemoteController.java
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.longrunningService.ILongRunningTasksService;
23 import eu.etaxonomy.cdm.api.service.ITestService;
24 import eu.etaxonomy.cdm.cache.CdmRemoteCacheManager;
25 import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
26 import eu.etaxonomy.cdm.common.monitor.NullProgressMonitor;
27 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;
28 import eu.etaxonomy.cdm.io.service.IIOService;
29 import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource;
30 import eu.etaxonomy.taxeditor.service.ICachedCommonService;
31 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
32
33 /**
34 * CDM Application Controller class for remoting clients
35 *
36 * FIXME:Remoting extending {@link CdmApplicationController} is a temporary workaround.
37 * The {@link CdmApplicationController} should be split into a CdmApplicationControllerBase
38 * class with {@link CdmApplicationController} and this class as subclasses
39 *
40 */
41 public class CdmApplicationRemoteController extends CdmApplicationController {
42
43 private static final Logger logger = Logger.getLogger(CdmApplicationRemoteController.class);
44
45
46 public static final Resource DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE =
47 new ClassPathResource("/eu/etaxonomy/cdm/remotingApplicationContext.xml");
48 private final Resource applicationContextResource;
49 private final IProgressMonitor progressMonitor;
50 private final ICdmRemoteSource remoteSource;
51
52
53 /**
54 * Creates new instance of CdmApplicationRemoteController
55 *
56 * @param applicationContextResource
57 * @param remoteSource
58 * @param omitTermLoading
59 * @param progressMonitor
60 * @param listeners
61 * @return
62 */
63 // public static CdmApplicationRemoteController NewInstance(Resource applicationContextResource,
64 // ICdmRemoteSource remoteSource,
65 // IProgressMonitor progressMonitor,
66 // List<ApplicationListener> listeners) {
67 // return new CdmApplicationRemoteController(applicationContextResource,
68 // remoteSource,
69 // false,
70 // progressMonitor,
71 // listeners);
72 //
73 // }
74 /**
75 * Creates new instance of CdmApplicationRemoteController
76 *
77 * @param applicationContextResource
78 * @param remoteSource
79 * @param omitTermLoading
80 * @param progressMonitor
81 * @param listeners
82 * @return
83 */
84 public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
85 IProgressMonitor progressMonitor,
86 List<ApplicationListener> listeners) {
87
88 return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
89 remoteSource,
90 false,
91 progressMonitor,
92 listeners);
93
94 }
95
96 public static CdmApplicationRemoteController NewInstance(ICdmRemoteSource remoteSource,
97 boolean validateXml,
98 IProgressMonitor progressMonitor,
99 List<ApplicationListener> listeners) {
100
101 return new CdmApplicationRemoteController(DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE,
102 remoteSource,
103 validateXml,
104 progressMonitor,
105 listeners);
106
107 }
108
109 /**
110 * Constructs CdmApplicationRemoteController
111 *
112 * @param applicationContextResource
113 * @param remoteSource
114 * @param omitTermLoading
115 * @param progressMonitor
116 * @param listeners
117 */
118 private CdmApplicationRemoteController(Resource applicationContextResource,
119 ICdmRemoteSource remoteSource,
120 boolean validateXml,
121 IProgressMonitor progressMonitor,
122 List<ApplicationListener> listeners){
123 logger.info("Start CdmApplicationRemoteController with remote source: " + remoteSource.getName());
124 this.applicationContextResource =
125 applicationContextResource != null ? applicationContextResource : DEFAULT_REMOTE_APPLICATION_CONTEXT_RESOURCE;
126 this.progressMonitor = progressMonitor != null ? progressMonitor : new NullProgressMonitor();
127 this.remoteSource = remoteSource;
128 setNewRemoteSource(remoteSource, validateXml, listeners);
129
130 }
131
132
133
134
135 /**
136 * Creates and starts a new spring application context
137 *
138 * @param remoteSource object for connecting to an http-invoker server
139 * @param omitTermLoading
140 * @param listeners
141 * @return
142 */
143 public boolean setNewRemoteSource(ICdmRemoteSource remoteSource,
144 boolean validateXml,
145 List<ApplicationListener> listeners){
146
147 logger.info("Connecting to '" + remoteSource.getName() + "'");
148
149 int nTasks = 2;
150
151 progressMonitor.beginTask("Connecting to '" + remoteSource.getName() + "'", nTasks);
152
153 progressMonitor.subTask("Initialising CDM Model Cache ...");
154 CdmRemoteCacheManager.getInstance();
155 CdmRemoteCacheManager.removeEntityCaches();
156 progressMonitor.worked(1);
157 progressMonitor.subTask("Starting application context ...");
158 init();
159 progressMonitor.worked(1);
160 progressMonitor.done();
161 return true;
162 }
163
164 @Override
165 protected void init(){
166 configuration = new CdmApplicationRemoteConfiguration(remoteSource);
167 ((CdmApplicationRemoteConfiguration)configuration).setApplicationContext(applicationContext);
168 AbstractLazyInitializer.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
169 AbstractPersistentCollection.setConfiguration((CdmApplicationRemoteConfiguration)configuration);
170 }
171
172 public ICdmEntitySessionManager getCdmEntitySessionManager() {
173 return ((CdmApplicationRemoteConfiguration)configuration).getCdmEntitySessionManager();
174 }
175
176 public IIOService getIOService(){
177 return ((CdmApplicationRemoteConfiguration)configuration).getIOService();
178 }
179
180 public ILongRunningTasksService getLongRunningTasksService(){
181 return ((CdmApplicationRemoteConfiguration)configuration).getLongRunningTasksService();
182 }
183
184 public ITestService getTestService(){
185 return ((CdmApplicationRemoteConfiguration)configuration).getTestService();
186 }
187
188 public ICachedCommonService getCachedCommonService(){
189 return ((CdmApplicationRemoteConfiguration)configuration).getCachedCommonService();
190 }
191
192 public IEditGeoService getEditGeoService() {
193 return ((CdmApplicationRemoteConfiguration)configuration).getEditGeoService();
194 }
195 }