package de.ph87.homeautomation.schedule.entry; import com.luckycatlabs.sunrisesunset.Zenith; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.time.ZonedDateTime; import java.util.HashMap; import java.util.Map; @Getter @Setter @Entity public class ScheduleEntry { @Id @GeneratedValue @Setter(AccessLevel.NONE) private Long id; private boolean enabled = true; private boolean monday = true; private boolean tuesday = true; private boolean wednesday = true; private boolean thursday = true; private boolean friday = true; private boolean saturday = true; private boolean sunday = true; @Column(nullable = false) private ScheduleEntryType type = null; private double zenith = Zenith.CIVIL.degrees().doubleValue(); private int hour; private int minute; private int second; private ZonedDateTime nextDateTime; @ElementCollection(fetch = FetchType.EAGER) private Map properties = new HashMap<>(); public void setWorkday(final boolean enabled) { monday = enabled; tuesday = enabled; wednesday = enabled; thursday = enabled; friday = enabled; } public void setWeekend(final boolean enabled) { saturday = enabled; sunday = enabled; } public void setEveryday(final boolean enabled) { setWorkday(enabled); setWeekend(enabled); } @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append(getClass().getSimpleName()); builder.append("(id="); builder.append(id); builder.append(", enabled="); builder.append(enabled); builder.append(", type="); builder.append(type); builder.append(", weekdays="); builder.append(monday ? 1 : 0); builder.append(tuesday ? 1 : 0); builder.append(wednesday ? 1 : 0); builder.append(thursday ? 1 : 0); builder.append(friday ? 1 : 0); builder.append(saturday ? 1 : 0); builder.append(sunday ? 1 : 0); if (type != null) { switch (type) { case TIME: builder.append(", hour="); builder.append(hour); builder.append(", minute="); builder.append(minute); builder.append(", second="); builder.append(second); break; case SUNRISE: case SUNSET: builder.append(", zenith="); builder.append(zenith); break; } } builder.append(")"); return builder.toString(); } }