From 27d7ee01728d342c085c2a860961460c09395a9a Mon Sep 17 00:00:00 2001 From: Sonja Happ Date: Thu, 12 Mar 2020 12:26:56 +0100 Subject: [PATCH] rename simulation model to component configuration --- .../widget/edit-widget-control-creator.js | 21 ++- .../data-managers/notifications-factory.js | 6 +- .../config-store.js} | 18 +-- .../configs-data-manager.js} | 38 ++--- .../edit-config.js} | 42 +++--- .../import-config.js} | 28 ++-- src/dashboard/dashboard.js | 6 - src/dashboard/import-dashboard.js | 4 +- src/file/select-file.js | 4 +- src/scenario/import-scenario.js | 12 +- src/scenario/scenario.js | 136 +++++++++--------- src/scenario/scenarios-data-manager.js | 16 +-- src/scenario/scenarios.js | 2 +- src/signal/edit-signal-mapping.js | 10 +- src/signal/signal-store.js | 6 +- src/signal/signals-data-manager.js | 12 +- .../edit-widget-simulation-control.js | 64 --------- src/widget/widget.js | 14 +- src/widget/widgets/plot-table.js | 22 +-- src/widget/widgets/plot.js | 14 +- 20 files changed, 188 insertions(+), 287 deletions(-) rename src/{simulationmodel/simulation-model-store.js => componentconfig/config-store.js} (65%) rename src/{simulationmodel/simulation-models-data-manager.js => componentconfig/configs-data-manager.js} (63%) rename src/{simulationmodel/edit-simulation-model.js => componentconfig/edit-config.js} (70%) rename src/{simulationmodel/import-simulation-model.js => componentconfig/import-config.js} (80%) delete mode 100644 src/widget/edit-widget/edit-widget-simulation-control.js diff --git a/src/__tests__/widget/edit-widget-control-creator.js b/src/__tests__/widget/edit-widget-control-creator.js index 46b00bc..b338f7c 100644 --- a/src/__tests__/widget/edit-widget-control-creator.js +++ b/src/__tests__/widget/edit-widget-control-creator.js @@ -6,7 +6,6 @@ import EditWidgetTextControl from '../../widget/edit-widget/edit-widget-text-con import EditWidgetColorControl from '../../widget/edit-widget/edit-widget-color-control'; import EditWidgetTimeControl from '../../widget/edit-widget/edit-widget-time-control'; import EditImageWidgetControl from '../../widget/edit-widget/edit-widget-image-control'; -import EditWidgetSimulationControl from '../../widget/edit-widget/edit-widget-simulation-control'; import EditWidgetSignalControl from '../../widget/edit-widget/edit-widget-signal-control'; import EditWidgetSignalsControl from '../../widget/edit-widget/edit-widget-signals-control'; import EditWidgetOrientation from '../../widget/edit-widget/edit-widget-orientation'; @@ -25,23 +24,23 @@ describe('edit widget control creator', () => { }); var runs = [ - { args: { widgetType: 'Lamp' }, result: { controlNumber: 5, controlTypes: [EditWidgetSimulationControl, EditWidgetSignalControl, EditWidgetTextControl, EditWidgetColorControl, EditWidgetColorControl] } }, - { args: { widgetType: 'Value' }, result: { controlNumber: 5, controlTypes: [EditWidgetTextControl, EditWidgetSimulationControl, EditWidgetSignalControl, EditWidgetTextSizeControl, EditWidgetCheckboxControl] } }, - { args: { widgetType: 'Plot' }, result: { controlNumber: 5, controlTypes: [EditWidgetTimeControl, EditWidgetSimulationControl, EditWidgetSignalsControl, EditWidgetTextControl, EditWidgetMinMaxControl] } }, - { args: { widgetType: 'Table' }, result: { controlNumber: 2, controlTypes: [EditWidgetSimulationControl, EditWidgetCheckboxControl] } }, + { args: { widgetType: 'Lamp' }, result: { controlNumber: 5, controlTypes: [EditWidgetSignalControl, EditWidgetTextControl, EditWidgetColorControl, EditWidgetColorControl] } }, + { args: { widgetType: 'Value' }, result: { controlNumber: 5, controlTypes: [EditWidgetTextControl, EditWidgetSignalControl, EditWidgetTextSizeControl, EditWidgetCheckboxControl] } }, + { args: { widgetType: 'Plot' }, result: { controlNumber: 5, controlTypes: [EditWidgetTimeControl, EditWidgetSignalsControl, EditWidgetTextControl, EditWidgetMinMaxControl] } }, + { args: { widgetType: 'Table' }, result: { controlNumber: 2, controlTypes: [EditWidgetCheckboxControl] } }, { args: { widgetType: 'Image' }, result: { controlNumber: 2, controlTypes: [EditImageWidgetControl, EditWidgetAspectControl] } }, - { args: { widgetType: 'Gauge' }, result: { controlNumber: 6, controlTypes: [EditWidgetTextControl, EditWidgetSimulationControl, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetColorZonesControl, EditWidgetMinMaxControl] } }, - { args: { widgetType: 'PlotTable' }, result: { controlNumber: 5, controlTypes: [EditWidgetSimulationControl, EditWidgetSignalsControl, EditWidgetTextControl, EditWidgetTimeControl, EditWidgetMinMaxControl] } }, - { args: { widgetType: 'Slider' }, result: { controlNumber: 9, controlTypes: [EditWidgetTextControl, EditWidgetOrientation, EditWidgetSimulationControl, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetCheckboxControl, EditWidgetMinMaxControl, EditWidgetNumberControl, EditWidgetNumberControl] } }, - { args: { widgetType: 'Button' }, result: { controlNumber: 6, controlTypes: [EditWidgetTextControl, EditWidgetSimulationControl, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetNumberControl, EditWidgetNumberControl] } }, + { args: { widgetType: 'Gauge' }, result: { controlNumber: 6, controlTypes: [EditWidgetTextControl, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetColorZonesControl, EditWidgetMinMaxControl] } }, + { args: { widgetType: 'PlotTable' }, result: { controlNumber: 5, controlTypes: [EditWidgetSignalsControl, EditWidgetTextControl, EditWidgetTimeControl, EditWidgetMinMaxControl] } }, + { args: { widgetType: 'Slider' }, result: { controlNumber: 9, controlTypes: [EditWidgetTextControl, EditWidgetOrientation, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetCheckboxControl, EditWidgetMinMaxControl, EditWidgetNumberControl, EditWidgetNumberControl] } }, + { args: { widgetType: 'Button' }, result: { controlNumber: 6, controlTypes: [EditWidgetTextControl, EditWidgetSignalControl, EditWidgetCheckboxControl, EditWidgetNumberControl, EditWidgetNumberControl] } }, { args: { widgetType: 'Box' }, result: { controlNumber: 2, controlTypes: [EditWidgetColorControl, EditWidgetColorControl] } }, { args: { widgetType: 'Label' }, result: { controlNumber: 3, controlTypes: [EditWidgetTextControl, EditWidgetTextSizeControl, EditWidgetColorControl] } }, { args: { widgetType: 'HTML' }, result: { controlNumber: 1, controlTypes: [EditWidgetHTMLContent] } }, - { args: { widgetType: 'Input'}, result: { controlNumber: 3, controlTypes: [EditWidgetTextControl, EditWidgetSimulationControl, EditWidgetSignalControl] } } + { args: { widgetType: 'Input'}, result: { controlNumber: 3, controlTypes: [EditWidgetTextControl, EditWidgetSignalControl] } } ]; runs.forEach( (run) => { - let itMsg = run.args.widgetType + ' widget edit model should have correct controls'; + let itMsg = run.args.widgetType + ' widget edit should have correct controls'; it(itMsg, () => { let controls = createControls(run.args.widgetType, null, null, null, null, null, null); diff --git a/src/common/data-managers/notifications-factory.js b/src/common/data-managers/notifications-factory.js index 341b375..a23768f 100644 --- a/src/common/data-managers/notifications-factory.js +++ b/src/common/data-managers/notifications-factory.js @@ -18,10 +18,10 @@ class NotificationsFactory { // This is an example - static get NO_SIM_MODEL_AVAILABLE() { + static get EXAMPLE_NOTIFICATION() { return { - title: 'No simulation model available', - message: 'Consider defining a simulation model in the simulators section.', + title: 'Example notification', + message: 'Write something here that describes what happend.', level: 'warning' }; } diff --git a/src/simulationmodel/simulation-model-store.js b/src/componentconfig/config-store.js similarity index 65% rename from src/simulationmodel/simulation-model-store.js rename to src/componentconfig/config-store.js index fe90662..b67377d 100644 --- a/src/simulationmodel/simulation-model-store.js +++ b/src/componentconfig/config-store.js @@ -1,8 +1,4 @@ /** - * File: simulation-model-store.js - * Author: Markus Grigull - * Date: 20.04.2018 - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -20,21 +16,21 @@ ******************************************************************************/ import ArrayStore from '../common/array-store'; -import SimulationModelsDataManager from './simulation-models-data-manager'; +import ConfigsDataManager from './configs-data-manager'; -class SimulationModelStore extends ArrayStore { +class ConfigStore extends ArrayStore { constructor() { - super('simulationModels', SimulationModelsDataManager); + super('configs', ConfigsDataManager); } reduce(state, action) { switch (action.type) { - case 'simulationModels/loaded': + case 'configs/loaded': - SimulationModelsDataManager.loadSignals(action.token, action.data); - SimulationModelsDataManager.loadFiles(action.token, action.data); + ConfigsDataManager.loadSignals(action.token, action.data); + ConfigsDataManager.loadFiles(action.token, action.data); return super.reduce(state, action); default: @@ -44,4 +40,4 @@ class SimulationModelStore extends ArrayStore { } } -export default new SimulationModelStore(); +export default new ConfigStore(); diff --git a/src/simulationmodel/simulation-models-data-manager.js b/src/componentconfig/configs-data-manager.js similarity index 63% rename from src/simulationmodel/simulation-models-data-manager.js rename to src/componentconfig/configs-data-manager.js index 7326c42..c0ac6c9 100644 --- a/src/simulationmodel/simulation-models-data-manager.js +++ b/src/componentconfig/configs-data-manager.js @@ -19,35 +19,35 @@ import RestDataManager from '../common/data-managers/rest-data-manager'; import AppDispatcher from '../common/app-dispatcher'; import RestAPI from "../common/api/rest-api"; -class SimulationModelDataManager extends RestDataManager { +class ConfigDataManager extends RestDataManager { constructor() { - super('simulationModel', '/models'); + super('config', '/configs'); - this.onLoad = this.onModelsLoad; + this.onLoad = this.onConfigsLoad; } - onModelsLoad(data) { + onConfigsLoad(data) { if (!Array.isArray(data)) data = [ data ]; - for (let model of data) - this.loadModelData(model); + for (let config of data) + this.loadICData(config); } - loadModelData(model) { + loadICData(config) { AppDispatcher.dispatch({ type: 'icData/prepare', - inputLength: parseInt(model.inputLength, 10), - outputLength: parseInt(model.outputLength, 10), - id: model.icID + inputLength: parseInt(config.inputLength, 10), + outputLength: parseInt(config.outputLength, 10), + id: config.icID }); } - loadSignals(token, models){ + loadSignals(token, configs){ - for (let model of models) { + for (let config of configs) { // request in signals - RestAPI.get(this.makeURL('/signals?direction=in&modelID=' + model.id), token).then(response => { + RestAPI.get(this.makeURL('/signals?direction=in&configID=' + config.id), token).then(response => { AppDispatcher.dispatch({ type: 'signals/loaded', data: response.signals @@ -55,7 +55,7 @@ class SimulationModelDataManager extends RestDataManager { }); // request out signals - RestAPI.get(this.makeURL('/signals?direction=out&modelID=' + model.id), token).then(response => { + RestAPI.get(this.makeURL('/signals?direction=out&configID=' + config.id), token).then(response => { AppDispatcher.dispatch({ type: 'signals/loaded', data: response.signals @@ -65,10 +65,10 @@ class SimulationModelDataManager extends RestDataManager { } } - loadFiles(token, models){ - for (let model of models) { - // request files of simulation model - RestAPI.get(this.makeURL('/files?objectType=model&objectID=' + model.id), token).then(response => { + loadFiles(token, configs){ + for (let config of configs) { + // request files of config + RestAPI.get(this.makeURL('/files?objectType=config&objectID=' + config.id), token).then(response => { AppDispatcher.dispatch({ type: 'files/loaded', data: response.files @@ -78,4 +78,4 @@ class SimulationModelDataManager extends RestDataManager { } } -export default new SimulationModelDataManager(); +export default new ConfigDataManager(); diff --git a/src/simulationmodel/edit-simulation-model.js b/src/componentconfig/edit-config.js similarity index 70% rename from src/simulationmodel/edit-simulation-model.js rename to src/componentconfig/edit-config.js index 9815850..791fc4d 100644 --- a/src/simulationmodel/edit-simulation-model.js +++ b/src/componentconfig/edit-config.js @@ -23,7 +23,7 @@ import Dialog from '../common/dialogs/dialog'; import ParametersEditor from '../common/parameters-editor'; import SelectFile from "../file/select-file"; -class EditSimulationModelDialog extends React.Component { +class EditConfigDialog extends React.Component { valid = false; constructor(props) { @@ -35,7 +35,7 @@ class EditSimulationModelDialog extends React.Component { icID: '', configuration: null, startParameters: {}, - selectedModelFileID:0 + selectedFileID:0 }; } @@ -44,22 +44,22 @@ class EditSimulationModelDialog extends React.Component { onClose(canceled) { if (canceled === false) { if (this.valid) { - let data = this.props.simulationModel; - if (this.state.name !== '' && this.props.simulationModel.name !== this.state.name) { + let data = this.props.config; + if (this.state.name !== '' && this.props.config.name !== this.state.name) { data.name = this.state.name; } - if (this.state.icID !== '' && this.props.simulationModel.icID !== parseInt(this.state.icID)) { + if (this.state.icID !== '' && this.props.config.icID !== parseInt(this.state.icID)) { data.icID = parseInt(this.state.icID, 10); } - if(this.state.startParameters !== {} && this.props.simulationModel.startParameters !== this.state.startParameters){ + if(this.state.startParameters !== {} && this.props.config.startParameters !== this.state.startParameters){ data.startParameters = this.state.startParameters; } - if (parseInt(this.state.selectedModelFileID, 10) !== 0 && - this.props.simulationModel.selectedModelFileID !== parseInt(this.state.selectedModelFileID)) { - data.selectedModelFileID = parseInt(this.state.selectedModelFileID, 10); + if (parseInt(this.state.selectedFileID, 10) !== 0 && + this.props.config.selectedFileID !== parseInt(this.state.selectedFileID)) { + data.selectedFileID = parseInt(this.state.selectedFileID, 10); } - //forward modified simulation model to callback function + //forward modified config to callback function this.props.onClose(data) } } else { @@ -81,9 +81,9 @@ class EditSimulationModelDialog extends React.Component { this.valid = this.isValid() } - handleSelectedModelFileChange(newFileID){ + handleSelectedFileChange(newFileID){ console.log("Config file change to: ", newFileID); - this.setState({selectedModelFileID: newFileID}) + this.setState({selectedFileID: newFileID}) this.valid = this.isValid() } @@ -95,7 +95,7 @@ class EditSimulationModelDialog extends React.Component { || this.state.startParameters !== {} || this.state.selectedFile != null || this.state.configuration != null - || this.state.selectedModelFileID !== 0; + || this.state.selectedFileID !== 0; } resetState() { @@ -112,7 +112,7 @@ class EditSimulationModelDialog extends React.Component {
Name - this.handleChange(e)} /> + this.handleChange(e)} /> @@ -123,19 +123,11 @@ class EditSimulationModelDialog extends React.Component { - - this.handleSelectedModelFileChange(e)} value={this.state.selectedModelFileID} objectID={this.props.simulationModel.id}/> - - - {/* this.handleChange(e)} value={this.state.configuration} />*/} - - - - + this.handleSelectedFileChange(e)} value={this.state.selectedFileID} objectID={this.props.config.id}/> Start Parameters - this.handleParameterChange(data)} /> + this.handleParameterChange(data)} /> @@ -143,4 +135,4 @@ class EditSimulationModelDialog extends React.Component { } } -export default EditSimulationModelDialog; +export default EditConfigDialog; diff --git a/src/simulationmodel/import-simulation-model.js b/src/componentconfig/import-config.js similarity index 80% rename from src/simulationmodel/import-simulation-model.js rename to src/componentconfig/import-config.js index f1bd92a..89c1986 100644 --- a/src/simulationmodel/import-simulation-model.js +++ b/src/componentconfig/import-config.js @@ -1,8 +1,4 @@ /** - * File: import-simulation-model.js - * Author: Markus Grigull - * Date: 03.09.2017 - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -25,14 +21,14 @@ import _ from 'lodash'; import Dialog from '../common/dialogs/dialog'; -class ImportSimulationModelDialog extends React.Component { +class ImportConfigDialog extends React.Component { imported = false; constructor(props) { super(props); this.state = { - model: {} + config: {} }; } @@ -43,12 +39,12 @@ class ImportSimulationModelDialog extends React.Component { return; } - this.props.onClose(this.state.model); + this.props.onClose(this.state.config); } resetState = () => { this.setState({ - model: {} + config: {} }); this.imported = false; @@ -66,24 +62,24 @@ class ImportSimulationModelDialog extends React.Component { const self = this; reader.onload = event => { - const model = JSON.parse(event.target.result); + const config = JSON.parse(event.target.result); - model.icID = this.props.ics.length > 0 ? this.props.ics[0]._id : null; + config.icID = this.props.ics.length > 0 ? this.props.ics[0]._id : null; self.imported = true; - this.setState({ model }); + this.setState({ config: config }); }; reader.readAsText(file); } handleICChange = event => { - const model = this.state.model; + const config = this.state.config; - model.icID = event.target.value; + config.icID = event.target.value; - this.setState({ model }); + this.setState({ config: config }); } render() { @@ -97,7 +93,7 @@ class ImportSimulationModelDialog extends React.Component { Infrastructure Component - + {this.props.ics.map(ic => ( ))} @@ -109,4 +105,4 @@ class ImportSimulationModelDialog extends React.Component { } } -export default ImportSimulationModelDialog; +export default ImportConfigDialog; diff --git a/src/dashboard/dashboard.js b/src/dashboard/dashboard.js index 288ac70..e28ca6a 100644 --- a/src/dashboard/dashboard.js +++ b/src/dashboard/dashboard.js @@ -33,7 +33,6 @@ import DashboardButtonGroup from './dashboard-button-group'; import LoginStore from '../user/login-store'; import DashboardStore from './dashboard-store'; -//import SimulationModelStore from '../simulationmodel/simulation-model-store'; import SignalStore from '../signal/signal-store' import FileStore from '../file/file-store'; import WidgetStore from '../widget/widget-store'; @@ -76,11 +75,6 @@ class Dashboard extends Component { return thisWidgetHeight > maxHeightSoFar? thisWidgetHeight : maxHeightSoFar; }, 0); - //let simulationModels = []; - //if (prevState.simulation != null) { - // simulationModels = SimulationModelStore.getState().filter(m => prevState.simulation.models.includes(m._id)); - //} - // TODO filter signals to the ones belonging to the scenario at hand! let signals = SignalStore.getState(); diff --git a/src/dashboard/import-dashboard.js b/src/dashboard/import-dashboard.js index 62109ab..b44e1f8 100644 --- a/src/dashboard/import-dashboard.js +++ b/src/dashboard/import-dashboard.js @@ -68,8 +68,8 @@ class ImportDashboardDialog extends React.Component { const dashboard = JSON.parse(event.target.result); /*let defaultIC = ""; - if (self.props.simulation.models != null) { - defaultIC = self.props.simulation.models[0].icID; + if (self.props.configs != null) { + defaultIC = self.props.configs[0].icID; } dashboard.widgets.forEach(widget => { diff --git a/src/file/select-file.js b/src/file/select-file.js index 26f7689..6fa6e83 100644 --- a/src/file/select-file.js +++ b/src/file/select-file.js @@ -38,7 +38,7 @@ class SelectFile extends React.Component { static calculateState(prevState, props) { let files = FileStore.getState().filter((file) => { - return (file.simulationModelID === props.objectID) + return (file.configID === props.objectID) }); console.log("props.objectID=", props.objectID) @@ -111,7 +111,7 @@ class SelectFile extends React.Component { ); } else { - fileOptions = + fileOptions = } /*const progressBarStyle = { diff --git a/src/scenario/import-scenario.js b/src/scenario/import-scenario.js index bdfe1ab..3fccb49 100644 --- a/src/scenario/import-scenario.js +++ b/src/scenario/import-scenario.js @@ -35,7 +35,7 @@ class ImportScenarioDialog extends React.Component { this.state = { name: '', running: '', - simulationModels: [], + configs: [], startParameters: {} }; } @@ -56,10 +56,10 @@ class ImportScenarioDialog extends React.Component { handleChange(e, index) { /*if (e.target.id === 'icID') { - const models = this.state.models; - models[index].icID = JSON.parse(e.target.value); + const configs = this.state.configs; + configs[index].icID = JSON.parse(e.target.value); - this.setState({ models }); + this.setState({ configs: configs }); return; }*/ @@ -77,7 +77,7 @@ class ImportScenarioDialog extends React.Component { } resetState = () => { - this.setState({ name: '', models: [], startParameters: {} }); + this.setState({ name: '', configs: [], startParameters: {} }); this.imported = false; } @@ -98,7 +98,7 @@ class ImportScenarioDialog extends React.Component { self.imported = true; self.valid = true; - self.setState({ name: scenario.name, models: scenario.simulationModels, startParameters: scenario.startParameters, running: scenario.running }); + self.setState({ name: scenario.name, configs: scenario.configs, startParameters: scenario.startParameters, running: scenario.running }); }; reader.readAsText(file); diff --git a/src/scenario/scenario.js b/src/scenario/scenario.js index d6e89f5..1f5a7be 100644 --- a/src/scenario/scenario.js +++ b/src/scenario/scenario.js @@ -24,7 +24,7 @@ import _ from 'lodash'; import ScenarioStore from './scenario-store'; import ICStore from '../ic/ic-store'; import DashboardStore from '../dashboard/dashboard-store'; -import SimulationModelStore from '../simulationmodel/simulation-model-store'; +import ConfigStore from '../componentconfig/config-store'; import LoginStore from '../user/login-store'; import SignalStore from '../signal/signal-store' import AppDispatcher from '../common/app-dispatcher'; @@ -32,19 +32,19 @@ import AppDispatcher from '../common/app-dispatcher'; import Icon from '../common/icon'; import Table from '../common/table'; import TableColumn from '../common/table-column'; -import ImportSimulationModelDialog from '../simulationmodel/import-simulation-model'; +import ImportConfigDialog from '../componentconfig/import-config'; import ImportDashboardDialog from "../dashboard/import-dashboard"; import NewDashboardDialog from "../dashboard/new-dashboard"; import ICAction from '../ic/ic-action'; import DeleteDialog from '../common/dialogs/delete-dialog'; -import EditSimulationModelDialog from "../simulationmodel/edit-simulation-model"; +import EditConfigDialog from "../componentconfig/edit-config"; import EditSignalMapping from "../signal/edit-signal-mapping"; import FileStore from "../file/file-store" class Scenario extends React.Component { static getStores() { - return [ ScenarioStore, SimulationModelStore, DashboardStore, ICStore, LoginStore, SignalStore, FileStore]; + return [ ScenarioStore, ConfigStore, DashboardStore, ICStore, LoginStore, SignalStore, FileStore]; } static calculateState(prevState, props) { @@ -63,8 +63,8 @@ class Scenario extends React.Component { // obtain all dashboards of a scenario let dashboards = DashboardStore.getState().filter(dashb => dashb.scenarioID === parseInt(props.match.params.scenario, 10)); - // obtain all simulation models of a scenario - let simulationModels = SimulationModelStore.getState().filter(simmodel => simmodel.scenarioID === parseInt(props.match.params.scenario, 10)); + // obtain all component configurations of a scenario + let configs = ConfigStore.getState().filter(config => config.scenarioID === parseInt(props.match.params.scenario, 10)); let signals = SignalStore.getState(); let files = FileStore.getState(); @@ -73,18 +73,18 @@ class Scenario extends React.Component { return { scenario, sessionToken, - simulationModels, + configs: configs, dashboards, signals, files, ics: ICStore.getState(), - deleteSimulationModelModal: false, - importSimulationModelModal: false, - editSimulationModelModal: false, - modalSimulationModelData: {}, - selectedSimulationModels: [], - modalSimulationModelIndex: 0, + deleteConfigModal: false, + importConfigModal: false, + editConfigModal: false, + modalConfigData: {}, + selectedConfigs: [], + modalConfigIndex: 0, editOutputSignalsModal: false, editInputSignalsModal: false, @@ -105,9 +105,9 @@ class Scenario extends React.Component { token: this.state.sessionToken }); - // load simulation models for selected scenario + // load component configurations for selected scenario AppDispatcher.dispatch({ - type: 'simulationModels/start-load', + type: 'configs/start-load', token: this.state.sessionToken, param: '?scenarioID='+this.state.scenario.id, }); @@ -119,7 +119,7 @@ class Scenario extends React.Component { param: '?scenarioID='+this.state.scenario.id, }); - // load ICs to enable that simulation models work with them + // load ICs to enable that component configs work with them AppDispatcher.dispatch({ type: 'ics/start-load', token: this.state.sessionToken, @@ -129,20 +129,20 @@ class Scenario extends React.Component { } /* ############################################## - * Simulation Model modification methods + * Component Configuration modification methods ############################################## */ - addSimulationModel(){ - const simulationModel = { + addConfig(){ + const config = { scenarioID: this.state.scenario.id, - name: 'New Simulation Model', + name: 'New Component Configuration', icID: this.state.ics.length > 0 ? this.state.ics[0].id : null, startParameters: {}, }; AppDispatcher.dispatch({ - type: 'simulationModels/start-add', - data: simulationModel, + type: 'configs/start-add', + data: config, token: this.state.sessionToken }); @@ -155,44 +155,44 @@ class Scenario extends React.Component { }); } - closeEditSimulationModelModal(data){ - this.setState({ editSimulationModelModal : false }); + closeEditConfigModal(data){ + this.setState({ editConfigModal : false }); if (data) { AppDispatcher.dispatch({ - type: 'simulationModels/start-edit', + type: 'configs/start-edit', data: data, token: this.state.sessionToken, }); } } - closeDeleteSimulationModelModal(confirmDelete) { - this.setState({ deleteSimulationModelModal: false }); + closeDeleteConfigModal(confirmDelete) { + this.setState({ deleteConfigModal: false }); if (confirmDelete === false) { return; } AppDispatcher.dispatch({ - type: 'simulationModels/start-remove', - data: this.state.modalSimulationModelData, + type: 'configs/start-remove', + data: this.state.modalConfigData, token: this.state.sessionToken }); } - importSimulationModel(simulationModel){ - this.setState({ importSimulationModelModal: false }); + importConfig(config){ + this.setState({ importConfigModal: false }); - if (simulationModel == null) { + if (config == null) { return; } - simulationModel.scenario = this.state.scenario.id; + config.scenario = this.state.scenario.id; AppDispatcher.dispatch({ - type: 'simulationModels/start-add', - data: simulationModel, + type: 'configs/start-add', + data: config, token: this.state.sessionToken }); @@ -205,27 +205,27 @@ class Scenario extends React.Component { }); } - exportModel(index) { + exportConfig(index) { // filter properties - const model = Object.assign({}, this.state.simulationModels[index]); + const config = Object.assign({}, this.state.configs[index]); // show save dialog - const blob = new Blob([JSON.stringify(model, null, 2)], { type: 'application/json' }); - FileSaver.saveAs(blob, 'simulation model - ' + model.name + '.json'); + const blob = new Blob([JSON.stringify(config, null, 2)], { type: 'application/json' }); + FileSaver.saveAs(blob, 'config-' + config.name + '.json'); } - onSimulationModelChecked(index, event) { - const selectedSimulationModels = Object.assign([], this.state.selectedSimulationModels); - for (let key in selectedSimulationModels) { - if (selectedSimulationModels[key] === index) { + onConfigChecked(index, event) { + const selectedConfigs = Object.assign([], this.state.selectedConfigs); + for (let key in selectedConfigs) { + if (selectedConfigs[key] === index) { // update existing entry if (event.target.checked) { return; } - selectedSimulationModels.splice(key, 1); + selectedConfigs.splice(key, 1); - this.setState({ selectedSimulationModels }); + this.setState({ selectedConfigs: selectedConfigs }); return; } } @@ -235,16 +235,16 @@ class Scenario extends React.Component { return; } - selectedSimulationModels.push(index); - this.setState({ selectedSimulationModels }); + selectedConfigs.push(index); + this.setState({ selectedConfigs: selectedConfigs }); } runAction = action => { - for (let index of this.state.selectedSimulationModels) { - // get IC for model + for (let index of this.state.selectedConfigs) { + // get IC for component config let ic = null; for (let component of this.state.ics) { - if (component._id === this.state.simulationModels[index].icID) { + if (component._id === this.state.configs[index].icID) { ic = component; } } @@ -254,7 +254,7 @@ class Scenario extends React.Component { } if (action.data.action === 'start') { - action.data.parameters = this.state.simulationModels[index].startParameters; + action.data.parameters = this.state.configs[index].startParameters; } AppDispatcher.dispatch({ @@ -345,7 +345,7 @@ class Scenario extends React.Component { } closeNewSignalModal(data){ - //data contains the new signal incl. simulationModelID and direction + //data contains the new signal incl. configID and direction if (data) { AppDispatcher.dispatch({ type: 'signals/start-add', @@ -406,21 +406,21 @@ class Scenario extends React.Component { {/*Component Configurations table*/}

Component Configurations

- - this.onSimulationModelChecked(index, event)} width='30' /> +
+ this.onConfigChecked(index, event)} width='30' /> - this.getFileName(selectedModelFileID)}/> + this.getFileName(selectedFileID)}/> this.setState({ editOutputSignalsModal: true, modalSimulationModelData: this.state.simulationModels[index], modalSimulationModelIndex: index })} + onEdit={index => this.setState({ editOutputSignalsModal: true, modalConfigData: this.state.configs[index], modalConfigIndex: index })} /> this.setState({ editInputSignalsModal: true, modalSimulationModelData: this.state.simulationModels[index], modalSimulationModelIndex: index })} + onEdit={index => this.setState({ editInputSignalsModal: true, modalConfigData: this.state.configs[index], modalConfigIndex: index })} /> this.getICName(icID)} /> this.setState({ editSimulationModelModal: true, modalSimulationModelData: this.state.simulationModels[index], modalSimulationModelIndex: index })} - onDelete={(index) => this.setState({ deleteSimulationModelModal: true, modalSimulationModelData: this.state.simulationModels[index], modalSimulationModelIndex: index })} - onExport={index => this.exportModel(index)} + onEdit={index => this.setState({ editConfigModal: true, modalConfigData: this.state.configs[index], modalConfigIndex: index })} + onDelete={(index) => this.setState({ deleteConfigModal: true, modalConfigData: this.state.configs[index], modalConfigIndex: index })} + onExport={index => this.exportConfig(index)} />
- - + +
- this.closeEditSimulationModelModal(data)} simulationModel={this.state.modalSimulationModelData} ics={this.state.ics} /> - this.importSimulationModel(data)} ics={this.state.ics} /> - this.closeDeleteSimulationModelModal(c)} /> + this.closeEditConfigModal(data)} config={this.state.modalConfigData} ics={this.state.ics} /> + this.importConfig(data)} ics={this.state.ics} /> + this.closeDeleteConfigModal(c)} /> this.closeDeleteSignalModal(data)} direction="Output" signals={this.state.signals} - simulationModelID={this.state.modalSimulationModelData.id} /> + configID={this.state.modalConfigData.id} /> this.closeEditSignalsModal(data, direction)} @@ -473,7 +473,7 @@ class Scenario extends React.Component { onDelete={(data) => this.closeDeleteSignalModal(data)} direction="Input" signals={this.state.signals} - simulationModelID={this.state.modalSimulationModelData.id}/> + configID={this.state.modalConfigData.id}/> {/*Dashboard table*/}

Dashboards

diff --git a/src/scenario/scenarios-data-manager.js b/src/scenario/scenarios-data-manager.js index a56a61e..ec4a442 100644 --- a/src/scenario/scenarios-data-manager.js +++ b/src/scenario/scenarios-data-manager.js @@ -1,8 +1,4 @@ /** - * File: scenarios-data-manager.js - * Author: Sonja Happ - * Date: 20.08.2019 - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -25,18 +21,18 @@ import AppDispatcher from "../common/app-dispatcher"; class ScenariosDataManager extends RestDataManager { constructor() { - super('scenario', '/scenarios', ['id', 'name', 'running', 'simulationModelIDs', 'userIDs', 'dashboardIDs', 'startParameters' ]); + super('scenario', '/scenarios'); } - getSimulationModels(token, id) { - RestAPI.get(this.makeURL('/scenarios/' + id + '/models'), token).then(response => { + getComponentConfigs(token, id) { + RestAPI.get(this.makeURL('/scenarios/' + id + '/configs'), token).then(response => { AppDispatcher.dispatch({ - type: 'scenarios/simulationmodels', - simulationmodels: response.models + type: 'scenarios/configs', + configs: response.configs }); }).catch(error => { AppDispatcher.dispatch({ - type: 'scenarios/simulationmodels-error', + type: 'scenarios/configs-error', error: error }); }); diff --git a/src/scenario/scenarios.js b/src/scenario/scenarios.js index 1cd1e04..baa22e3 100644 --- a/src/scenario/scenarios.js +++ b/src/scenario/scenarios.js @@ -158,7 +158,7 @@ class Scenarios extends Component { let scenario = Object.assign({}, this.state.scenarios[index]); delete scenario.id; - // TODO request missing scenario parameters (Dashboards and Simulation Modles) recursively for export + // TODO request missing scenario parameters (Dashboards and component configs) recursively for export // show save dialog const blob = new Blob([JSON.stringify(scenario, null, 2)], { type: 'application/json' }); diff --git a/src/signal/edit-signal-mapping.js b/src/signal/edit-signal-mapping.js index 2c31a68..51ab0c9 100644 --- a/src/signal/edit-signal-mapping.js +++ b/src/signal/edit-signal-mapping.js @@ -52,9 +52,9 @@ class EditSignalMapping extends React.Component { static getDerivedStateFromProps(props, state){ - // filter all signals by Simulation Model ID and direction + // filter all signals by configID and direction let signals = props.signals.filter((sig) => { - return (sig.simulationModelID === props.simulationModelID) && (sig.direction === state.dir); + return (sig.configID === props.configID) && (sig.direction === state.dir); }); return { @@ -115,7 +115,7 @@ class EditSignalMapping extends React.Component { console.log("add signal"); let newSignal = { - simulationModelID: this.props.simulationModelID, + configID: this.props.configID, direction: this.state.dir, name: "PlaceholderName", unit: "PlaceholderUnit", @@ -130,7 +130,7 @@ class EditSignalMapping extends React.Component { this.valid=false; let signals = this.props.signals.filter((sig) => { - return (sig.simulationModelID === this.props.simulationModelID) && (sig.direction === this.state.dir); + return (sig.configID === this.props.configID) && (sig.direction === this.state.dir); }); this.setState({signals: signals}) @@ -173,7 +173,7 @@ EditSignalMapping.propTypes = { name: PropTypes.string.isRequired, unit: PropTypes.string.isRequired, direction: PropTypes.string.isRequired, - simulationModelID: PropTypes.number.isRequired, + configID: PropTypes.number.isRequired, index: PropTypes.number.isRequired }) diff --git a/src/signal/signal-store.js b/src/signal/signal-store.js index 787a3db..5fe3d06 100644 --- a/src/signal/signal-store.js +++ b/src/signal/signal-store.js @@ -1,6 +1,4 @@ /** - * File: signal-store.js - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -28,10 +26,10 @@ class SignalStore extends ArrayStore{ reduce(state, action) { switch (action.type) { case 'signals/added': - SignalsDataManager.reloadSimulationModel(action.token, action.data); + SignalsDataManager.reloadConfig(action.token, action.data); return super.reduce(state, action); case 'signals/removed': - SignalsDataManager.reloadSimulationModel(action.token, action.data); + SignalsDataManager.reloadConfig(action.token, action.data); return super.reduce(state, action); default: diff --git a/src/signal/signals-data-manager.js b/src/signal/signals-data-manager.js index e933f20..768bc7a 100644 --- a/src/signal/signals-data-manager.js +++ b/src/signal/signals-data-manager.js @@ -1,6 +1,4 @@ /** - * File: signals-data-manager.js - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -27,13 +25,13 @@ class SignalsDataManager extends RestDataManager{ super('signal', '/signals'); } - reloadSimulationModel(token, data){ + reloadConfig(token, data){ // request in signals - console.log("Reloading simulation model due to signal add/remove") - RestAPI.get(this.makeURL('/models/' + data.simulationModelID), token).then(response => { + console.log("Reloading component config due to signal add/remove") + RestAPI.get(this.makeURL('/configs/' + data.configID), token).then(response => { AppDispatcher.dispatch({ - type: 'simulationModels/edited', - data: response.simulationModel + type: 'configs/edited', + data: response.config }); }); diff --git a/src/widget/edit-widget/edit-widget-simulation-control.js b/src/widget/edit-widget/edit-widget-simulation-control.js deleted file mode 100644 index 04f17d0..0000000 --- a/src/widget/edit-widget/edit-widget-simulation-control.js +++ /dev/null @@ -1,64 +0,0 @@ -/** - * File: edit-widget-simulation-control.js - * Author: Ricardo Hernandez-Montoya - * Date: 03.04.2017 - * - * This file is part of VILLASweb. - * - * VILLASweb is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * VILLASweb is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with VILLASweb. If not, see . - **********************************************************************************/ - -import React, { Component } from 'react'; -import { FormGroup, FormControl, FormLabel } from 'react-bootstrap'; - -class EditWidgetSimulationControl extends Component { - constructor(props) { - super(props); - - this.state = { - widget: { - customProperties: { - simulationModel: '' - } - - } - }; - } - - static getDerivedStateFromProps(props, state){ - return{ - widget: props.widget - }; - } - - render() { - return ( - - Simulation Model - this.props.handleChange(e)}> - { - this.props.simulationModels.length === 0 ? ( - - ) : ( - this.props.simulationModels.map((model, index) => ( - - ))) - } - - - ); - } -} - -export default EditWidgetSimulationControl; diff --git a/src/widget/widget.js b/src/widget/widget.js index fc11c1a..52efd9d 100644 --- a/src/widget/widget.js +++ b/src/widget/widget.js @@ -25,7 +25,7 @@ import { Container } from 'flux/utils'; import AppDispatcher from '../common/app-dispatcher'; import LoginStore from '../user/login-store'; import ICDataStore from '../ic/ic-data-store'; -import SimulationModelStore from '../simulationmodel/simulation-model-store'; +import ConfigsStore from '../componentconfig/config-store'; import FileStore from '../file/file-store'; import SignalStore from '../signal/signal-store' @@ -53,7 +53,7 @@ import '../styles/widgets.css'; class Widget extends React.Component { static getStores() { - return [ ICDataStore, SimulationModelStore, FileStore, LoginStore, SignalStore]; + return [ ICDataStore, ConfigsStore, FileStore, LoginStore, SignalStore]; } static calculateState(prevState, props) { @@ -69,15 +69,15 @@ class Widget extends React.Component { } // Get the IC IDs and signal indexes for all signals of the widget - let simulationModels = SimulationModelStore.getState(); + let configs = ConfigsStore.getState(); // TODO make sure that the signals are only the signals that belong to the scenario at hand let signals = SignalStore.getState(); let icIDs = []; if ( props.data.signalIDs.length > 0){ for (let i in props.data.signalIDs.length){ let signal = signals.find(s => s.id === props.data.signalIDs[i]); - let model = simulationModels.find(m => m.id === signal.simulationModelID); - icIDs[i] = model.icID; + let config = configs.find(m => m.id === signal.configID); + icIDs[i] = config.icID; } } @@ -105,10 +105,10 @@ class Widget extends React.Component { param: '?objectID=1&objectType=widget' });*/ - // TODO no not load simulation models here, since they are loaded via the scenario, pass them as props + // TODO no not load component congfigs here, since they are loaded via the scenario, pass them as props /* AppDispatcher.dispatch({ - type: 'simulationModels/start-load', + type: 'configs/start-load', token: this.state.sessionToken, param: '?scenarioID=1' // TODO do not hardcode scenarioID! }); diff --git a/src/widget/widgets/plot-table.js b/src/widget/widgets/plot-table.js index 6678140..b4cbb12 100644 --- a/src/widget/widgets/plot-table.js +++ b/src/widget/widgets/plot-table.js @@ -37,7 +37,7 @@ class WidgetPlotTable extends Component { } componentDidUpdate(prevProps: Readonly

, prevState: Readonly, snapshot: SS): void { - if (this.props.simulationModel == null) { + if (this.props.config == null) { return; } @@ -64,18 +64,18 @@ class WidgetPlotTable extends Component { } updatePreselectedSignalsState(props) { - // Create checkboxes using the signal indices from simulation model - if(props.simulationModel.outputMapping){ - const preselectedSignals = props.simulationModel.outputMapping.reduce( - // Loop through simulation model signals - (accum, model_signal, signal_index) => { + // Create checkboxes using the signal indices from component config + if(props.config.outputMapping){ + const preselectedSignals = props.config.outputMapping.reduce( + // Loop through component config signals + (accum, signal, signal_index) => { // Append them if they belong to the current selected type if (props.widget.customProperties.preselectedSignals.indexOf(signal_index) > -1) { accum.push( { index: signal_index, - name: model_signal.name, - type: model_signal.type + name: signal.name, + type: signal.type } ) } @@ -98,11 +98,11 @@ class WidgetPlotTable extends Component { let checkBoxes = []; // Data passed to plot - if (this.props.simulationModel == null) { + if (this.props.config == null) { return

; } - const ic = this.props.simulationModel.icID; + const ic = this.props.config.icID; let icData = []; if (this.props.data[ic] != null && this.props.data[ic].output != null && this.props.data[ic].output.values != null) { @@ -112,7 +112,7 @@ class WidgetPlotTable extends Component { } if (this.state.preselectedSignals && this.state.preselectedSignals.length > 0) { - // Create checkboxes using the signal indices from simulation model + // Create checkboxes using the signal indices from component config checkBoxes = this.state.preselectedSignals.map( (signal) => { var checked = this.state.signals.indexOf(signal.index) > -1; var chkBxClasses = classNames({ diff --git a/src/widget/widgets/plot.js b/src/widget/widgets/plot.js index d20244c..7cda5ed 100644 --- a/src/widget/widgets/plot.js +++ b/src/widget/widgets/plot.js @@ -1,8 +1,4 @@ /** - * File: plot.js - * Author: Markus Grigull - * Date: 08.03.2017 - * * This file is part of VILLASweb. * * VILLASweb is free software: you can redistribute it and/or modify @@ -37,16 +33,16 @@ class WidgetPlot extends React.Component { static getDerivedStateFromProps(props, state){ - if (props.simulationModel == null) { + if (props.config == null) { return{ data: [], legend: [], }; } - const ic = props.simulationModel.icID; + const ic = props.config.icID; - // Proceed if a simulation with models and a IC are available + // Proceed if a config and a IC are available if (ic && props.data[ic] != null && props.data[ic] != null && props.data[ic].output != null && props.data[ic].output.values != null) { const chosenSignals = props.widget.customProperties.signals; @@ -55,9 +51,9 @@ class WidgetPlot extends React.Component { )); // Query the signals that will be displayed in the legend - const legend = props.simulationModel.outputMapping.reduce( (accum, model_signal, signal_index) => { + const legend = props.config.outputMapping.reduce( (accum, signal, signal_index) => { if (chosenSignals.includes(signal_index)) { - accum.push({ index: signal_index, name: model_signal.name, type: model_signal.type }); + accum.push({ index: signal_index, name: signal.name, type: signal.type }); } return accum;