Revision daf5d5b4
Added by Andreas Kohlbecker over 6 years ago
src/main/java/eu/etaxonomy/vaadin/mvp/AbstractEditorPresenter.java | ||
---|---|---|
13 | 13 |
import org.springframework.context.ApplicationEventPublisher; |
14 | 14 |
import org.springframework.context.event.EventListener; |
15 | 15 |
|
16 |
import com.vaadin.server.ServletPortletHelper; |
|
17 |
import com.vaadin.server.VaadinRequest; |
|
18 |
import com.vaadin.server.VaadinService; |
|
19 |
import com.vaadin.server.VaadinSession; |
|
20 |
import com.vaadin.ui.UI; |
|
21 |
|
|
22 | 16 |
import eu.etaxonomy.cdm.vaadin.event.AbstractEditorAction; |
23 |
import eu.etaxonomy.cdm.vaadin.server.CdmSpringVaadinServletService; |
|
24 |
import eu.etaxonomy.cdm.vaadin.server.RequestEndListener; |
|
25 |
import eu.etaxonomy.cdm.vaadin.server.RequestStartListener; |
|
26 | 17 |
import eu.etaxonomy.vaadin.mvp.event.EditorDeleteEvent; |
27 | 18 |
import eu.etaxonomy.vaadin.mvp.event.EditorPreSaveEvent; |
28 | 19 |
import eu.etaxonomy.vaadin.mvp.event.EditorSaveEvent; |
... | ... | |
34 | 25 |
* @since Apr 5, 2017 |
35 | 26 |
* |
36 | 27 |
*/ |
37 |
public abstract class AbstractEditorPresenter<DTO extends Object, V extends ApplicationView<?>> extends AbstractPresenter<V> |
|
38 |
implements RequestEndListener, RequestStartListener { |
|
28 |
public abstract class AbstractEditorPresenter<DTO extends Object, V extends ApplicationView<?>> extends AbstractPresenter<V> { |
|
39 | 29 |
|
40 | 30 |
|
41 | 31 |
private static final long serialVersionUID = -6677074110764145236L; |
... | ... | |
140 | 130 |
return action.getSourceView() != null && getView().equals(action.getSourceView()); |
141 | 131 |
} |
142 | 132 |
|
143 |
@Override |
|
144 |
protected void init(V view) { |
|
145 |
super.init(view); |
|
146 |
registerListeners(); |
|
147 |
} |
|
148 |
|
|
149 |
@Override |
|
150 |
public void onViewExit() { |
|
151 |
super.onViewExit(); |
|
152 |
unregisterListeners(); |
|
153 |
} |
|
154 |
|
|
155 |
|
|
156 |
// ------------------------------------------------------------------------- |
|
157 |
|
|
158 |
protected void registerListeners() { |
|
159 |
// register as request start and end listener |
|
160 |
VaadinService service = UI.getCurrent().getSession().getService(); |
|
161 |
if(service instanceof CdmSpringVaadinServletService){ |
|
162 |
logger.trace(String.format("~~~~~ %s register as request listener", _toString())); |
|
163 |
((CdmSpringVaadinServletService)service).addRequestEndListener(this); |
|
164 |
if(logger.isTraceEnabled()){ |
|
165 |
((CdmSpringVaadinServletService)service).addRequestStartListener(this); |
|
166 |
} |
|
167 |
} else { |
|
168 |
throw new RuntimeException("Using the CdmSpringVaadinServletService is required for proper per view conversation handling"); |
|
169 |
} |
|
170 |
} |
|
171 |
|
|
172 |
/** |
|
173 |
* |
|
174 |
*/ |
|
175 |
protected void unregisterListeners() { |
|
176 |
VaadinService service = UI.getCurrent().getSession().getService(); |
|
177 |
if(service instanceof CdmSpringVaadinServletService){ |
|
178 |
logger.trace(String.format("~~~~~ %s un-register as request listener", _toString())); |
|
179 |
((CdmSpringVaadinServletService)service).removeRequestEndListener(this); |
|
180 |
if(logger.isTraceEnabled()){ |
|
181 |
((CdmSpringVaadinServletService)service).removeRequestStartListener(this); |
|
182 |
} |
|
183 |
} else { |
|
184 |
throw new RuntimeException("Using the CdmSpringVaadinServletService is required for proper per view conversation handling"); |
|
185 |
} |
|
186 |
} |
|
187 |
|
|
188 |
/** |
|
189 |
* <b>ONLY USED FOR LOGGING</b> when Level==TRACE |
|
190 |
* {@inheritDoc} |
|
191 |
*/ |
|
192 |
@Override |
|
193 |
public void onRequestStart(VaadinRequest request){ |
|
194 |
|
|
195 |
if(requestNeedsSession(request) ){ |
|
196 |
|
|
197 |
if(getView() instanceof AbstractPopupEditor){ |
|
198 |
Object bean = ((AbstractPopupEditor)getView()).getBean(); |
|
199 |
getSession().merge(bean); |
|
200 |
} |
|
201 |
|
|
202 |
} else { |
|
203 |
// ignore hartbeat, fileupload, push etc |
|
204 |
logger.trace("ignoring request:" + request.getPathInfo()); |
|
205 |
} |
|
206 |
} |
|
207 |
|
|
208 |
/** |
|
209 |
* Returns <code>true</code> for: |
|
210 |
* <ul> |
|
211 |
* <li>..</li> |
|
212 |
* <ul> |
|
213 |
* |
|
214 |
* Return <code>false</code> for: |
|
215 |
* |
|
216 |
* <ul> |
|
217 |
* <li>UILD request in a existing view, like clicking on a button</li> |
|
218 |
* <ul> |
|
219 |
* |
|
220 |
* @return |
|
221 |
protected boolean isActiveView(){ |
|
222 |
return UI.getCurrent() != null && getView() != null && getView() == navigationManager.getCurrentView(); |
|
223 |
} |
|
224 |
*/ |
|
225 |
|
|
226 |
@Override |
|
227 |
public void onRequestEnd(VaadinRequest request, VaadinSession session){ |
|
228 |
|
|
229 |
if(requestNeedsSession(request) ){ |
|
230 |
logger.trace("onRequestEnd() " + request.getPathInfo() + " " + _toString()); |
|
231 |
|
|
232 |
} else { |
|
233 |
// ignore hartbeat, fileupload, push etc |
|
234 |
logger.trace("ignoring request:" + request.getPathInfo()); |
|
235 |
} |
|
236 |
|
|
237 |
} |
|
238 |
|
|
239 |
/** |
|
240 |
* @param request |
|
241 |
* @return |
|
242 |
*/ |
|
243 |
protected boolean requestNeedsSession(VaadinRequest request) { |
|
244 |
return !( |
|
245 |
ServletPortletHelper.isAppRequest(request) // includes published file request |
|
246 |
|| ServletPortletHelper.isFileUploadRequest(request) |
|
247 |
|| ServletPortletHelper.isHeartbeatRequest(request) |
|
248 |
|| ServletPortletHelper.isPushRequest(request) |
|
249 |
); |
|
250 |
} |
|
251 | 133 |
|
252 | 134 |
protected abstract void saveBean(DTO bean); |
253 | 135 |
|
Also available in: Unified diff
ref #7046 removing request start and end listener classes