diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/WeatherStation/resources/FXML/WeatherStation.fxml b/WeatherStation/resources/FXML/WeatherStation.fxml
index b2d63fd..d6d013f 100644
--- a/WeatherStation/resources/FXML/WeatherStation.fxml
+++ b/WeatherStation/resources/FXML/WeatherStation.fxml
@@ -9,19 +9,37 @@
+ prefHeight="-Infinity" prefWidth="-Infinity"
+ style="-fx-background-color: #F5F5F5;">
-
-
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WeatherStation/src/launch/Launch.java b/WeatherStation/src/launch/Launch.java
index 01b60b4..c235ff4 100644
--- a/WeatherStation/src/launch/Launch.java
+++ b/WeatherStation/src/launch/Launch.java
@@ -3,27 +3,40 @@ package launch;
import javafx.application.Application;
import javafx.stage.Stage;
import modele.ConcreteSensor;
-import modele.Sensor;
import modele.SensorManager;
import modele.VirtualSensor;
import views.WeatherController;
import java.util.ArrayList;
-import java.util.List;
public class Launch extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
- //Create captors here
+ //CREATE SENSOR MANAGER
SensorManager.getInstance();
- VirtualSensor virtualSensor = new VirtualSensor(new ArrayList<>(), 0, "testmachin", 54);
- ConcreteSensor concreteSensor1 = new ConcreteSensor(3);
- ConcreteSensor concreteSensor2 = new ConcreteSensor(78);
- virtualSensor.addSensor(concreteSensor1,concreteSensor1.getWeight());
- virtualSensor.addSensor(concreteSensor2,concreteSensor2.getWeight());
+ //CREATE ALL SENSORS
+ //CREATE VIRTUAL SENSOR 2 & CHILDREN
+ ConcreteSensor concreteSensor3 = new ConcreteSensor(4, "concrete3",78,"random");
+ ConcreteSensor concreteSensor4 = new ConcreteSensor(5,"concrete4",47,"random");
+ VirtualSensor virtualSensor2 = new VirtualSensor(new ArrayList<>(), 4, "Virtual Sensor 2", 69);
+ virtualSensor2.addSensor(concreteSensor3, concreteSensor3.getWeight().getValue());
+ virtualSensor2.addSensor(concreteSensor4, concreteSensor4.getWeight().getValue());
- SensorManager.getInstance().addSensor(virtualSensor);
+ //CREATE VIRTUAL SENSOR 1 & CHILDREN
+ ConcreteSensor concreteSensor1 = new ConcreteSensor(2, "concrete1",78,"random");
+ ConcreteSensor concreteSensor2 = new ConcreteSensor(3,"concrete2",47,"random");
+ VirtualSensor virtualSensor1 = new VirtualSensor(new ArrayList<>(), 1, "Virtual Sensor 1", 54);
+ virtualSensor1.addSensor(concreteSensor1, concreteSensor1.getWeight().getValue());
+ virtualSensor1.addSensor(concreteSensor2, concreteSensor2.getWeight().getValue());
+
+ virtualSensor1.addSensor(virtualSensor2, virtualSensor2.getWeight().getValue());
+ //ADD SENSORS TO MANAGER
+ SensorManager.getInstance().addSensor(virtualSensor1);
+ //SensorManager.getInstance().addSensor(virtualSensor2);
+
+ //MARCHE PAS ( C SAD )
+ // concreteSensor1.changeGenerationMethod("cpu");
WeatherController weatherController = new WeatherController(SensorManager.getInstance().getSensorList(), "FXML/WeatherStation.fxml","WeatherStation");
diff --git a/WeatherStation/src/modele/ConcreteSensor.java b/WeatherStation/src/modele/ConcreteSensor.java
index 79a31cb..d5bfaea 100644
--- a/WeatherStation/src/modele/ConcreteSensor.java
+++ b/WeatherStation/src/modele/ConcreteSensor.java
@@ -1,23 +1,43 @@
package modele;
-public class ConcreteSensor extends Sensor {
- private double weight;
+import javafx.beans.property.SimpleDoubleProperty;
+import javafx.beans.property.SimpleStringProperty;
+
+import static java.lang.System.exit;
- public ConcreteSensor(double weight) {
- this.weight = weight;
+public class ConcreteSensor extends Sensor {
+ public ConcreteSensor(int id, String name, int weight, String generation) {
+ this.name = new SimpleStringProperty(name);
+ this.id = id;
+ this.weight = new SimpleDoubleProperty(weight);
+ this.changeGenerationMethod(generation);
+ updateTemperature();
+ // System.out.println("La température du capteur "+this.getName().getValue()+" est de "+this.getTemp());
}
- public double getWeight() {
- return weight;
+ public void changeGenerationMethod(String generation) {
+ switch(generation){
+ case "random":
+ this.setTempGenerator(new TempRandom());
+ break;
+ case "cpu":
+ this.setTempGenerator(new TempCPU());
+ break;
+ default:
+ System.out.println("Choix de génération incorrect.");
+ exit(1);
+ }
}
+ @Override
public void updateTemperature() {
+ this.setTemp(getTempGenerator().generateTemperature());
+ System.out.println("température de "+this.getName().getValue()+": "+getTemp());
}
@Override
- public double generateTemperature() {
- double min = -273.15;
- double max = 1000;
- return Math.floor(Math.random() * (max - min + 1) + min); }
+ public T accept(Visitor v) {
+ return v.visit(this);
+ }
}
diff --git a/WeatherStation/src/modele/Sensor.java b/WeatherStation/src/modele/Sensor.java
index 3abeeaf..0b2657b 100644
--- a/WeatherStation/src/modele/Sensor.java
+++ b/WeatherStation/src/modele/Sensor.java
@@ -4,9 +4,10 @@ import javafx.beans.property.*;
public abstract class Sensor {
int id;
- StringProperty name;
- double weight;
- private Property temp = new SimpleObjectProperty<>(0d);
+ private TempGenerator tempGenerator;
+ protected StringProperty name;
+ protected DoubleProperty weight;
+ protected DoubleProperty temp = new SimpleDoubleProperty();
public void setTemp(double tmp){
this.temp.setValue(tmp);
@@ -19,10 +20,24 @@ public abstract class Sensor {
return name;
}
- public Property getTempProperty(){
+ public DoubleProperty getTempProperty(){
return temp;
}
- public abstract double generateTemperature();
+ public abstract void updateTemperature();
+
+ public abstract T accept(Visitor v);
+
+ public DoubleProperty getWeight(){
+ return weight;
+ }
+
+ public TempGenerator getTempGenerator() {
+ return tempGenerator;
+ }
+
+ public void setTempGenerator(TempGenerator tempGenerator) {
+ this.tempGenerator = tempGenerator;
+ }
}
diff --git a/WeatherStation/src/modele/TempCPU.java b/WeatherStation/src/modele/TempCPU.java
new file mode 100644
index 0000000..ae2ffae
--- /dev/null
+++ b/WeatherStation/src/modele/TempCPU.java
@@ -0,0 +1,56 @@
+package modele;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+public class TempCPU implements TempGenerator, Runnable {
+ private Thread thread;
+ private boolean running = false;
+ double actualtemp = 666;
+ public void start() {
+ running = true;
+ thread.start();
+ }
+
+ public void stop() {
+ running = false;
+ try {
+ thread.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ @Override
+ public double generateTemperature() {
+ start();
+ return actualtemp;
+ }
+
+ @Override
+ public void run() {
+ while (running) {
+ try {
+ String cmd = "wmic /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature";
+ Process process = Runtime.getRuntime().exec(cmd);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (!line.contains("CurrentTemperature")) {
+ int temp = Integer.parseInt(line);
+ temp =temp / 10 - 273;
+ System.out.println("Current CPU temperature: " + temp + " C");
+ actualtemp = temp;
+ }
+ }
+ reader.close();
+ // Sleep for a certain amount of time before getting the temperature again
+ Thread.sleep(1000);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+}
diff --git a/WeatherStation/src/modele/TempGenerator.java b/WeatherStation/src/modele/TempGenerator.java
new file mode 100644
index 0000000..cfa512d
--- /dev/null
+++ b/WeatherStation/src/modele/TempGenerator.java
@@ -0,0 +1,7 @@
+package modele;
+
+import java.util.List;
+
+public interface TempGenerator {
+ public double generateTemperature();
+}
diff --git a/WeatherStation/src/modele/TempRandom.java b/WeatherStation/src/modele/TempRandom.java
new file mode 100644
index 0000000..e88aeb2
--- /dev/null
+++ b/WeatherStation/src/modele/TempRandom.java
@@ -0,0 +1,10 @@
+package modele;
+
+public class TempRandom implements TempGenerator{
+ @Override
+ public double generateTemperature() {
+ double min = -273.15;
+ double max = 1000;
+ return Math.floor(Math.random() * (max - min + 1) + min);
+ }
+}
diff --git a/WeatherStation/src/modele/TreeItemFactoryVisitor.java b/WeatherStation/src/modele/TreeItemFactoryVisitor.java
new file mode 100644
index 0000000..bdadb1f
--- /dev/null
+++ b/WeatherStation/src/modele/TreeItemFactoryVisitor.java
@@ -0,0 +1,26 @@
+package modele;
+
+import javafx.scene.control.TreeItem;
+
+public class TreeItemFactoryVisitor implements Visitor>{
+ @Override
+ public TreeItem visit(ConcreteSensor c) {
+ return new TreeItem<>(c);
+ }
+
+ @Override
+ public TreeItem visit(VirtualSensor v) {
+ TreeItem item = new TreeItem<>(v);
+ for (Sensor sensor: v.getSensors()) {
+ TreeItem childItem;
+ if(sensor instanceof VirtualSensor){
+ childItem = visit((VirtualSensor) sensor);
+ }
+ else {
+ childItem = new TreeItem<>(sensor);
+ }
+ item.getChildren().add(childItem);
+ }
+ return item;
+ }
+}
diff --git a/WeatherStation/src/modele/VirtualSensor.java b/WeatherStation/src/modele/VirtualSensor.java
index 6431fb2..9547f69 100644
--- a/WeatherStation/src/modele/VirtualSensor.java
+++ b/WeatherStation/src/modele/VirtualSensor.java
@@ -1,5 +1,6 @@
package modele;
+import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import java.util.ArrayList;
@@ -8,42 +9,50 @@ import java.util.List;
import java.util.Map;
public class VirtualSensor extends Sensor {
- private List sensors =new ArrayList<>();
- private Map weights = new HashMap<>();
+ private List sensors =new ArrayList<>();
+ private Map weights = new HashMap<>();
public VirtualSensor(List sensorsList, int id, String name, int weight) {
this.name = new SimpleStringProperty(name);
this.id = id;
- this.weight = weight;
+ this.weight = new SimpleDoubleProperty(weight);
+ this.temp = new SimpleDoubleProperty(0);
+ this.updateTemperature();
+ // System.out.println("La température du capteur "+this.getName().getValue()+" est de "+this.getTemp());
}
- public void addSensor(ConcreteSensor sensor, double weight) {
+ public void addSensor(Sensor sensor, double weight) {
sensors.add(sensor);
weights.put(sensor, weight);
sensor.getTempProperty().addListener((observable, oldValue, newValue) -> updateTemperature());
+ updateTemperature();
}
+ @Override
public void updateTemperature() {
double tempSum = 0;
double weightSum = 0;
- for (ConcreteSensor sensor : sensors) {
- tempSum += sensor.getTemp() * weights.get(sensor);
- weightSum += weights.get(sensor);
+ if(sensors.isEmpty()){
+ this.setTemp(0);
+ }
+ else {
+ for (Sensor sensor : sensors) {
+ tempSum += sensor.getTemp();
+ weightSum += weights.get(sensor);
+ System.out.println("capteur " + sensor.getName().getValue() + " tempSum: " + tempSum + " weightSum: " + weightSum);
+ }
+ setTemp(tempSum / sensors.size());
+ System.out.println("température finale de "+this.getName().getValue()+" : "+this.getTemp());
}
- setTemp(tempSum / weightSum);
}
@Override
- public double generateTemperature() {
- double value = 0;
- double count = 0;
- for (Sensor sensor:
- sensors) {
- value += sensor.getTemp();
- count += 1;
- }
- value = value/count;
- return value;
+ public T accept(Visitor v) {
+ return v.visit(this);
+ }
+
+ public List getSensors(){
+ return sensors;
}
}
diff --git a/WeatherStation/src/modele/Visitor.java b/WeatherStation/src/modele/Visitor.java
new file mode 100644
index 0000000..eca3a5e
--- /dev/null
+++ b/WeatherStation/src/modele/Visitor.java
@@ -0,0 +1,6 @@
+package modele;
+
+public interface Visitor {
+ T visit(ConcreteSensor c);
+ T visit(VirtualSensor v);
+}
diff --git a/WeatherStation/src/views/WeatherController.java b/WeatherStation/src/views/WeatherController.java
index 8d32565..7a2e2ec 100644
--- a/WeatherStation/src/views/WeatherController.java
+++ b/WeatherStation/src/views/WeatherController.java
@@ -1,11 +1,19 @@
package views;
+import com.sun.javafx.collections.ObservableListWrapper;
+import javafx.beans.Observable;
+import javafx.beans.property.Property;
+import javafx.beans.property.StringProperty;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.*;
-import modele.ConcreteSensor;
-import modele.Sensor;
-import modele.SensorManager;
-import modele.VirtualSensor;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.layout.VBox;
+import javafx.util.converter.NumberStringConverter;
+import modele.*;
+import org.w3c.dom.Text;
import java.io.IOException;
import java.util.ArrayList;
@@ -13,63 +21,127 @@ import java.util.List;
public class WeatherController extends FXMLWindow {
+ TableColumn nameCol = new TableColumn<>("Name");
+ TableColumn tempCol = new TableColumn<>("Temperature");
- Sensor sensor;
+ @FXML
+ TableView tableview;
List sensorList;
-
+ TreeItem selectedSensor = null;
@FXML
Spinner tempSpinner;
-
+ @FXML
+ VBox vbox_droite;
+ @FXML
+ TextField nameField;
+ @FXML
+ TextField weightField;
+ @FXML
+ TextField tempField;
@FXML
TreeView tree;
+
public WeatherController(List sensorsList, String url, String title) throws IOException {
super(title, url);
- TreeItem root = new TreeItem<>(sensorsList.get(0));
+ sensorList = sensorsList;
+ TreeItem root = new TreeItem<>();
root.setExpanded(true);
+ tree.setShowRoot(false);
tree.setRoot(root);
- sensorList = sensorsList;
+ TreeItemFactoryVisitor treeFactory = new TreeItemFactoryVisitor();
- tree.setVisible(true);
- for (Sensor sensor : sensorsList) {
- TreeItem sensorItem = new TreeItem<>(sensor);
- root.getChildren().add(sensorItem);
+ for(Sensor s: sensorList){
+ if(s instanceof VirtualSensor){
+ VirtualSensor virtualSensor = (VirtualSensor) s;
+ TreeItem item = virtualSensor.accept(treeFactory);
+ root.getChildren().add(item);
+ }
+ else{
+ TreeItem item = s.accept(treeFactory);
+ root.getChildren().add(item);
+ }
}
+ tree.setVisible(true);
+ vbox_droite.setVisible(false);
+
+ nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
+
+ tempCol.setCellValueFactory(new PropertyValueFactory<>("temp"));
- this.initializeSensor();
- }
- public void initializeSensor(){
- //------------------------------------------------------------------------------------------------------
- sensor = new ConcreteSensor(56);
+ this.treeViewBinding();
+ }
+ public void treeViewBinding() {
+ //------------------------------------------------------------------------------------------------------
tree.setCellFactory(param -> new TreeCell() {
- protected void updateItem(Sensor item, boolean empty) {
- super.updateItem(item, empty);
+ @Override
+ protected void updateItem(Sensor sensor, boolean empty) {
+ super.updateItem(sensor, empty);
if (empty) {
- setText(null);
+ textProperty().unbind();
+ setText("");
} else {
- // setText(item.getName().getValue().toString());
- textProperty().bindBidirectional(item.getName());
+ textProperty().bind(sensor.getName());
+ setOnMouseClicked(event -> selectItem());
}
+
}
});
-
//------------------------------------------------------------------------------------------------------
// SPINNER
tempSpinner.setVisible(true);
+ Sensor sensor = sensorList.get(0);
sensor.getTempProperty().addListener((observable, oldValue, newValue) -> {
- System.out.println("La température a changé de " + oldValue + " à " + newValue);
+ System.out.println("La température du capteur "+sensor.getName().getValue()+ " a changée de "+oldValue + " à " + newValue);
});
- SpinnerValueFactory spinnerValueFactory= new SpinnerValueFactory.DoubleSpinnerValueFactory(-273,10000, sensor.getTemp(), 0.5);
+ SpinnerValueFactory spinnerValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(-273, 10000, sensor.getTemp(), 0.5);
tempSpinner.setValueFactory(spinnerValueFactory);
- tempSpinner.getValueFactory().valueProperty().bindBidirectional(sensor.getTempProperty());
- sensor.setTemp(sensor.generateTemperature());
- System.out.println("initialize spinner");
- System.out.println(tempSpinner.getValueFactory().getValue());
+ tempSpinner.getValueFactory().valueProperty().bindBidirectional(sensor.getTempProperty().asObject());
+ sensor.updateTemperature();
+ // System.out.println("initialize spinner");
+ // System.out.println(tempSpinner.getValueFactory().getValue());
+
+ }
+
+ public void selectItem(){
+ TreeItem selectedItem = tree.getSelectionModel().getSelectedItem();
+ if(selectedItem != null){
+ vbox_droite.setVisible(true);
+ if(selectedSensor != selectedItem){
+ if(selectedSensor != null ){
+ vboxUnbind(selectedSensor.getValue());
+ }
+
+ vboxBinding(selectedItem.getValue());
+ selectedSensor = selectedItem;
+ }
+ }
+ }
+
+
+ public void vboxUnbind(Sensor s){
+ nameField.textProperty().unbindBidirectional(s);
+ weightField.textProperty().unbindBidirectional(s);
+ tableview.getItems().clear();
+ tableview.refresh();
- };
+ }
+ public void vboxBinding(Sensor s){
+ nameField.textProperty().bindBidirectional(s.getName());
+ weightField.textProperty().bindBidirectional(s.getWeight(), new NumberStringConverter());
+ tempField.textProperty().bindBidirectional(s.getTempProperty(), new NumberStringConverter());
+
+ if(s instanceof VirtualSensor){
+ VirtualSensor s2 = (VirtualSensor) s;
+ ObservableList o = FXCollections.observableList(s2.getSensors());
+ tableview.setItems(o);
+ tableview.getColumns().addAll(nameCol, tempCol);
+ }
+
+ }
}
diff --git a/out/production/WeatherStation/FXML/WeatherStation.fxml b/out/production/WeatherStation/FXML/WeatherStation.fxml
index b2d63fd..d6d013f 100644
--- a/out/production/WeatherStation/FXML/WeatherStation.fxml
+++ b/out/production/WeatherStation/FXML/WeatherStation.fxml
@@ -9,19 +9,37 @@
+ prefHeight="-Infinity" prefWidth="-Infinity"
+ style="-fx-background-color: #F5F5F5;">
-
-
+
+
+
+
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/out/production/WeatherStation/launch/Launch.class b/out/production/WeatherStation/launch/Launch.class
index 4c7dfe6..1fc5df5 100644
Binary files a/out/production/WeatherStation/launch/Launch.class and b/out/production/WeatherStation/launch/Launch.class differ
diff --git a/out/production/WeatherStation/modele/ConcreteSensor.class b/out/production/WeatherStation/modele/ConcreteSensor.class
index cb528e1..e99a9e2 100644
Binary files a/out/production/WeatherStation/modele/ConcreteSensor.class and b/out/production/WeatherStation/modele/ConcreteSensor.class differ
diff --git a/out/production/WeatherStation/modele/Sensor.class b/out/production/WeatherStation/modele/Sensor.class
index de05671..7a40d5b 100644
Binary files a/out/production/WeatherStation/modele/Sensor.class and b/out/production/WeatherStation/modele/Sensor.class differ
diff --git a/out/production/WeatherStation/modele/SensorManager.class b/out/production/WeatherStation/modele/SensorManager.class
new file mode 100644
index 0000000..2e7a9cb
Binary files /dev/null and b/out/production/WeatherStation/modele/SensorManager.class differ
diff --git a/out/production/WeatherStation/modele/TempCPU.class b/out/production/WeatherStation/modele/TempCPU.class
new file mode 100644
index 0000000..136b888
Binary files /dev/null and b/out/production/WeatherStation/modele/TempCPU.class differ
diff --git a/out/production/WeatherStation/modele/TempGenerator.class b/out/production/WeatherStation/modele/TempGenerator.class
new file mode 100644
index 0000000..44bd5ec
Binary files /dev/null and b/out/production/WeatherStation/modele/TempGenerator.class differ
diff --git a/out/production/WeatherStation/modele/TempRandom.class b/out/production/WeatherStation/modele/TempRandom.class
new file mode 100644
index 0000000..e7fcff9
Binary files /dev/null and b/out/production/WeatherStation/modele/TempRandom.class differ
diff --git a/out/production/WeatherStation/modele/TreeItemFactoryVisitor.class b/out/production/WeatherStation/modele/TreeItemFactoryVisitor.class
new file mode 100644
index 0000000..5e07492
Binary files /dev/null and b/out/production/WeatherStation/modele/TreeItemFactoryVisitor.class differ
diff --git a/out/production/WeatherStation/modele/VirtualSensor.class b/out/production/WeatherStation/modele/VirtualSensor.class
index bb285b6..e820ee6 100644
Binary files a/out/production/WeatherStation/modele/VirtualSensor.class and b/out/production/WeatherStation/modele/VirtualSensor.class differ
diff --git a/out/production/WeatherStation/modele/Visitor.class b/out/production/WeatherStation/modele/Visitor.class
new file mode 100644
index 0000000..cef978c
Binary files /dev/null and b/out/production/WeatherStation/modele/Visitor.class differ
diff --git a/out/production/WeatherStation/views/WeatherController$1.class b/out/production/WeatherStation/views/WeatherController$1.class
index 6d02f91..bb5490a 100644
Binary files a/out/production/WeatherStation/views/WeatherController$1.class and b/out/production/WeatherStation/views/WeatherController$1.class differ
diff --git a/out/production/WeatherStation/views/WeatherController.class b/out/production/WeatherStation/views/WeatherController.class
index eed7e3d..1fcb6ba 100644
Binary files a/out/production/WeatherStation/views/WeatherController.class and b/out/production/WeatherStation/views/WeatherController.class differ