2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.nobohub.internal.model;
15 import java.time.LocalDateTime;
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.eclipse.jdt.annotation.Nullable;
21 * An override is when the normal weekly program is not followed because it is specified by pressing a switch or using
24 * @author Jørgen Austvik - Initial contribution
27 public final class OverridePlan {
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;
37 public OverridePlan(int id, OverrideMode mode, OverrideType type, @Nullable LocalDateTime startTime,
38 @Nullable LocalDateTime endTime, OverrideTarget target, int targetId) {
42 this.startTime = startTime;
43 this.endTime = endTime;
45 this.targetId = targetId;
48 public static OverridePlan fromH04(String h04) throws NoboDataException {
49 String[] parts = h04.split(" ", 8);
51 if (parts.length != 8) {
52 throw new NoboDataException(
53 String.format("Unexpected number of parts from hub on H4 call: %d", parts.length));
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]));
62 public static OverridePlan fromMode(OverrideMode mode, LocalDateTime date) {
63 return new OverridePlan(1, mode, OverrideType.NOW, null, null, OverrideTarget.HUB, -1);
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));
77 public OverrideMode getMode() {
81 public OverrideType getType() {
85 public @Nullable LocalDateTime startTime() {
89 public @Nullable LocalDateTime endTime() {
93 public OverrideTarget getTarget() {
97 public int getTargetId() {