]> git.basschouten.com Git - openhab-addons.git/blob
c7f959d1c5e338ca68afd3286feedc9c7d3aceac
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.nobohub.internal.model;
14
15 import java.time.LocalDateTime;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
19
20 /**
21  * An override is when the normal weekly program is not followed because it is specified by pressing a switch or using
22  * an app.
23  *
24  * @author Jørgen Austvik - Initial contribution
25  */
26 @NonNullByDefault
27 public final class OverridePlan {
28
29     private final int id;
30     private final OverrideMode mode;
31     private final OverrideType type;
32     private final @Nullable LocalDateTime startTime;
33     private final @Nullable LocalDateTime endTime;
34     private final OverrideTarget target;
35     private final int targetId;
36
37     public OverridePlan(int id, OverrideMode mode, OverrideType type, @Nullable LocalDateTime startTime,
38             @Nullable LocalDateTime endTime, OverrideTarget target, int targetId) {
39         this.id = id;
40         this.mode = mode;
41         this.type = type;
42         this.startTime = startTime;
43         this.endTime = endTime;
44         this.target = target;
45         this.targetId = targetId;
46     }
47
48     public static OverridePlan fromH04(String h04) throws NoboDataException {
49         String[] parts = h04.split(" ", 8);
50
51         if (parts.length != 8) {
52             throw new NoboDataException(
53                     String.format("Unexpected number of parts from hub on H4 call: %d", parts.length));
54         }
55
56         return new OverridePlan(Integer.parseInt(parts[1]), OverrideMode.getByNumber(Integer.parseInt(parts[2])),
57                 OverrideType.getByNumber(Integer.parseInt(parts[3])), ModelHelper.toJavaDate(parts[4]),
58                 ModelHelper.toJavaDate(parts[5]), OverrideTarget.getByNumber(Integer.parseInt(parts[6])),
59                 Integer.parseInt(parts[7]));
60     }
61
62     public static OverridePlan fromMode(OverrideMode mode, LocalDateTime date) {
63         return new OverridePlan(1, mode, OverrideType.NOW, null, null, OverrideTarget.HUB, -1);
64     }
65
66     public String generateCommandString(final String command) {
67         return String.join(" ", command, Integer.toString(id), Integer.toString(mode.getNumValue()),
68                 Integer.toString(type.getNumValue()), ModelHelper.toHubDateMinutes(startTime),
69                 ModelHelper.toHubDateMinutes(endTime), Integer.toString(target.getNumValue()),
70                 Integer.toString(targetId));
71     }
72
73     public int getId() {
74         return id;
75     }
76
77     public OverrideMode getMode() {
78         return mode;
79     }
80
81     public OverrideType getType() {
82         return type;
83     }
84
85     public @Nullable LocalDateTime startTime() {
86         return startTime;
87     }
88
89     public @Nullable LocalDateTime endTime() {
90         return endTime;
91     }
92
93     public OverrideTarget getTarget() {
94         return target;
95     }
96
97     public int getTargetId() {
98         return targetId;
99     }
100 }