|
5 | 5 |
|
6 | 6 | import java.math.BigDecimal;
|
7 | 7 | import java.math.RoundingMode;
|
8 |
| -import java.util.Random; |
9 |
| -import java.util.List; |
10 |
| -import java.util.Arrays; |
| 8 | +import java.util.*; |
11 | 9 | import java.util.concurrent.Executors;
|
12 | 10 | import java.util.concurrent.ScheduledExecutorService;
|
13 | 11 | import java.util.concurrent.TimeUnit;
|
14 |
| -import java.util.Scanner; |
15 | 12 |
|
| 13 | +import jdk.internal.net.http.frame.SettingsFrame; |
16 | 14 | import org.eclipse.leshan.client.servers.ServerIdentity;
|
17 | 15 | import org.eclipse.leshan.client.resource.BaseInstanceEnabler;
|
18 | 16 | import org.eclipse.leshan.core.model.ResourceModel.Type;
|
@@ -45,181 +43,205 @@ public class Luminaire extends BaseInstanceEnabler {
|
45 | 43 | private static final int RES_PEAK_POWER = 30003;
|
46 | 44 | private static final int RES_DIM_LEVEL = 30004;
|
47 | 45 | private static final List<Integer> supportedResources =
|
48 |
| - Arrays.asList( |
49 |
| - RES_POWER |
50 |
| - , RES_TYPE |
51 |
| - , RES_PEAK_POWER |
52 |
| - , RES_DIM_LEVEL |
53 |
| - ); |
| 46 | + Arrays.asList( |
| 47 | + RES_POWER |
| 48 | + , RES_TYPE |
| 49 | + , RES_PEAK_POWER |
| 50 | + , RES_DIM_LEVEL |
| 51 | + ); |
54 | 52 | // Variables storing current values.
|
55 | 53 |
|
56 | 54 | private boolean vPower = false;
|
57 | 55 |
|
58 | 56 | // LED, Halogen
|
59 |
| - private String vType = ""; |
| 57 | + private String vType; |
60 | 58 |
|
61 |
| - private long vPeakPower = 0; |
| 59 | + private long vPeakPower; |
62 | 60 |
|
63 | 61 | // 0..100
|
64 | 62 | private long vDimLevel = 0;
|
65 | 63 |
|
66 |
| - // |
67 |
| - // 2IMN15: TODO : fill in |
68 |
| - // |
69 |
| - // Add state variables for the user interface. |
70 |
| - private JLabel glPower; |
71 |
| - private JLabel gvPower; |
72 |
| - private JLabel glDimLevel; |
73 |
| - private JLabel gvDimLevel; |
74 |
| - private JLabel glInstantPower; |
75 |
| - private JLabel gvInstantPower; |
76 |
| - private JFrame guiFrame; |
77 |
| - |
| 64 | + /** |
| 65 | + * Variables for values in GUI |
| 66 | + * Power, Dim Level, Type, Peak Power and frame declaration itself |
| 67 | + */ |
| 68 | + private final JLabel gvPower; |
| 69 | + private final JLabel gvDimLevel; |
| 70 | + |
| 71 | + private final JLabel gvType; |
| 72 | + |
| 73 | + private final JLabel gvPeakPower; |
| 74 | + private final JFrame guiFrame; |
| 75 | + |
78 | 76 | public Luminaire() {
|
79 |
| - // |
80 |
| - // 2IMN15: TODO : fill in |
81 |
| - // |
82 |
| - // Create an interface to display the luminaire state. |
83 |
| - // Options: |
84 |
| - // * GUI (see DemandResponse.java for an Swing/AWT example) |
85 |
| - // * external application |
86 |
| - // * ... |
87 |
| - // |
88 |
| - // Automatically generated GUI code. |
89 |
| - guiFrame = new JFrame(); |
90 |
| - guiFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
91 |
| - guiFrame.setTitle("Luminaire"); |
92 |
| - |
93 |
| - // Power |
94 |
| - glPower = new JLabel(); |
95 |
| - glPower.setText("Power"); |
96 |
| - gvPower = new JLabel(); |
97 |
| - gvPower.setText(Boolean.toString(vPower)); |
98 |
| - |
99 |
| - //Dim Level |
100 |
| - glDimLevel = new JLabel(); |
101 |
| - glDimLevel.setText("Dim Level"); |
102 |
| - gvDimLevel = new JLabel(); |
103 |
| - gvDimLevel.setText(Long.toString(vDimLevel)); |
104 |
| - |
105 |
| - //Instant Power |
106 |
| - glInstantPower = new JLabel(); |
107 |
| - glInstantPower.setText("Instant Power"); |
108 |
| - gvInstantPower = new JLabel(); |
109 |
| - gvInstantPower.setText(Long.toString((100-vDimLevel)/100 * vPeakPower)); |
110 |
| - |
111 |
| - // Create layout of labels, inputs and values. |
112 |
| - GridLayout layout = new GridLayout(0,6,10,10); |
113 |
| - guiFrame.getContentPane().setLayout(layout); |
114 |
| - Container guiPane = guiFrame.getContentPane(); |
115 |
| - guiPane.add(glPower); |
116 |
| - guiPane.add(gvPower); |
117 |
| - guiPane.add(glDimLevel); |
118 |
| - guiPane.add(gvDimLevel); |
119 |
| - guiPane.add(glInstantPower); |
120 |
| - guiPane.add(gvInstantPower); |
121 |
| - |
122 |
| - guiFrame.pack(); |
123 |
| - // Code to make the frame visible. |
124 |
| - java.awt.EventQueue.invokeLater(new Runnable() { |
125 |
| - public void run() { |
126 |
| - guiFrame.setVisible(true); |
127 |
| - } |
128 |
| - }); |
| 77 | + // |
| 78 | + // 2IMN15: TODO : fill in |
| 79 | + // |
| 80 | + // Create an interface to display the luminaire state. |
| 81 | + // Options: |
| 82 | + // * GUI (see DemandResponse.java for an Swing/AWT example) |
| 83 | + // * external application |
| 84 | + // * ... |
| 85 | + // |
| 86 | + // Automatically generated GUI code. |
| 87 | + guiFrame = new JFrame(); |
| 88 | + guiFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); |
| 89 | + guiFrame.setTitle("Luminaire"); |
| 90 | + |
| 91 | + // Power |
| 92 | + // |
| 93 | + // 2IMN15: TODO : fill in |
| 94 | + // |
| 95 | + // Add state variables for the user interface. |
| 96 | + JLabel glPower = new JLabel(); |
| 97 | + |
| 98 | + // Power field (TRUE/FALSE corresponding to ON/OFF) |
| 99 | + glPower.setText("Power"); |
| 100 | + gvPower = new JLabel(); |
| 101 | + gvPower.setText(Boolean.toString(vPower)); |
| 102 | + |
| 103 | + //Dim Level (0-100) |
| 104 | + JLabel glDimLevel = new JLabel(); |
| 105 | + glDimLevel.setText("Dim Level"); |
| 106 | + gvDimLevel = new JLabel(); |
| 107 | + gvDimLevel.setText(Long.toString(vDimLevel)); |
| 108 | + |
| 109 | + //Type of luminaire |
| 110 | + JLabel glType = new JLabel(); |
| 111 | + glType.setText("Type"); |
| 112 | + gvType = new JLabel(); |
| 113 | + |
| 114 | + //Peak power of luminaire |
| 115 | + JLabel glPeakPower = new JLabel(); |
| 116 | + glPeakPower.setText("Peak Power"); |
| 117 | + gvPeakPower = new JLabel(); |
| 118 | + |
| 119 | + // Create layout of labels, inputs and values. |
| 120 | + GridLayout layout = new GridLayout(0, 8, 10, 10); |
| 121 | + guiFrame.getContentPane().setLayout(layout); |
| 122 | + Container guiPane = guiFrame.getContentPane(); |
| 123 | + guiPane.add(glPower); |
| 124 | + guiPane.add(gvPower); |
| 125 | + guiPane.add(glDimLevel); |
| 126 | + guiPane.add(gvDimLevel); |
| 127 | + guiPane.add(glType); |
| 128 | + guiPane.add(gvType); |
| 129 | + guiPane.add(glPeakPower); |
| 130 | + guiPane.add(gvPeakPower); |
| 131 | + |
| 132 | + guiFrame.pack(); |
| 133 | + // Code to make the frame visible. |
| 134 | + java.awt.EventQueue.invokeLater(new Runnable() { |
| 135 | + public void run() { |
| 136 | + guiFrame.setVisible(true); |
| 137 | + } |
| 138 | + }); |
129 | 139 | }
|
130 | 140 |
|
131 | 141 | @Override
|
132 | 142 | public synchronized ReadResponse read(ServerIdentity identity, int resourceId) {
|
133 |
| - switch (resourceId) { |
134 |
| - case RES_POWER: |
135 |
| - return ReadResponse.success(resourceId, vPower); |
136 |
| - case RES_TYPE: |
137 |
| - return ReadResponse.success(resourceId, vType); |
138 |
| - case RES_PEAK_POWER: |
139 |
| - return ReadResponse.success(resourceId, vPeakPower); |
140 |
| - case RES_DIM_LEVEL: |
141 |
| - return ReadResponse.success(resourceId, vDimLevel); |
142 |
| - default: |
143 |
| - return super.read(identity, resourceId); |
144 |
| - } |
| 143 | + switch (resourceId) { |
| 144 | + case RES_POWER: |
| 145 | + return ReadResponse.success(resourceId, vPower); |
| 146 | + case RES_TYPE: |
| 147 | + return ReadResponse.success(resourceId, vType); |
| 148 | + case RES_PEAK_POWER: |
| 149 | + return ReadResponse.success(resourceId, vPeakPower); |
| 150 | + case RES_DIM_LEVEL: |
| 151 | + return ReadResponse.success(resourceId, vDimLevel); |
| 152 | + default: |
| 153 | + return super.read(identity, resourceId); |
| 154 | + } |
145 | 155 | }
|
146 |
| - |
| 156 | + |
147 | 157 | @Override
|
148 | 158 | public WriteResponse write(ServerIdentity identity, boolean replace, int resourceId, LwM2mResource value) {
|
149 |
| - switch (resourceId) { |
150 |
| - case RES_POWER: |
151 |
| - //vPower = (Boolean) value.getValue(); |
152 |
| - //fireResourceChange(resourceId); |
153 |
| - setPower((Boolean) value.getValue()); |
154 |
| - return WriteResponse.success(); |
155 |
| - case RES_DIM_LEVEL: |
156 |
| - // vDimLevel = (Integer) value.getValue(); |
157 |
| - // fireResourceChange(resourceId); |
158 |
| - setDimLevel((Long) value.getValue()); |
159 |
| - return WriteResponse.success(); |
160 |
| - default: |
161 |
| - return super.write(identity, replace, resourceId,value); |
162 |
| - } |
| 159 | + switch (resourceId) { |
| 160 | + case RES_POWER: |
| 161 | + //vPower = (Boolean) value.getValue(); |
| 162 | + //fireResourceChange(resourceId); |
| 163 | + setPower((Boolean) value.getValue()); |
| 164 | + return WriteResponse.success(); |
| 165 | + case RES_DIM_LEVEL: |
| 166 | + // vDimLevel = (Integer) value.getValue(); |
| 167 | + // fireResourceChange(resourceId); |
| 168 | + setDimLevel((Long) value.getValue()); |
| 169 | + return WriteResponse.success(); |
| 170 | + case RES_TYPE: |
| 171 | + // case for luminaire type added by us |
| 172 | + setType((String) value.getValue()); |
| 173 | + return WriteResponse.success(); |
| 174 | + case RES_PEAK_POWER: |
| 175 | + // case for peak power added by us |
| 176 | + setPeakPower((long) value.getValue()); |
| 177 | + System.out.println(value.getValue()); |
| 178 | + return WriteResponse.success(); |
| 179 | + default: |
| 180 | + return super.write(identity, replace, resourceId, value); |
| 181 | + } |
163 | 182 | }
|
164 |
| - |
| 183 | + |
165 | 184 | @Override
|
166 | 185 | public synchronized ExecuteResponse execute(ServerIdentity identity, int resourceId, Arguments arguments) {
|
167 |
| - switch (resourceId) { |
168 |
| - default: |
169 |
| - return super.execute(identity, resourceId,arguments); |
170 |
| - } |
| 186 | + return super.execute(identity, resourceId, arguments); |
171 | 187 | }
|
172 |
| - |
| 188 | + |
173 | 189 | @Override
|
174 | 190 | public List<Integer> getAvailableResourceIds(ObjectModel model) {
|
175 |
| - return supportedResources; |
| 191 | + return supportedResources; |
176 | 192 | }
|
177 |
| - |
| 193 | + |
178 | 194 | // Configure before registration, don't fire.
|
179 | 195 | public void configure(String lumtype, long peakpower) {
|
180 |
| - vType = lumtype; |
181 |
| - vPeakPower = peakpower; |
182 |
| - System.out.println(vType + " " + vPeakPower); |
| 196 | + vType = lumtype; |
| 197 | + // Set text here |
| 198 | + gvType.setText(lumtype); |
| 199 | + // Set text here |
| 200 | + vPeakPower = peakpower; |
| 201 | + gvPeakPower.setText(String.valueOf(peakpower)); |
| 202 | + System.out.println(vType + " " + vPeakPower); |
183 | 203 | }
|
184 |
| - |
| 204 | + |
185 | 205 | private synchronized void setPower(boolean value) {
|
186 |
| - if (vPower != value) { |
187 |
| - vPower = value; |
188 |
| - // |
189 |
| - // 2IMN15: TODO : fill in |
190 |
| - // |
191 |
| - // RoomControl has change the power. |
192 |
| - // Update the UI. |
193 |
| - gvPower.setText(Boolean.toString(value)); |
194 |
| - fireResourceChange(RES_POWER); |
195 |
| - } |
| 206 | + if (vPower != value) { |
| 207 | + vPower = value; |
| 208 | + // |
| 209 | + // 2IMN15: TODO : fill in |
| 210 | + // |
| 211 | + // RoomControl has changed the power. |
| 212 | + // Update the UI. |
| 213 | + gvPower.setText(Boolean.toString(value)); |
| 214 | + fireResourceChange(RES_POWER); |
| 215 | + } |
196 | 216 | }
|
197 |
| - |
| 217 | + |
198 | 218 | private synchronized void setType(String value) {
|
199 |
| - if (vType != value) { |
200 |
| - vType = value; |
201 |
| - fireResourceChange(RES_TYPE); |
202 |
| - } |
| 219 | + if (!Objects.equals(vType, value)) { |
| 220 | + vType = value; |
| 221 | + gvType.setText(value); |
| 222 | + fireResourceChange(RES_TYPE); |
| 223 | + } |
203 | 224 | }
|
204 | 225 |
|
205 | 226 | private synchronized void setPeakPower(long value) {
|
206 |
| - if (vPeakPower != value) { |
207 |
| - vPeakPower = value; |
208 |
| - fireResourceChange(RES_PEAK_POWER); |
209 |
| - } |
| 227 | + if (vPeakPower != value) { |
| 228 | + vPeakPower = value; |
| 229 | + gvPeakPower.setText(Long.toString(value)); |
| 230 | + fireResourceChange(RES_PEAK_POWER); |
| 231 | + } |
210 | 232 | }
|
211 | 233 |
|
212 | 234 | private synchronized void setDimLevel(long value) {
|
213 |
| - if (vDimLevel != value) { |
214 |
| - vDimLevel = value; |
215 |
| - // |
216 |
| - // 2IMN15: TODO : fill in |
217 |
| - // |
218 |
| - // RoomControl has change the dim level. |
219 |
| - // Update the UI. |
220 |
| - gvDimLevel.setText(Long.toString(value)); |
221 |
| - fireResourceChange(RES_DIM_LEVEL); |
222 |
| - } |
| 235 | + if (vDimLevel != value) { |
| 236 | + vDimLevel = value; |
| 237 | + // |
| 238 | + // 2IMN15: TODO : fill in |
| 239 | + // |
| 240 | + // RoomControl has changed the dim level. |
| 241 | + // Update the UI. |
| 242 | + gvDimLevel.setText(Long.toString(value)); |
| 243 | + fireResourceChange(RES_DIM_LEVEL); |
| 244 | + } |
223 | 245 | }
|
224 | 246 |
|
225 | 247 | }
|
0 commit comments