View Javadoc
1   package fr.ifremer.quadrige3.synchro.server.components.progression;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 Synchro server
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2017 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import fr.ifremer.quadrige3.synchro.vo.SynchroProgressionModel;
27  import fr.ifremer.quadrige3.synchro.vo.SynchroProgressionStatus;
28  import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
29  import org.apache.wicket.ajax.AjaxRequestTarget;
30  import org.apache.wicket.markup.html.basic.Label;
31  import org.apache.wicket.markup.html.panel.FeedbackPanel;
32  import org.apache.wicket.markup.html.panel.Panel;
33  import org.apache.wicket.model.IModel;
34  import org.apache.wicket.model.PropertyModel;
35  import org.apache.wicket.util.time.Duration;
36  
37  import com.googlecode.wicket.jquery.ui.panel.JQueryFeedbackPanel;
38  import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
39  
40  
41  public class ProgressionPanel extends Panel {
42      private static final long serialVersionUID = 1L;
43  
44      private final AbstractAjaxTimerBehavior timer;
45      private final ProgressBar progressBar;
46      private final FeedbackPanel feedback;
47      private final Label taskLabel;
48  
49      private boolean stopped = false;
50  
51      public ProgressionPanel(String id, IModel<SynchroProgressionModel> model) {
52          super(id, model);
53  
54          // Timer
55          timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
56              private static final long serialVersionUID = 1L;
57  
58              @Override
59              protected void onTimer(AjaxRequestTarget target) {
60                  if (stopped) {
61                      ProgressionPanel.this.stop(target);
62                      return;
63                  }
64                  SynchroProgressionModel progressionModel = getModelObject();
65                  if (progressionModel != null) {
66                      synchronized (progressionModel) {
67                          if (progressionModel.getStatus() == SynchroProgressionStatus.FAILED ||
68                                  progressionModel.getStatus() == SynchroProgressionStatus.STOPPED) {
69                              error(progressionModel.getMessage());
70                          } else {
71                              info(progressionModel.getMessage());
72                          }
73                      }
74                  }
75                  progressBar.refresh(target);
76                  target.add(feedback, progressBar, taskLabel);
77              }
78          };
79          add(timer);
80  
81          // Task label
82          taskLabel = new Label("taskLabel", new PropertyModel<String>(model, "task"));
83          taskLabel.setOutputMarkupId(true);
84          add(taskLabel);
85  
86          // ProgressBar
87          this.progressBar = new ProgressBar("progress", new PropertyModel<>(model, "current")) {
88  
89              private static final long serialVersionUID = 1L;
90  
91              @Override
92              protected void onComplete(AjaxRequestTarget target)
93              {
94                  timer.stop(target); // wicket6
95                  getFeedbackMessages().clear();
96  
97                  ProgressionPanel.this.onComplete(target);
98  
99              }
100         };
101         // progressBar.add(new AjaxSelfUpdatingTimerBehavior(Duration.ONE_SECOND));
102         progressBar.setOutputMarkupId(true);
103         progressBar.setVisibilityAllowed(true);
104         add(progressBar);
105 
106         // FeedbackPanel
107         feedback = new JQueryFeedbackPanel("feedback", this);
108         feedback.setOutputMarkupId(true);
109         add(feedback);
110 
111     }
112 
113     @Override
114     protected void onConfigure() {
115         super.onConfigure();
116 
117         SynchroProgressionModel progressionModel = getModelObject();
118         if (progressionModel != null) {
119             synchronized (progressionModel) {
120                 if (progressionModel.getStatus() == SynchroProgressionStatus.FAILED ||
121                         progressionModel.getStatus() == SynchroProgressionStatus.STOPPED) {
122                     error(progressionModel.getMessage());
123                 }
124                 else {
125                     info(progressionModel.getMessage());
126                 }
127             }
128         }
129     }
130 
131     public void setModelObject(SynchroProgressionModel progressionModel) {
132         if (getDefaultModelObject() != progressionModel) {
133             setDefaultModelObject(progressionModel);
134         }
135     }
136 
137     public void restart(AjaxRequestTarget target) {
138         stopped = false;
139         if (timer.isStopped()) {
140             timer.restart(target);
141         }
142     }
143 
144     public void stop(AjaxRequestTarget target) {
145         if (!timer.isStopped()) {
146             timer.stop(target);
147         }
148         stopped = true;
149     }
150 
151     public void onComplete(AjaxRequestTarget target) {
152         // could be override by subclass
153     }
154     
155     public IModel<SynchroProgressionModel> getModel() {
156         @SuppressWarnings("unchecked")
157         IModel<SynchroProgressionModel> result = (IModel<SynchroProgressionModel>) getDefaultModel();
158         return result;
159     }
160     
161     public SynchroProgressionModel getModelObject() {
162         return (SynchroProgressionModel)getDefaultModelObject();
163     }
164     
165     /* -- Internal methods -- */
166 
167 
168     
169 }