/** * C-Nery - A home automation web application for C-Bus. * Copyright (C) 2008,2009,2012 Dave Oxley <dave@daveoxley.co.uk>. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package com.daveoxley.cnery.entities; import com.daveoxley.cnery.dao.SceneConditionDAO; import com.workplacesystems.queuj.Process; import com.workplacesystems.queuj.process.ProcessImplServer; import com.workplacesystems.queuj.process.ProcessWrapper; import com.workplacesystems.queuj.process.QueujFactory; import java.io.Serializable; import java.util.Collection; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; import org.jboss.seam.Component; import org.jboss.seam.annotations.Name; /** * * @author Dave Oxley <dave@daveoxley.co.uk> */ @Entity @Name("sceneEntity") @Table(name="scene") public class Scene extends BaseEntity implements ConditionProvider<SceneCondition>, Comparable<Scene>, Serializable { public enum StatePersistence { TRIGGER("cn.enum.Scene.StatePersistence.Trigger"), ACTIVE("cn.enum.Scene.StatePersistence.Active"), TIMED_ACTIVE("cn.enum.Scene.StatePersistence.TimedActive"); private final String description; StatePersistence(String description) { this.description = description; } public String getDescription() { return description; } }; public enum ResetAction { RESET_UNLESS_CHANGED("cn.enum.Scene.ResetAction.ResetUnlessChanged"), RESET("cn.enum.Scene.ResetAction.Reset"), LEAVE("cn.enum.Scene.ResetAction.Leave"), ZERO("cn.enum.Scene.ResetAction.Zero"); private final String description; ResetAction(String description) { this.description = description; } public String getDescription() { return description; } }; public enum GPSSceneAction { ACTIVATE_SCENE("cn.enum.Scene.GPSSceneAction.ActivateScene"), RESET_SCENE("cn.enum.Scene.GPSSceneAction.ResetScene"), DO_NOTHING("cn.enum.Scene.GPSSceneAction.DoNothing"); private final String description; GPSSceneAction(String description) { this.description = description; } public String getDescription() { return description; } }; private String name; private StatePersistence statePersistence; private int minutes; private ResetAction resetAction; private GPSSceneAction gpsEnterAreaAction; private GPSSceneAction gpsLeaveAreaAction; private int activateProcessId; private int deactivateProcessId; private boolean active; private Set<SceneAction> sceneActions; private Set<SceneCondition> sceneConditions; private Set<SceneActivation> sceneActivations; @Column(name="name", unique=true) @NotNull @Size(min = 1, max = 255) public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name="state_persistence") @Enumerated(EnumType.STRING) public StatePersistence getStatePersistence() { return statePersistence; } public void setStatePersistence(StatePersistence statePersistence) { this.statePersistence = statePersistence; } @Column(name="minutes") public int getMinutes() { return minutes; } public void setMinutes(int minutes) { this.minutes = minutes; } @Column(name="reset_action") @Enumerated(EnumType.STRING) public ResetAction getResetAction() { return resetAction; } public void setResetAction(ResetAction resetAction) { this.resetAction = resetAction; } @Column(name="gps_enter_area_action") @Enumerated(EnumType.STRING) public GPSSceneAction getGpsEnterAreaAction() { return gpsEnterAreaAction; } public void setGpsEnterAreaAction(GPSSceneAction gpsEnterAreaAction) { this.gpsEnterAreaAction = gpsEnterAreaAction; } @Column(name="gps_leave_area_action") @Enumerated(EnumType.STRING) public GPSSceneAction getGpsLeaveAreaAction() { return gpsLeaveAreaAction; } public void setGpsLeaveAreaAction(GPSSceneAction gpsLeaveAreaAction) { this.gpsLeaveAreaAction = gpsLeaveAreaAction; } @Column(name = "activate_process_id") public int getActivateProcessId() { return activateProcessId; } public void setActivateProcessId(int activateProcessId) { this.activateProcessId = activateProcessId; } @Column(name = "deactivate_process_id") public int getDeactivateProcessId() { return deactivateProcessId; } public void setDeactivateProcessId(int deactivateProcessId) { this.deactivateProcessId = deactivateProcessId; } @Column(name = "active") public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; } @OneToMany(mappedBy="scene",cascade = CascadeType.ALL) public Set<SceneAction> getSceneActions() { return sceneActions; } public void setSceneActions(Set sceneActions) { this.sceneActions = sceneActions; } @OneToMany(mappedBy="scene",cascade = CascadeType.ALL) public Set<SceneCondition> getSceneConditions() { return sceneConditions; } public void setSceneConditions(Set<SceneCondition> sceneConditions) { this.sceneConditions = sceneConditions; } @OneToMany(mappedBy="scene",cascade = CascadeType.ALL) public Set<SceneActivation> getSceneActivations() { return sceneActivations; } public void setSceneActivations(Set<SceneActivation> sceneActivations) { this.sceneActivations = sceneActivations; } @Override public int compareTo(Scene o) { if (getName() == null || o.getName() == null) return (getName() != null ? -1 : (o.getName() == null ? 0 : 1)); else return getName().compareTo(o.getName()); } @Transient public Process<Integer> getActivateProcess() { ProcessWrapper<Integer> pw = ((ProcessImplServer)QueujFactory.getProcessServer((String)null, null)).get(getActivateProcessId()); if (pw == null) return null; return new Process<Integer>(pw); } @Transient public Process<Integer> getDeactivateProcess() { ProcessWrapper<Integer> pw = ((ProcessImplServer)QueujFactory.getProcessServer((String)null, null)).get(getDeactivateProcessId()); if (pw == null) return null; return new Process<Integer>(pw); } @Override @Transient public Collection<SceneCondition> getConditions() { SceneConditionDAO scdao = (SceneConditionDAO)Component.getInstance(SceneConditionDAO.class); return scdao.findSceneConditions(this, null); } }