diff --git a/Zero_Interface-Loader.alpx b/Zero_Interface-Loader.alpx index d35a300e..ba202f73 100644 --- a/Zero_Interface-Loader.alpx +++ b/Zero_Interface-Loader.alpx @@ -434,7 +434,7 @@ zerointerfaceloader - vallum-production-741-d257d2f-all.jar + uplux-3.jar true false @@ -442,7 +442,15 @@ zerointerfaceloader - uplux-3.jar + vallum-main-835-49ed0dd-all.jar + + true + false + + + + zerointerfaceloader + jackson-datatype-jsr310-2.21.0.jar true false diff --git a/_alp/Agents/UI_EnergyHub/AOC.UI_EnergyHub.xml b/_alp/Agents/UI_EnergyHub/AOC.UI_EnergyHub.xml index 9ee73e22..45802667 100644 --- a/_alp/Agents/UI_EnergyHub/AOC.UI_EnergyHub.xml +++ b/_alp/Agents/UI_EnergyHub/AOC.UI_EnergyHub.xml @@ -6,12 +6,13 @@ +import java.util.function.Predicate; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;]]> false diff --git a/_alp/Agents/UI_EnergyHub/Code/Functions.java b/_alp/Agents/UI_EnergyHub/Code/Functions.java index 60e55a79..4849a149 100644 --- a/_alp/Agents/UI_EnergyHub/Code/Functions.java +++ b/_alp/Agents/UI_EnergyHub/Code/Functions.java @@ -239,6 +239,7 @@ else if (members.size() > 8) { pauseSimulation(); try { v_objectMapper = new ObjectMapper(); + v_objectMapper.registerModule(new JavaTimeModule()); f_addMixins(); var repository = UserScenarioRepository.builder() @@ -252,83 +253,97 @@ else if (members.size() > 8) { var jsonStream = repository.fetchUserScenarioContent(scenarioList.get(index).getId()); J_ModelSave saveObject = v_objectMapper.readValue(jsonStream, J_ModelSave.class); - EnergyModel deserializedEnergyModel = saveObject.energyModel; - - // Reconstruct all Agents - f_reconstructEnergyModel(deserializedEnergyModel); - f_reconstructGridConnections(deserializedEnergyModel); - f_reconstructActors(deserializedEnergyModel); - f_reconstructGridNodes(deserializedEnergyModel, saveObject.c_gridNodes); - - f_reconstructGIS_Objects(deserializedEnergyModel, saveObject.c_GISObjects); - - // Get profilePointer tableFunctions from 'original' energyModel - /* deserializedEnergyModel.c_profiles.forEach(x->{ - J_ProfilePointer origProfile = zero_Interface.energyModel.f_findProfile(x.name); - x.setTableFunction(origProfile.getTableFunction()); - }); */ - // get heatingTypeHashmap from 'old' energyModel. - deserializedEnergyModel.c_defaultHeatingStrategies = zero_Interface.energyModel.c_defaultHeatingStrategies; - - zero_Interface.zero_loader.energyModel = deserializedEnergyModel; - zero_Interface.energyModel = deserializedEnergyModel; - zero_Interface.uI_Results.energyModel = deserializedEnergyModel; - uI_Results.energyModel = deserializedEnergyModel; - - deserializedEnergyModel.f_startAfterDeserialisation(); - - f_setEngineInputDataAfterDeserialisation(deserializedEnergyModel); - - - // Putting back the ordered collections in the interface - f_reconstructOrderedCollections(saveObject); - - - //Get the correct coop for the E-Hub Dashboard - v_energyHubCoop = findFirst(zero_Interface.energyModel.pop_energyCoops,x->x.p_actorID.equals("eHubConfiguratorCoop")); - if (v_energyHubCoop == null){ - throw new RuntimeException("No energyCoop found with p_actorID = eHubConfiguratorCoop"); - } - zero_Interface.v_customEnergyCoop = v_energyHubCoop; - - //Get the slider gcs of the reloaded EnergyHub - c_sliderEAGCs = f_getEnergyHubsliderEAGCsLoadedScenario(v_energyHubCoop); - - // Update the E-Hub Dashboard with the loaded E-Hub from savefile - f_initializeEnergyHubMemberNames(); - uI_Tabs.f_initializeUI_Tabs(v_energyHubCoop.f_getMemberGridConnectionsCollectionPointer(), null, c_sliderEAGCs); - gr_uI_Tabs_presentation.setVisible(false); - gr_uI_Tabs_presentation.setVisible(true); - uI_Results.f_updateResultsUI(v_energyHubCoop); - // Update the main interface with the loaded E-Hub from savefile - zero_Interface.c_selectedGridConnections = new ArrayList<>(v_energyHubCoop.f_getMemberGridConnectionsCollectionPointer()); - - // Update the main interface tabs with the GCs from the new engine - zero_Interface.uI_Tabs.f_initializeUI_Tabs(zero_Interface.energyModel.f_getGridConnectionsCollectionPointer(), zero_Interface.energyModel.f_getPausedGridConnectionsCollectionPointer(), zero_Interface.f_getMainInterfaceSliderEAGCs()); - - // Reset all colors on the GIS map - zero_Interface.energyModel.pop_GIS_Buildings.forEach(x -> zero_Interface.f_styleAreas(x)); - zero_Interface.energyModel.pop_GIS_Objects.forEach(x -> zero_Interface.f_styleAreas(x)); - zero_Interface.energyModel.pop_GIS_Parcels.forEach(x -> zero_Interface.f_styleAreas(x)); - - // Color all selected GC - for (GridConnection gc : zero_Interface.c_selectedGridConnections) { - gc.c_connectedGISObjects.forEach(x -> x.gisRegion.setFillColor(zero_Interface.v_selectionColor)); - } - - // Zoom GIS Map to selected buildings - f_zoomMapToBuildings(); + // Check last saved date, compare to current status of projectdata. + if (!saveObject.projectDataLastModifiedDate.equals(zero_Interface.zero_loader.v_projectDataLastChangedDate)) { + traceln("Current data last modified date: %s", zero_Interface.zero_loader.v_projectDataLastChangedDate); + traceln("Save-file data last modified date: %s", saveObject.projectDataLastModifiedDate); + getExperimentHost().showMessageDialog("Het opgeslagen scenario bevat data die niet overeenkomt met de huidige dataset in de data portal."); + System.err.println("Data-last-changed-dates DON'T match!"); + } else { + traceln("Current data last modified date: %s", zero_Interface.zero_loader.v_projectDataLastChangedDate); + traceln("Save-file data last modified date: %s", saveObject.projectDataLastModifiedDate); + traceln("Data-last-changed-dates match!"); + + + EnergyModel deserializedEnergyModel = saveObject.energyModel; - // Simulate a year - gr_simulateYearEnergyHub.setVisible(false); - gr_loadIconYearSimulationEnergyHub.setVisible(true); - - - zero_Interface.f_simulateYearFromMainInterface(); - - traceln("ModelSave loaded succesfully!"); - + // Reconstruct all Agents + f_reconstructEnergyModel(deserializedEnergyModel); + f_reconstructGridConnections(deserializedEnergyModel); + f_reconstructActors(deserializedEnergyModel); + f_reconstructGridNodes(deserializedEnergyModel, saveObject.c_gridNodes); + + f_reconstructGIS_Objects(deserializedEnergyModel, saveObject.c_GISObjects); + + // Get profilePointer tableFunctions from 'original' energyModel + /* deserializedEnergyModel.c_profiles.forEach(x->{ + J_ProfilePointer origProfile = zero_Interface.energyModel.f_findProfile(x.name); + x.setTableFunction(origProfile.getTableFunction()); + }); */ + // get heatingTypeHashmap from 'old' energyModel. + deserializedEnergyModel.c_defaultHeatingStrategies = zero_Interface.energyModel.c_defaultHeatingStrategies; + + zero_Interface.zero_loader.energyModel = deserializedEnergyModel; + zero_Interface.energyModel = deserializedEnergyModel; + zero_Interface.uI_Results.energyModel = deserializedEnergyModel; + uI_Results.energyModel = deserializedEnergyModel; + + deserializedEnergyModel.f_startAfterDeserialisation(); + + f_setEngineInputDataAfterDeserialisation(deserializedEnergyModel); + + + // Putting back the ordered collections in the interface + f_reconstructOrderedCollections(saveObject); + + + //Get the correct coop for the E-Hub Dashboard + v_energyHubCoop = findFirst(zero_Interface.energyModel.pop_energyCoops,x->x.p_actorID.equals("eHubConfiguratorCoop")); + if (v_energyHubCoop == null){ + throw new RuntimeException("No energyCoop found with p_actorID = eHubConfiguratorCoop"); + } + zero_Interface.v_customEnergyCoop = v_energyHubCoop; + + //Get the slider gcs of the reloaded EnergyHub + c_sliderEAGCs = f_getEnergyHubsliderEAGCsLoadedScenario(v_energyHubCoop); + + // Update the E-Hub Dashboard with the loaded E-Hub from savefile + f_initializeEnergyHubMemberNames(); + uI_Tabs.f_initializeUI_Tabs(v_energyHubCoop.f_getMemberGridConnectionsCollectionPointer(), null, c_sliderEAGCs); + gr_uI_Tabs_presentation.setVisible(false); + gr_uI_Tabs_presentation.setVisible(true); + uI_Results.f_updateResultsUI(v_energyHubCoop); + + // Update the main interface with the loaded E-Hub from savefile + zero_Interface.c_selectedGridConnections = new ArrayList<>(v_energyHubCoop.f_getMemberGridConnectionsCollectionPointer()); + + // Update the main interface tabs with the GCs from the new engine + zero_Interface.uI_Tabs.f_initializeUI_Tabs(zero_Interface.energyModel.f_getGridConnectionsCollectionPointer(), zero_Interface.energyModel.f_getPausedGridConnectionsCollectionPointer(), zero_Interface.f_getMainInterfaceSliderEAGCs()); + + // Reset all colors on the GIS map + zero_Interface.energyModel.pop_GIS_Buildings.forEach(x -> zero_Interface.f_styleAreas(x)); + zero_Interface.energyModel.pop_GIS_Objects.forEach(x -> zero_Interface.f_styleAreas(x)); + zero_Interface.energyModel.pop_GIS_Parcels.forEach(x -> zero_Interface.f_styleAreas(x)); + + // Color all selected GC + for (GridConnection gc : zero_Interface.c_selectedGridConnections) { + gc.c_connectedGISObjects.forEach(x -> x.gisRegion.setFillColor(zero_Interface.v_selectionColor)); + } + + // Zoom GIS Map to selected buildings + f_zoomMapToBuildings(); + + // Simulate a year + gr_simulateYearEnergyHub.setVisible(false); + gr_loadIconYearSimulationEnergyHub.setVisible(true); + + + zero_Interface.f_simulateYearFromMainInterface(); + + traceln("ModelSave loaded succesfully!"); + } + } catch (IOException e) { e.printStackTrace(); } @@ -345,6 +360,8 @@ else if (members.size() > 8) { traceln("Starting model serialisation..."); J_ModelSave saveObject = new J_ModelSave(); +saveObject.projectDataLastModifiedDate = zero_Interface.zero_loader.v_projectDataLastChangedDate; + saveObject.energyModel = zero_Interface.energyModel; zero_Interface.energyModel.pop_gridNodes.forEach(x->saveObject.c_gridNodes.add(x)); @@ -371,6 +388,7 @@ else if (members.size() > 8) { saveObject.c_additionalVehicleHashMaps = c_additionalVehicleHashMaps; v_objectMapper = new ObjectMapper(); +v_objectMapper.registerModule(new JavaTimeModule()); f_addMixins(); v_objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE); traceln("Model serialisation has been completed."); diff --git a/_alp/Agents/Zero_Interface/AOC.Zero_Interface.xml b/_alp/Agents/Zero_Interface/AOC.Zero_Interface.xml index 0adba861..11d49d44 100644 --- a/_alp/Agents/Zero_Interface/AOC.Zero_Interface.xml +++ b/_alp/Agents/Zero_Interface/AOC.Zero_Interface.xml @@ -16,6 +16,7 @@ import java.io.IOException; import java.util.Date; import java.time.LocalDate; import java.time.DayOfWeek; +import java.time.Instant; import java.text.SimpleDateFormat; import com.fasterxml.jackson.databind.node.JsonNodeFactory; @@ -33,7 +34,8 @@ import com.querydsl.core.types.dsl.TimeExpression; //import zero_engine.J_EAStorageElectric; //import zero_engine.J_EAConsumption; import org.apache.commons.lang3.tuple.Triple; -import javax.media.jai.widget.ViewportListener;]]> +import javax.media.jai.widget.ViewportListener; +]]> false 1658477103138 diff --git a/_alp/Agents/Zero_Loader/AOC.Zero_Loader.xml b/_alp/Agents/Zero_Loader/AOC.Zero_Loader.xml index 9314cc46..278740ea 100644 --- a/_alp/Agents/Zero_Loader/AOC.Zero_Loader.xml +++ b/_alp/Agents/Zero_Loader/AOC.Zero_Loader.xml @@ -28,6 +28,7 @@ import org.apache.commons.lang3.tuple.Triple; import java.io.*; import java.io.File; import java.io.IOException; +import java.time.Instant; import java.time.LocalDate; import java.time.DayOfWeek; import java.text.SimpleDateFormat; @@ -51,7 +52,8 @@ import com.zenmo.zummon.companysurvey.HeatingType; import com.querydsl.core.types.dsl.CaseBuilder; import energy.lux.uplux.*; -import java.util.UUID;]]> +//import java.util.UUID; +import kotlin.uuid.Uuid;]]> false 1726584205730 diff --git a/_alp/Agents/Zero_Loader/Code/Functions.java b/_alp/Agents/Zero_Loader/Code/Functions.java index 0f8b79f2..75f73379 100644 --- a/_alp/Agents/Zero_Loader/Code/Functions.java +++ b/_alp/Agents/Zero_Loader/Code/Functions.java @@ -1243,11 +1243,11 @@ List f_getSurveys() //Connect with API to database Vallum vallum = new Vallum(user.PROJECT_CLIENT_ID(), user.PROJECT_CLIENT_SECRET()); - List surveys = new ArrayList(); String[] zorm_project_names; + if(project_data.zorm_project_names() != null){ zorm_project_names = project_data.zorm_project_names(); } @@ -1255,8 +1255,20 @@ List f_getSurveys() zorm_project_names = new String[]{project_data.project_name()}; } +v_projectDataLastChangedDate = vallum.getProjectLastModifiedAt(zorm_project_names[0]); +//traceln("Data last changed date: %s", v_projectDataLastChangedDate); +if(zorm_project_names.length>1) { + for (int i = 1; i - + diff --git a/_alp/Agents/Zero_Loader/Variables.xml b/_alp/Agents/Zero_Loader/Variables.xml index cc04907b..7cde2fa1 100644 --- a/_alp/Agents/Zero_Loader/Variables.xml +++ b/_alp/Agents/Zero_Loader/Variables.xml @@ -137,6 +137,25 @@ + + 1769510412647 + + 1800 + 290 + + false + true + true + + + + 1726584206064 diff --git a/_alp/Classes/Class.J_ModelSave.java b/_alp/Classes/Class.J_ModelSave.java index c40f2d9f..9ee85ad5 100644 --- a/_alp/Classes/Class.J_ModelSave.java +++ b/_alp/Classes/Class.J_ModelSave.java @@ -1,8 +1,13 @@ +import java.time.Instant; + /** * J_ModelSave */ public class J_ModelSave implements Serializable { + public Instant projectDataLastModifiedDate; + public String[] zorm_project_names; + public EnergyModel energyModel; public ArrayList c_gridNodes = new ArrayList(); public ArrayList c_GISObjects = new ArrayList(); diff --git a/_alp/ModelResources.xml b/_alp/ModelResources.xml index 0c349a5e..50bd4a63 100644 --- a/_alp/ModelResources.xml +++ b/_alp/ModelResources.xml @@ -78,12 +78,6 @@ false FILE_SYSTEM - - 1756975183289 - vallum-production-741-d257d2f-all.jar - false - FILE_SYSTEM - 1756980508229 data_Generic/inputECookerPatterns.csv @@ -114,4 +108,16 @@ false FILE_SYSTEM + + 1769509027659 + vallum-main-835-49ed0dd-all.jar + false + FILE_SYSTEM + + + 1769520073518 + jackson-datatype-jsr310-2.21.0.jar + false + FILE_SYSTEM + diff --git a/jackson-datatype-jsr310-2.21.0.jar b/jackson-datatype-jsr310-2.21.0.jar new file mode 100644 index 00000000..ab686d01 Binary files /dev/null and b/jackson-datatype-jsr310-2.21.0.jar differ diff --git a/vallum-main-835-49ed0dd-all.jar b/vallum-main-835-49ed0dd-all.jar new file mode 100644 index 00000000..f6aa225b Binary files /dev/null and b/vallum-main-835-49ed0dd-all.jar differ