2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.cdm
.vaadin
.util
;
11 import java
.util
.ArrayList
;
12 import java
.util
.Date
;
13 import java
.util
.List
;
15 import org
.apache
.log4j
.Logger
;
17 import com
.vaadin
.server
.Page
;
18 import com
.vaadin
.ui
.Notification
;
19 import com
.vaadin
.ui
.Notification
.Type
;
20 import com
.vaadin
.ui
.UI
;
22 import eu
.etaxonomy
.cdm
.vaadin
.component
.CdmProgressComponent
;
23 import eu
.etaxonomy
.cdm
.vaadin
.session
.CdmChangeEvent
;
30 public abstract class CdmVaadinOperation
implements Runnable
{
31 private static final Logger logger
= Logger
.getLogger(CdmVaadinOperation
.class);
33 private int pollInterval
= -1;
34 private CdmProgressComponent progressComponent
;
36 private boolean opDone
= false;
38 List
<CdmChangeEvent
> events
= new ArrayList
<CdmChangeEvent
>();
40 private Date now
= new java
.util
.Date();
42 private Exception exception
;
46 public CdmVaadinOperation(int pollInterval
, CdmProgressComponent progressComponent
) {
47 this.pollInterval
= pollInterval
;
48 this.progressComponent
= progressComponent
;
50 UI
.getCurrent().setPollInterval(pollInterval
);
52 // comment out below for debugging
53 // logger.warn(new Timestamp(now.getTime()) + " : set polling interval to " + pollInterval);
54 // UI.getCurrent().addPollListener(new UIEvents.PollListener() {
56 // public void poll(UIEvents.PollEvent event) {
57 // logger.warn( new Timestamp(now.getTime()) + " : polling");
62 public CdmVaadinOperation() {
68 public void setProgress(final String progressText
) {
69 if(progressComponent
== null) {
73 UI
.getCurrent().access(new Runnable() {
76 progressComponent
.setProgress(progressText
);
77 //logger.warn("set progress spinner");
81 progressComponent
.setProgress(progressText
);
87 public void setProgress(final String progressText
, final float progress
) {
88 if(progressComponent
== null) {
92 UI
.getCurrent().access(new Runnable() {
95 progressComponent
.setProgress(progressText
, progress
);
99 progressComponent
.setProgress(progressText
, progress
);
103 public void endProgress() {
104 if(progressComponent
== null) {
108 UI
.getCurrent().access(new Runnable() {
111 progressComponent
.setVisible(false);
115 progressComponent
.setVisible(false);
120 * @see java.lang.Runnable#run()
125 final boolean success
= execute();
126 //logger.warn(new Timestamp(now.getTime()) + " : ran execute");
129 UI
.getCurrent().access(new Runnable() {
136 if(exception
!= null) {
137 Notification notification
= new Notification(exception
.getMessage(), "", Type
.WARNING_MESSAGE
);
138 notification
.show(Page
.getCurrent());
141 postOpUIUpdate(success
);
142 //logger.warn(new Timestamp(now.getTime()) + " : ran postOpUIUpdate ");
144 UI
.getCurrent().setPollInterval(-1);
146 //logger.warn(new Timestamp(now.getTime()) + " : switched off pollling");
151 postOpUIUpdate(success
);
158 public abstract boolean execute();
160 public void postOpUIUpdate(boolean isOpSuccess
) {}
162 public void fireEvent(CdmChangeEvent event
, boolean async
) {
163 CdmVaadinSessionUtilities
.getCurrentCdmDataChangeService().fireChangeEvent(event
, async
);
166 public void registerDelayedEvent(CdmChangeEvent event
) {
170 private void fireDelayedEvents() {
171 for(CdmChangeEvent event
: events
) {
172 fireEvent(event
, false);
177 public boolean isAsync() {
178 return pollInterval
> 0;
182 * @return the exception
184 public Exception
getException() {
189 * @param exception the exception to set
191 public void setException(Exception exception
) {
192 this.exception
= exception
;