1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.internal.component;
21
22 import org.apache.myfaces.tobago.component.Visual;
23
24 import javax.faces.component.UIOutput;
25 import javax.faces.component.behavior.ClientBehaviorHolder;
26 import javax.faces.event.AbortProcessingException;
27 import javax.faces.event.ComponentSystemEvent;
28 import javax.faces.event.ComponentSystemEventListener;
29 import javax.faces.event.ListenerFor;
30 import javax.faces.event.PreRenderComponentEvent;
31 import javax.swing.BoundedRangeModel;
32
33
34
35
36 @ListenerFor(systemEventClass = PreRenderComponentEvent.class)
37 public abstract class AbstractUIProgress extends UIOutput
38 implements Visual, ComponentSystemEventListener, ClientBehaviorHolder {
39
40 private double rangeValue;
41 private double rangeMax;
42
43 public double getRangeValue() {
44 return rangeValue;
45 }
46
47 public double getRangeMax() {
48 return rangeMax;
49 }
50
51 @Override
52 public void processEvent(final ComponentSystemEvent event) throws AbortProcessingException {
53
54 super.processEvent(event);
55
56 if (event instanceof PreRenderComponentEvent) {
57 final Object model = getValue();
58 if (model instanceof BoundedRangeModel) {
59 final BoundedRangeModel m = (BoundedRangeModel) model;
60 rangeValue = (double) m.getValue();
61 rangeMax = (double) m.getMaximum();
62 final int min = m.getMinimum();
63 if (min != 0) {
64 rangeValue -= min;
65 rangeMax -= min;
66 }
67 } else {
68 if (model instanceof Number) {
69 rangeValue = ((Number) model).doubleValue();
70 } else if (model != null) {
71 rangeValue = Double.parseDouble("" + model);
72 }
73 if (getMax() != null) {
74 rangeMax = getMax();
75 } else {
76 rangeMax = 1.0;
77 }
78 if (rangeValue > rangeMax) {
79 rangeValue = rangeMax;
80 }
81 }
82 }
83 }
84
85 public abstract Double getMax();
86 }