1 /*
2 Copyright (C) 2007 Dirk Huenniger
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19 package org.indi.objects;
20
21 import java.util.Date;
22
23 /**
24 * A indivector hosting indiswitches
25 *
26 * @author Dirk Hünniger
27 *
28 */
29 public class SwitchVector extends Vector<Switch> {
30 /**
31 *
32 */
33 private static final long serialVersionUID = 1L;
34 /**
35 * a switch rule descibing how many switches in this vector ca be set to On
36 * at the same time.
37 */
38 private SwitchRule switchRule;
39
40 /**
41 * class constructor
42 *
43 * @param device
44 * the name of the device this SwitchVector is associated
45 * with
46 * @param name
47 * the name of this SwitchVector
48 * @param timestamp
49 * the timestamp to be sent along with this vector
50 */
51 public SwitchVector(String device, String name, String timestamp) {
52 super(device, name, timestamp);
53 }
54
55 /**
56 * class constructor
57 *
58 * @param device
59 * the name of the device this SwitchVector is associated
60 * with
61 * @param name
62 * the name of this SwitchVector
63 * @param label
64 * the label to be used for this SwitchVector by a GUI
65 * @param group
66 * the group this vector belongs to
67 * @param state
68 * the State this vector is in
69 * @param permission
70 * the permissions the user has to change the properties of
71 * this vector
72 * @param timeout
73 * the worst case time it takes for a property of this vector
74 * to change
75 * @param timestamp
76 * the timestamp to be sent along with this vector
77 * @param switchRule
78 * a rule defining how switches can be On at the same time
79 * @param message
80 * a message to be sent along with this vector
81 */
82 public SwitchVector(String device, String name, String label, String group,
83 State state, Permission permission, double timeout,
84 String timestamp, SwitchRule switchRule, String message) {
85 super(device, name, label, group, state, permission, timeout,
86 timestamp, message);
87 this.switchRule = switchRule;
88 }
89
90 /**
91 * class constructor
92 *
93 * @param device
94 * the name of the device this SwitchVector is associated
95 * with
96 * @param name
97 * the name of this SwitchVector
98 * @param state
99 * the State this vector is in
100 * @param timeout
101 * the worst case time it takes for a property of this vector
102 * to change
103 * @param timestamp
104 * the timestamp to be sent along with this vector
105 * @param message
106 * a message to be sent along with this vector
107 */
108 public SwitchVector(String device, String name, State state,
109 double timeout, String timestamp, String message) {
110 super(device, name, state, timeout, timestamp, message);
111 }
112
113 /**
114 * class constructor
115 *
116 * @param device
117 * the name of the device this SwitchVector is associated
118 * with
119 * @param name
120 * the name of this SwitchVector
121 * @param label
122 * the label to be used for this SwitchVector by a GUI
123 * @param group
124 * the group this vector belongs to
125 * @param state
126 * the State this vector is in
127 * @param permission
128 * the permissions the user has to change the properties of
129 * this vector
130 * @param timeout
131 * the worst case time it takes for a property of this vector
132 * to change
133 * @param switchRule
134 * a rule defining how switches can be On at the same time
135 */
136 public SwitchVector(String device, String name, String label, String group,
137 State state, Permission permission, SwitchRule switchRule,
138 double timeout) {
139 super(device, name, label, group, state, permission, timeout, null,
140 null);
141 this.switchRule = switchRule;
142 }
143
144 /**
145 *
146 * @return the switchrule of this vector
147 */
148 public SwitchRule getSwitchRule() {
149 return this.switchRule;
150 }
151
152 /**
153 * convert a switch rule to a string as used by the indi protocol
154 *
155 * @param rule
156 * the switchrule to be converted
157 * @return the string representation of the switchrule
158 */
159 protected static String switchRuleToString(SwitchRule rule) {
160 switch (rule) {
161 case OneOfMany:
162 return "OneOfMany";
163 case AtMostOne:
164 return "AtMostOne";
165 case AnyOfMany:
166 return "AnyOfMany";
167 default:
168 throw new RuntimeException();
169 }
170 }
171
172 @Override
173 public String getStartTag(TransferType type, String message) {
174 switch (type) {
175 case Def:
176 return "<def" + getType() + " device=\"" + this.device
177 + "\" name=\"" + this.name + "\" label=\"" + this.label
178 + "\" group=\"" + this.group + "\" state=\""
179 + Light.stateToString(this.state) + "\" perm=\""
180 + permissionToString(this.permission) + "\" rule=\""
181 + switchRuleToString(this.switchRule) + "\" timeout=\""
182 + Double.toString(this.timeout) + "\" timestamp=\""
183 + getDateFormat().format(new Date())
184 + ((message == null) ? "" : "\" message=\"" + message)
185 + "\">";
186 default:
187 return super.getStartTag(type, message);
188 }
189 }
190
191 @Override
192 protected String getType() {
193 return "SwitchVector";
194 }
195 }