package org.openhab.domain.model; import org.openhab.domain.IOpenHABWidgetProvider; import org.openhab.domain.util.IColorParser; import org.openhab.domain.util.ILogger; import java.util.Collection; import java.util.HashMap; import java.util.UUID; /** * Created by Tony Alpskog in 2013. */ public class Room { private static final String TAG = "Room"; private HashMap<Direction, Room> roomAlignment; private String mName; private UUID id; private String mGroupWidgetId; // private String mSitemapId; private HashMap<UUID, GraphicUnit> unitHash = null; private UUID mLatestWidgetUpdateUUID; private OpenHABWidget mLocalWidget; private int mBackgroundImageResourceId; private final IOpenHABWidgetProvider mWidgetProvider; private final ILogger mLogger; private final IColorParser mColorParser; private String mBackgroundImageFilePath; public Room(String groupItemName, String name, int backgroundImageResourceId, ILogger logger, IColorParser colorParser, IOpenHABWidgetProvider widgetProvider) { this(groupItemName, name, logger, colorParser, widgetProvider); mBackgroundImageResourceId = backgroundImageResourceId; } public Room(String groupItemId, String name, ILogger logger, IColorParser colorParser, IOpenHABWidgetProvider widgetProvider) { this(logger, colorParser, widgetProvider); mGroupWidgetId = groupItemId; if(groupItemId == null || groupItemId.isEmpty()) mLocalWidget = new OpenHABWidget(logger); mName = name; id = UUID.randomUUID(); roomAlignment = new HashMap<Direction, Room>(6); unitHash = new HashMap<UUID, GraphicUnit>(); } private Room(ILogger logger, IColorParser colorParser, IOpenHABWidgetProvider widgetProvider) { mLogger = logger; mColorParser = colorParser; mWidgetProvider = widgetProvider; } public Room shallowClone() { Room copy = new Room(mLogger, mColorParser, mWidgetProvider); copy.roomAlignment = (HashMap<Direction, Room>) this.roomAlignment.clone(); copy.mName = this.mName; copy.id = this.id; copy.mGroupWidgetId = this.mGroupWidgetId; copy.unitHash = (HashMap<UUID, GraphicUnit>) this.unitHash.clone(); copy.mLatestWidgetUpdateUUID = this.mLatestWidgetUpdateUUID; copy.mLocalWidget = this.mLocalWidget; copy.mBackgroundImageResourceId = this.mBackgroundImageResourceId; copy.mBackgroundImageFilePath = this.mBackgroundImageFilePath; return copy; } public void setAlignment(Room room, Direction alignment) { roomAlignment.put(alignment, room); } public Room getRoomByAlignment(Direction direction) { return roomAlignment.get(direction); } //Check if this room has alignments to input room public boolean contains(Room room) { for (Room alignmentRoom : roomAlignment.values()) { if (room.id == alignmentRoom.getId()) return true; } return false; } //Remove all alignments to input room public void removeAlignment(Room room) { for (Room alignmentRoom : roomAlignment.values()) { if (room.id == alignmentRoom.getId()) roomAlignment.remove(alignmentRoom); } } public String getGroupWidgetId() { return mGroupWidgetId; } public void setGroupWidgetId(String groupWidgetId) { mGroupWidgetId = groupWidgetId; } public UUID isUpdated() { return mLatestWidgetUpdateUUID; } public UUID getId() { return id; } public void addUnit(GraphicUnit gUnit) { unitHash.put(gUnit.getId(), gUnit); } public void removeUnit(GraphicUnit gUnit) { unitHash.remove(gUnit.getId()); //TA: TODO - Add widget removal here too } public Collection<GraphicUnit> getUnits() { return unitHash.values(); } public boolean contains(OpenHABWidget widget) { boolean isContained = false; String strLogAll = "full Room widget list: "; for (GraphicUnit gu : unitHash.values()) { strLogAll += gu.getOpenHABWidget().getId() + ", "; if (gu.getOpenHABWidget().getId().equals(widget.getId())) isContained = true; } mLogger.d(TAG, "contains() -> " + widget.getId() + " is " + (isContained? "": "NOT") + " contained in " + strLogAll); return isContained; } public GraphicUnit getUnit(UUID unitId) { return unitHash.get(unitId); } public String getName() { return mName; } public void setName(String name) { this.mName = name; } public String toString() { return mName; } public OpenHABWidget getRoomWidget() { if(mLocalWidget != null) return mLocalWidget; return mWidgetProvider.getWidgetByID(mGroupWidgetId); } public int getBackgroundImageResourceId() { return mBackgroundImageResourceId; } public String getBackgroundImageFilePath() { return mBackgroundImageFilePath; } public void setBackgroundImageFilePath(String backgroundImageFilePath) { mBackgroundImageFilePath = backgroundImageFilePath; } }