1 package fr.ifremer.quadrige3.synchro.server.components.progression;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
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
82 taskLabel = new Label("taskLabel", new PropertyModel<String>(model, "task"));
83 taskLabel.setOutputMarkupId(true);
84 add(taskLabel);
85
86
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);
95 getFeedbackMessages().clear();
96
97 ProgressionPanel.this.onComplete(target);
98
99 }
100 };
101
102 progressBar.setOutputMarkupId(true);
103 progressBar.setVisibilityAllowed(true);
104 add(progressBar);
105
106
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
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
166
167
168
169 }