1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package de.desy.acop.displayers.chart;
24
25 import java.beans.PropertyVetoException;
26
27 import com.cosylab.gui.adapters.Converter;
28 import com.cosylab.gui.displayers.DataSourceSupport;
29 import com.cosylab.gui.displayers.DoubleSeqConsumer;
30 import com.cosylab.gui.displayers.MinimalDataConsumer;
31 import com.cosylab.util.CommonException;
32
33
34
35
36
37 class HistoryDataConverter {
38
39 private HistoryDataSource historyDataSource;
40 private TransformedDataConsumer transformedDataConsumer;
41 private Converter converter;
42 private double[] trensformedData;
43
44 private class HistoryDataSource extends DataSourceSupport {
45
46 private static final long serialVersionUID = 1L;
47 private DoubleSeqConsumer doubleSeqConsumer;
48
49 @SuppressWarnings("unchecked")
50 public HistoryDataSource() {
51 super(new Class[]{DoubleSeqConsumer.class});
52 }
53
54 public void setConverter(Converter c) {
55 if (converter != null) converter.removeAllConsumers();
56 converter = c;
57 if (converter == null || !(converter instanceof DoubleSeqConsumer)) {
58 resetConverter();
59 return;
60 }
61 try {
62 doubleSeqConsumer = converter.getDataConsumer(DoubleSeqConsumer.class);
63 converter.addConsumer(transformedDataConsumer);
64 addConsumer(converter);
65 } catch (PropertyVetoException e) {
66 resetConverter();
67 e.printStackTrace();
68 }
69 }
70
71 public void resetConverter() {
72 converter = null;
73 try {
74 doubleSeqConsumer = transformedDataConsumer;
75 addConsumer(transformedDataConsumer);
76 } catch (PropertyVetoException e) {
77 e.printStackTrace();
78 }
79 }
80
81 public void transformData(long timestamp, double[] data) {
82 try {
83 doubleSeqConsumer.updateValue(timestamp, data);
84 } catch (CommonException e) {
85 e.printStackTrace();
86 }
87 }
88
89 }
90
91 private class TransformedDataConsumer extends MinimalDataConsumer implements DoubleSeqConsumer {
92 public void updateValue(long timestamp, double[] value) throws CommonException {
93 trensformedData = value;
94 }
95 }
96
97 public HistoryDataConverter() {
98 historyDataSource = new HistoryDataSource();
99 transformedDataConsumer = new TransformedDataConsumer();
100 historyDataSource.resetConverter();
101 }
102
103
104
105
106
107
108
109
110 public void useConverter(Converter c) {
111 if (c == null) {
112 historyDataSource.resetConverter();
113 return;
114 }
115 try {
116 historyDataSource.setConverter((Converter) c.clone());
117 } catch (CloneNotSupportedException e) {
118 historyDataSource.resetConverter();
119 e.printStackTrace();
120 }
121 }
122
123
124
125
126
127
128
129 public double[] convertHistoryData(double[] inputData) {
130 historyDataSource.transformData(System.currentTimeMillis(), inputData);
131 return trensformedData;
132 }
133
134 }