aboutsummaryrefslogtreecommitdiff
path: root/src/main/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/model')
-rw-r--r--src/main/model/BrowserState.java40
-rw-r--r--src/main/model/layout/BlockLayout.java1
-rw-r--r--src/main/model/layout/FlexLayout.java1
-rw-r--r--src/main/model/layout/Layout.java1
-rw-r--r--src/main/model/util/Event.java66
-rw-r--r--src/main/model/util/EventLog.java60
6 files changed, 168 insertions, 1 deletions
diff --git a/src/main/model/BrowserState.java b/src/main/model/BrowserState.java
new file mode 100644
index 0000000..7f948dc
--- /dev/null
+++ b/src/main/model/BrowserState.java
@@ -0,0 +1,40 @@
+package model;
+
+import model.util.Event;
+import model.util.EventLog;
+
+import java.util.ArrayDeque;
+
+public class BrowserState {
+ private ArrayDeque<String> tabs;
+ private String currentTab;
+
+ public BrowserState(ArrayDeque<String> tabs, String currentTab) {
+ this.tabs = tabs;
+ this.currentTab = currentTab;
+ }
+
+ public ArrayDeque<String> getTabs() {
+ return this.tabs;
+ }
+
+ public String getCurrentTab() {
+ return this.currentTab;
+ }
+
+ public void setCurrentTab(String tab) {
+ this.currentTab = tab;
+ }
+
+ public void addTab(String added) {
+ if (!this.tabs.contains(added)) {
+ this.tabs.add(added);
+ }
+ EventLog.getInstance().logEvent(new Event("Added tab " + added));
+ }
+
+ public void removeTab(String removed) {
+ this.tabs.remove(removed);
+ EventLog.getInstance().logEvent(new Event("Removed tab " + removed));
+ }
+}
diff --git a/src/main/model/layout/BlockLayout.java b/src/main/model/layout/BlockLayout.java
index 8808d80..c2ec40d 100644
--- a/src/main/model/layout/BlockLayout.java
+++ b/src/main/model/layout/BlockLayout.java
@@ -15,6 +15,7 @@ public class BlockLayout extends Layout {
this.getPreviousSibling().ifPresent(
sibling -> this.setY(sibling.getY() + sibling.getHeight()));
+
this.setDimension(this.getParent().getDimension());
for (Layout child : this.getChildren()) {
diff --git a/src/main/model/layout/FlexLayout.java b/src/main/model/layout/FlexLayout.java
index 389e8d0..7b1e759 100644
--- a/src/main/model/layout/FlexLayout.java
+++ b/src/main/model/layout/FlexLayout.java
@@ -12,6 +12,5 @@ public class FlexLayout extends Layout {
// todo: we'll cheese it, and treat it like a sideways block
public void layout() {
-
}
}
diff --git a/src/main/model/layout/Layout.java b/src/main/model/layout/Layout.java
index ba9f604..f9ef70e 100644
--- a/src/main/model/layout/Layout.java
+++ b/src/main/model/layout/Layout.java
@@ -72,6 +72,7 @@ public abstract class Layout {
public static DocumentLayout constructTree(ArrayList<Node> html) {
DocumentLayout result = new DocumentLayout();
result.setChildren(constructTree(html, result));
+ result.layout();
return result;
}
diff --git a/src/main/model/util/Event.java b/src/main/model/util/Event.java
new file mode 100644
index 0000000..8a42ef8
--- /dev/null
+++ b/src/main/model/util/Event.java
@@ -0,0 +1,66 @@
+package model.util;
+
+import java.util.Calendar;
+import java.util.Date;
+
+
+/**
+ * Represents an alarm system event.
+ */
+public class Event {
+ private static final int HASH_CONSTANT = 13;
+ private Date dateLogged;
+ private String description;
+
+ /**
+ * Creates an event with the given description
+ * and the current date/time stamp.
+ * @param description a description of the event
+ */
+ public Event(String description) {
+ dateLogged = Calendar.getInstance().getTime();
+ this.description = description;
+ }
+
+ /**
+ * Gets the date of this event (includes time).
+ * @return the date of the event
+ */
+ public Date getDate() {
+ return dateLogged;
+ }
+
+ /**
+ * Gets the description of this event.
+ * @return the description of the event
+ */
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other == null) {
+ return false;
+ }
+
+ if (other.getClass() != this.getClass()) {
+ return false;
+ }
+
+ Event otherEvent = (Event) other;
+
+ return (this.dateLogged.equals(otherEvent.dateLogged)
+ && this.description.equals(otherEvent.description));
+ }
+
+ @Override
+ public int hashCode() {
+ return (HASH_CONSTANT * dateLogged.hashCode() + description.hashCode());
+ }
+
+ @Override
+ public String toString() {
+ return dateLogged.toString() + "\n" + description;
+ }
+}
diff --git a/src/main/model/util/EventLog.java b/src/main/model/util/EventLog.java
new file mode 100644
index 0000000..507c9b2
--- /dev/null
+++ b/src/main/model/util/EventLog.java
@@ -0,0 +1,60 @@
+package model.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * Represents a log of alarm system events.
+ * We use the Singleton Design Pattern to ensure that there is only
+ * one EventLog in the system and that the system has global access
+ * to the single instance of the EventLog.
+ */
+public class EventLog implements Iterable<Event> {
+ /** the only EventLog in the system (Singleton Design Pattern) */
+ private static EventLog theLog;
+ private Collection<Event> events;
+
+ /**
+ * Prevent external construction.
+ * (Singleton Design Pattern).
+ */
+ private EventLog() {
+ events = new ArrayList<Event>();
+ }
+
+ /**
+ * Gets instance of EventLog - creates it
+ * if it doesn't already exist.
+ * (Singleton Design Pattern)
+ * @return instance of EventLog
+ */
+ public static EventLog getInstance() {
+ if (theLog == null) {
+ theLog = new EventLog();
+ }
+
+ return theLog;
+ }
+
+ /**
+ * Adds an event to the event log.
+ * @param e the event to be added
+ */
+ public void logEvent(Event e) {
+ events.add(e);
+ }
+
+ /**
+ * Clears the event log and logs the event.
+ */
+ public void clear() {
+ events.clear();
+ logEvent(new Event("Event log cleared."));
+ }
+
+ @Override
+ public Iterator<Event> iterator() {
+ return events.iterator();
+ }
+}