Project

General

Profile

« Previous | Next » 

Revision daf5d5b4

Added by Andreas Kohlbecker over 6 years ago

ref #7046 removing request start and end listener classes

View differences:

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