From 084f16a7374b17bf56d23e7d74381e6d02b903df Mon Sep 17 00:00:00 2001
From: joalhelk <joalhelk@jyu.fi>
Date: Mon, 17 Jan 2022 13:18:20 +0200
Subject: [PATCH] created abstract class for panels and value updates to panels

---
 .../com/joelhelkala/watcherGui/Node/Node.java | 10 ++-
 .../watcherGui/Node/NodeData/NodeData.java    |  4 +
 .../watcherGui/frames/WelcomePage.java        |  3 +-
 .../frames/panels/AbstractValuePanel.java     | 50 ++++++++++++
 .../frames/panels/HumidityPanel.java          | 14 ++++
 .../frames/panels/LuminosityPanel.java        | 14 ++++
 .../frames/panels/TemperaturePanel.java       | 76 ++++++-------------
 .../frames/subframes/NodeDataFrame.java       | 12 ++-
 8 files changed, 123 insertions(+), 60 deletions(-)
 create mode 100644 WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/AbstractValuePanel.java
 create mode 100644 WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/HumidityPanel.java
 create mode 100644 WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/LuminosityPanel.java

diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/Node.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/Node.java
index 148664a..deb4cd6 100644
--- a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/Node.java
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/Node.java
@@ -70,6 +70,13 @@ public class Node {
 		return data.getHumidity();
 	}
 	
+
+	public Integer getRecentLuminosity() {
+		NodeData data = findRecentData();
+		if(data == null) return 0;
+		return data.getLuminosity();
+	}
+	
 	
 	public LocalDateTime getRecentDate() {
 		NodeData data = findRecentData();
@@ -102,6 +109,5 @@ public class Node {
 			Integer lux = obj.getInt("luminosity");
 			data.add(new NodeData(measured_at, temp, humidity, lux));
 		}
-	}
-	
+	}	
 }
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/NodeData/NodeData.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/NodeData/NodeData.java
index 857d012..7a9cde0 100644
--- a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/NodeData/NodeData.java
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/Node/NodeData/NodeData.java
@@ -33,4 +33,8 @@ public class NodeData {
 	public Integer getHumidity() {
 		return humidity;
 	}
+
+	public Integer getLuminosity() {
+		return luminosity;
+	}
 }
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/WelcomePage.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/WelcomePage.java
index 029662b..b2a9071 100644
--- a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/WelcomePage.java
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/WelcomePage.java
@@ -114,7 +114,7 @@ public class WelcomePage implements MouseListener, ActionListener {
 		nodeDataLabel.addMouseListener(this);
 		nodeDataLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
 		
-		// Set as the chosen sectien
+		// Set as the chosen section
 		nodeDataLabel.setBackground(gray);
 		chosen_label = nodeDataLabel;
 		leftPanel.add(nodeDataLabel);
@@ -175,6 +175,7 @@ public class WelcomePage implements MouseListener, ActionListener {
 		bottomPanel.add(logoutLabel);
 		frame.getContentPane().add(bottomPanel);
 		
+		// MAIN PANEL
 		// Add frames to a Cardlayout panel which can be used to swap between panels
 		// This is used for navigationbar on the left
 		stagePanel = new JPanel();
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/AbstractValuePanel.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/AbstractValuePanel.java
new file mode 100644
index 0000000..7b6a9ad
--- /dev/null
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/AbstractValuePanel.java
@@ -0,0 +1,50 @@
+package com.joelhelkala.watcherGui.frames.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+
+// Abstract class for displaying the values of temperature, humidity and luminosity
+public abstract class AbstractValuePanel extends JPanel {
+	private JLabel label;
+	private Integer value;
+	private Character symbol;
+	
+	/*
+	 * Default constructor, 
+	 */
+	public AbstractValuePanel(Character symbol, String title) {
+		this(null, symbol, title);
+	}
+	
+	// Constructor with given value
+	public AbstractValuePanel(Integer value, Character symbol, String title) {
+		this.value = value;
+		this.symbol = symbol;
+		
+		setLayout(new BorderLayout());
+		
+		String value_string = "No value"; 
+		if(this.value != null)  value_string = this.value + "" + this.symbol;
+		label = new JLabel(value_string);
+		
+		label.setForeground(java.awt.Color.white);
+		label.setHorizontalAlignment(SwingConstants.CENTER);
+		label.setFont(new Font(null, Font.BOLD, 40));
+		add(label, BorderLayout.CENTER);
+		
+		JLabel titleLabel = new JLabel(title);
+		titleLabel.setForeground(java.awt.Color.white);
+		titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
+		titleLabel.setFont(new Font(null, Font.BOLD, 20));
+		add(titleLabel, BorderLayout.SOUTH);
+	}
+	
+	// Updates the label with new value
+	public void updateData(int value) {
+		label.setText(value + "" + symbol);
+	}
+}
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/HumidityPanel.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/HumidityPanel.java
new file mode 100644
index 0000000..016fa4f
--- /dev/null
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/HumidityPanel.java
@@ -0,0 +1,14 @@
+package com.joelhelkala.watcherGui.frames.panels;
+
+public class HumidityPanel extends AbstractValuePanel {
+	private static final Character symbol = '%';
+	private static final String title = "Humidity";
+	// Constructor
+	public HumidityPanel() {
+		super(symbol, title);
+	}
+	
+	public HumidityPanel(int value) {
+		super(value, symbol, title);
+	}
+}
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/LuminosityPanel.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/LuminosityPanel.java
new file mode 100644
index 0000000..9481c81
--- /dev/null
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/LuminosityPanel.java
@@ -0,0 +1,14 @@
+package com.joelhelkala.watcherGui.frames.panels;
+
+public class LuminosityPanel extends AbstractValuePanel {
+	private final static Character symbol = ' ';
+	private final static String title = "Luminosity";
+	
+	public LuminosityPanel() {
+		super(symbol, title);
+	}
+	
+	public LuminosityPanel(int value) {
+		super(value, symbol, title);
+	}
+}
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/TemperaturePanel.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/TemperaturePanel.java
index 7b267c0..e426291 100644
--- a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/TemperaturePanel.java
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/panels/TemperaturePanel.java
@@ -1,77 +1,47 @@
 package com.joelhelkala.watcherGui.frames.panels;
 
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.SwingConstants;
-
-import org.json.JSONArray;
-
-import com.joelhelkala.watcherGui.Node.Node;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
 import java.text.Format;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 
-public class TemperaturePanel extends JPanel {
-	
-	private JLabel temp;
-	private static final Character degree = 0xB0;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+
+import java.awt.BorderLayout;
+
+public class TemperaturePanel extends AbstractValuePanel {
 	
+	private static final Character symbol = 0xB0;
+	private static final String title = "Temperature";
+	static DateTimeFormatter formatter = DateTimeFormatter.ISO_WEEK_DATE;
 	public TemperaturePanel() {
-		setLayout(new BorderLayout());
-		JLabel day = new JLabel(getDay());
-		day.setForeground(java.awt.Color.white);
-		day.setHorizontalAlignment(SwingConstants.CENTER);
-		add(day, BorderLayout.NORTH);
-		
-		String temperature = "-17" + degree; 
-		JLabel temp = new JLabel(temperature);
-		
-		temp.setForeground(java.awt.Color.white);
-		temp.setHorizontalAlignment(SwingConstants.CENTER);
-		temp.setFont(new Font(null, Font.BOLD, 40));
-		add(temp, BorderLayout.CENTER);
+		super(symbol, title);
 	}
 	
-	public TemperaturePanel(Node node) {
-		Integer temp_value = null;
-		String date = "No value!";
-		if(node != null) {
-			temp_value = node.getRecentTemperature();
-			LocalDateTime datetime = node.getRecentDate();
-			if (datetime != null) date = datetime.toString();
-		}
-		setLayout(new BorderLayout());
-		JLabel day = new JLabel(date);
+	public TemperaturePanel(Integer value, LocalDateTime date) {
+	 	super(value, symbol, title);
+	 	Integer year = date.getYear();
+	 	Integer month = date.getMonthValue();
+	 	Integer day_num = date.getDayOfMonth();
+	 	
+	 	Integer hours = date.getHour();
+	 	Integer minutes = date.getMinute();
+	 	
+	 	String date_value = "" + day_num + '.' + month + "." + year + " " + hours + ":" + minutes;
+		JLabel day = new JLabel(date_value);
 		day.setForeground(java.awt.Color.white);
 		day.setHorizontalAlignment(SwingConstants.CENTER);
 		add(day, BorderLayout.NORTH);
-		
-		String temperature = "No value"; 
-		if(temp_value != null)  temperature = temp_value + "" + degree;
-		temp = new JLabel(temperature);
-		
-		temp.setForeground(java.awt.Color.white);
-		temp.setHorizontalAlignment(SwingConstants.CENTER);
-		temp.setFont(new Font(null, Font.BOLD, 40));
-		add(temp, BorderLayout.CENTER);
 	}
 	
-	private String getDay() {
+	private static String getDay() {
 		Calendar cal = Calendar.getInstance();  
 		Format f = new SimpleDateFormat("EEEE");
 		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
 		String date = f.format(new Date()) + " " + sdf.format(cal.getTime()); 
 		return date;  
 	}
-	
-	// Updates the temperature value to most recent node temp
-	public void updateData(Node node) {
-		String text = node.getRecentTemperature().toString() + "" + degree;
-		temp.setText(text);
-	}
 }
diff --git a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/subframes/NodeDataFrame.java b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/subframes/NodeDataFrame.java
index 3d39c14..e431d7a 100644
--- a/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/subframes/NodeDataFrame.java
+++ b/WatcherGui/src/main/java/com/joelhelkala/watcherGui/frames/subframes/NodeDataFrame.java
@@ -5,7 +5,9 @@ import java.awt.Color;
 import javax.swing.JPanel;
 
 import com.joelhelkala.watcherGui.Node.Node;
+import com.joelhelkala.watcherGui.frames.panels.HumidityPanel;
 import com.joelhelkala.watcherGui.frames.panels.LineChartPanel;
+import com.joelhelkala.watcherGui.frames.panels.LuminosityPanel;
 import com.joelhelkala.watcherGui.frames.panels.ProgressBarCirclePanel;
 import com.joelhelkala.watcherGui.frames.panels.TemperaturePanel;
 import com.joelhelkala.watcherGui.httpRequests.HttpRequests;
@@ -34,17 +36,19 @@ public class NodeDataFrame extends JPanel {
 		cardPanel.setBounds(0, 0, width, cardPanelHeight);
 		cardPanel.setLayout(null);
 		
-		tempCard = new TemperaturePanel(node);
+		tempCard = new TemperaturePanel(node.getRecentTemperature(), node.getRecentDate());
 		tempCard.setBackground(lightgray);
 		tempCard.setBounds(15, 10, cardWidth, cardPanelHeight-20);
 		cardPanel.add(tempCard);
 		
-		humidCard = new ProgressBarCirclePanel().makeUI("Humidity", node.getRecentHumidity());
+		// Updating this animation was hard so I just changed it to regular
+		//humidCard = new ProgressBarCirclePanel().makeUI("Humidity", node.getRecentHumidity());
+		humidCard = new HumidityPanel(node.getRecentHumidity());
 		humidCard.setBackground(lightgray);
 		humidCard.setBounds(cardWidth+30, 10, cardWidth, cardPanelHeight-20);
 		cardPanel.add(humidCard);
 		
-		JPanel card3 = new JPanel();
+		JPanel card3 = new LuminosityPanel(node.getRecentLuminosity());
 		card3.setBackground(lightgray);
 		card3.setBounds(cardWidth*2+45, 10, cardWidth, cardPanelHeight-20);
 		cardPanel.add(card3);
@@ -65,7 +69,7 @@ public class NodeDataFrame extends JPanel {
 	
 	// Updates the frames data panels with given node information
 	public void updateData(Node node) {
-		tempCard.updateData(node);
+		tempCard.updateData(node.getRecentTemperature());
 		chartCard.updateData(node.getData());
 		// TODO: perhaps change the humidity to normal label since the updating is hard
 	}
-- 
GitLab