From 7dbf1083d227c7da2640218539e6973a6158d0bf Mon Sep 17 00:00:00 2001 From: Grzesiek Bylica Date: Mon, 15 Oct 2018 08:13:55 +0200 Subject: [PATCH] #718 Added state description for datasources, Added config messages localization without library seroUtils.jar in ConfigLocalization.java for read State localization. Added set status ApiChangeEnableStateDs, ImportChangeEnableStateDs, MigrationOrErrorSerializeChangeEnableState, ScryptChangeEnableStateDs, UserChangeEnableStateDs, UserCpChangeEnableStateDs, StopChangeEnableStateDs. Added translate for state describe. --- .../WEB-INF/classes/messages_de.properties | 9 ++++++ .../WEB-INF/classes/messages_en.properties | 10 ++++++- .../WEB-INF/classes/messages_es.properties | 9 +++++- .../WEB-INF/classes/messages_fi.properties | 9 +++++- .../WEB-INF/classes/messages_fr.properties | 9 +++++- .../WEB-INF/classes/messages_lu.properties | 9 +++++- .../WEB-INF/classes/messages_nl.properties | 9 +++++- .../WEB-INF/classes/messages_pl.properties | 10 ++++++- .../WEB-INF/classes/messages_pt.properties | 9 +++++- .../WEB-INF/classes/messages_ru.properties | 9 +++++- .../WEB-INF/classes/messages_zh.properties | 9 +++++- WebContent/WEB-INF/jsp/dataSourceList.jsp | 13 +++++++-- src/br/org/scadabr/api/dao/MangoDaoImpl.java | 3 ++ .../DSCommandsScriptContextObject.java | 3 ++ .../mango/vo/dataSource/DataSourceVO.java | 29 +++++++++++++++++++ .../http/HttpRetrieverDataSourceVO.java | 1 - .../mango/web/dwr/DataSourceListDwr.java | 3 ++ .../mango/web/dwr/beans/ImportTask.java | 12 ++++++++ src/org/scada_lts/ds/StopDsRT.java | 2 ++ .../ds/state/ApiChangeEnableStateDs.java | 20 +++++++++++++ src/org/scada_lts/ds/state/IStateDs.java | 15 ++++++++++ .../ds/state/ImportChangeEnableStateDs.java | 20 +++++++++++++ ...tionOrErrorSerializeChangeEnableState.java | 21 ++++++++++++++ .../ds/state/ScryptChangeEnableStateDs.java | 20 +++++++++++++ .../ds/state/StopChangeEnableStateDs.java | 20 +++++++++++++ .../ds/state/UserChangeEnableStateDs.java | 21 ++++++++++++++ .../ds/state/UserCpChangeEnableStateDs.java | 20 +++++++++++++ .../localization/ConfigLocalization.java | 29 +++++++++++++++++++ .../mango/service/DataSourceService.java | 5 ++-- 29 files changed, 343 insertions(+), 15 deletions(-) create mode 100644 src/org/scada_lts/ds/state/ApiChangeEnableStateDs.java create mode 100644 src/org/scada_lts/ds/state/IStateDs.java create mode 100644 src/org/scada_lts/ds/state/ImportChangeEnableStateDs.java create mode 100644 src/org/scada_lts/ds/state/MigrationOrErrorSerializeChangeEnableState.java create mode 100644 src/org/scada_lts/ds/state/ScryptChangeEnableStateDs.java create mode 100644 src/org/scada_lts/ds/state/StopChangeEnableStateDs.java create mode 100644 src/org/scada_lts/ds/state/UserChangeEnableStateDs.java create mode 100644 src/org/scada_lts/ds/state/UserCpChangeEnableStateDs.java create mode 100644 src/org/scada_lts/localization/ConfigLocalization.java diff --git a/WebContent/WEB-INF/classes/messages_de.properties b/WebContent/WEB-INF/classes/messages_de.properties index 51b1c94e70..924f9a741b 100644 --- a/WebContent/WEB-INF/classes/messages_de.properties +++ b/WebContent/WEB-INF/classes/messages_de.properties @@ -3154,5 +3154,14 @@ menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info menu.point_hierarchy.info.tooltip=Info header.changeTheme= +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description + diff --git a/WebContent/WEB-INF/classes/messages_en.properties b/WebContent/WEB-INF/classes/messages_en.properties index 86b0156623..8d218bd1fe 100644 --- a/WebContent/WEB-INF/classes/messages_en.properties +++ b/WebContent/WEB-INF/classes/messages_en.properties @@ -3157,4 +3157,12 @@ menu.point_hierarchy.info.tooltip=Info error.view_hierarchy.add.error1=Name is not validat -header.changeTheme=Change ScadaLTS application theme \ No newline at end of file +header.changeTheme=Change ScadaLTS application theme +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=\ With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_es.properties b/WebContent/WEB-INF/classes/messages_es.properties index b8c364e376..6956a84c67 100644 --- a/WebContent/WEB-INF/classes/messages_es.properties +++ b/WebContent/WEB-INF/classes/messages_es.properties @@ -3083,4 +3083,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_fi.properties b/WebContent/WEB-INF/classes/messages_fi.properties index e856446adf..6a56c47a7c 100644 --- a/WebContent/WEB-INF/classes/messages_fi.properties +++ b/WebContent/WEB-INF/classes/messages_fi.properties @@ -2903,4 +2903,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_fr.properties b/WebContent/WEB-INF/classes/messages_fr.properties index c7df0fb091..f6c856122b 100644 --- a/WebContent/WEB-INF/classes/messages_fr.properties +++ b/WebContent/WEB-INF/classes/messages_fr.properties @@ -3159,4 +3159,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_lu.properties b/WebContent/WEB-INF/classes/messages_lu.properties index 5e87f00f2a..6c48e7027c 100644 --- a/WebContent/WEB-INF/classes/messages_lu.properties +++ b/WebContent/WEB-INF/classes/messages_lu.properties @@ -3169,4 +3169,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_nl.properties b/WebContent/WEB-INF/classes/messages_nl.properties index ba5fb168f8..4ddcfacebf 100644 --- a/WebContent/WEB-INF/classes/messages_nl.properties +++ b/WebContent/WEB-INF/classes/messages_nl.properties @@ -2709,4 +2709,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_pl.properties b/WebContent/WEB-INF/classes/messages_pl.properties index 9e9f1f9ca5..1bb9c37996 100644 --- a/WebContent/WEB-INF/classes/messages_pl.properties +++ b/WebContent/WEB-INF/classes/messages_pl.properties @@ -3070,4 +3070,12 @@ graphic.chartWidth=Długość (każdy wykres) graphic.chartHeight=Wysokość (każdy wykres) error.view_hierarchy.add.error1=Name is not validate -header.changeTheme=Zmień motyw aplikacji ScadaLTS \ No newline at end of file +header.changeTheme=Zmień motyw aplikacji ScadaLTS +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_pt.properties b/WebContent/WEB-INF/classes/messages_pt.properties index 81ee07db5e..fd2938b7fd 100644 --- a/WebContent/WEB-INF/classes/messages_pt.properties +++ b/WebContent/WEB-INF/classes/messages_pt.properties @@ -3149,4 +3149,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description diff --git a/WebContent/WEB-INF/classes/messages_ru.properties b/WebContent/WEB-INF/classes/messages_ru.properties index b5438d492f..af512dc5a9 100644 --- a/WebContent/WEB-INF/classes/messages_ru.properties +++ b/WebContent/WEB-INF/classes/messages_ru.properties @@ -3120,4 +3120,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/classes/messages_zh.properties b/WebContent/WEB-INF/classes/messages_zh.properties index 81f1085475..b5b563a95a 100644 --- a/WebContent/WEB-INF/classes/messages_zh.properties +++ b/WebContent/WEB-INF/classes/messages_zh.properties @@ -2023,4 +2023,11 @@ menu.point_hierarchy.add.tooltip=Add folder menu.point_hierarchy.delete.tooltip=Delete folder / Move point to root menu.point_hierarchy.refresh.tooltip=Refresh menu.point_hierarchy.info.tooltip=Info - +ds.state.migrationOrErrorSerializeChangeEnableState=During data read/migration/error the on/off status of datasource has been changed +ds.state.stopChangeEnableStateDs=Due to the non-response of an external server and the properties stop enabled, datasource has been stopped +ds.state.userChangeEnableStateDs=The user has changed the on/off status of datasource +ds.state.apiChangeEnableStateDs=With the use of the API, the on/off status of DataSource has been changed +ds.state.importChangeEnableStateDs=During the import, the on/off status of DataSource was changed +ds.state.scryptChangeEnable=The script has changed the on/off status of datasource +ds.state.userCpChangeEnableStateDs=The user has copied datasource. The datasource is off by default +dsList.statusDescribe=Status description \ No newline at end of file diff --git a/WebContent/WEB-INF/jsp/dataSourceList.jsp b/WebContent/WEB-INF/jsp/dataSourceList.jsp index 368a0a7d8c..25b11e4a34 100644 --- a/WebContent/WEB-INF/jsp/dataSourceList.jsp +++ b/WebContent/WEB-INF/jsp/dataSourceList.jsp @@ -28,16 +28,22 @@ }); } + function updateStateDescription(idDs, description) { + var idStateDesc = "stateDes"+idDs; + jQuery("#"+idStateDesc).html(description); + } + function toggleDataSource(dataSourceId) { var imgNode = $("dsImg"+ dataSourceId); if (!hasImageFader(imgNode)) { DataSourceListDwr.toggleDataSource(dataSourceId, function(result) { updateStatusImg($("dsImg"+ result.id), result.enabled, true); + updateStateDescription(result.id, result.state); }); startImageFader(imgNode); } } - + function toggleDataPoint(dataPointId) { var imgNode = $("dpImg"+ dataPointId); if (!hasImageFader(imgNode)) { @@ -117,6 +123,7 @@ + @@ -138,6 +145,9 @@ + + ${listParent.parent.state.describe} + @@ -187,7 +197,6 @@ - diff --git a/src/br/org/scadabr/api/dao/MangoDaoImpl.java b/src/br/org/scadabr/api/dao/MangoDaoImpl.java index 574eef7e87..6f03faa3ba 100644 --- a/src/br/org/scadabr/api/dao/MangoDaoImpl.java +++ b/src/br/org/scadabr/api/dao/MangoDaoImpl.java @@ -32,6 +32,7 @@ import com.serotonin.mango.vo.permission.Permissions; import com.serotonin.util.StringUtils; import com.serotonin.web.dwr.DwrResponseI18n; +import org.scada_lts.ds.state.ApiChangeEnableStateDs; import java.util.*; @@ -863,6 +864,7 @@ public int configureDataSource(DataSourceType dataSourceType, ds.setId(config.getId()); ds.setName(config.getName()); ds.setEnabled(config.isEnabled()); + ds.setState(new ApiChangeEnableStateDs()); ds.setHost(config.getHost()); ds.setPort(config.getPort()); ds.setUpdatePeriods((int) config.getPollingPeriod()); @@ -905,6 +907,7 @@ public int configureDataSource(DataSourceType dataSourceType, ds.setId(config.getId()); ds.setName(config.getName()); ds.setEnabled(config.isEnabled()); + ds.setState(new ApiChangeEnableStateDs()); ds.setCommPortId(config.getSerialPort()); ds.setBaudRate(config.getBaudrate()); ds.setUpdatePeriods((int) config.getPollingPeriod()); diff --git a/src/br/org/scadabr/rt/scripting/context/DSCommandsScriptContextObject.java b/src/br/org/scadabr/rt/scripting/context/DSCommandsScriptContextObject.java index b04d4d57c7..f5ebeabd0b 100644 --- a/src/br/org/scadabr/rt/scripting/context/DSCommandsScriptContextObject.java +++ b/src/br/org/scadabr/rt/scripting/context/DSCommandsScriptContextObject.java @@ -5,6 +5,7 @@ import com.serotonin.mango.rt.RuntimeManager; import com.serotonin.mango.vo.dataSource.DataSourceVO; import com.serotonin.mango.vo.permission.Permissions; +import org.scada_lts.ds.state.ScryptChangeEnableStateDs; public class DSCommandsScriptContextObject extends ScriptContextObject { public static final Type TYPE = Type.DATASOURCE_COMMANDS; @@ -21,6 +22,7 @@ public void enableDataSource(String xid) { Permissions.ensureDataSourcePermission(Common.getUser(), dataSource .getId()); dataSource.setEnabled(true); + dataSource.setState(new ScryptChangeEnableStateDs()); runtimeManager.saveDataSource(dataSource); } @@ -33,6 +35,7 @@ public void disableDataSource(String xid) { Permissions.ensureDataSourcePermission(Common.getUser(), dataSource .getId()); dataSource.setEnabled(false); + dataSource.setState(new ScryptChangeEnableStateDs()); runtimeManager.saveDataSource(dataSource); } diff --git a/src/com/serotonin/mango/vo/dataSource/DataSourceVO.java b/src/com/serotonin/mango/vo/dataSource/DataSourceVO.java index 8c50f3b70a..311296687e 100644 --- a/src/com/serotonin/mango/vo/dataSource/DataSourceVO.java +++ b/src/com/serotonin/mango/vo/dataSource/DataSourceVO.java @@ -67,6 +67,8 @@ import com.serotonin.util.StringUtils; import com.serotonin.web.dwr.DwrResponseI18n; import com.serotonin.web.i18n.LocalizableMessage; +import org.scada_lts.ds.state.MigrationOrErrorSerializeChangeEnableState; +import org.scada_lts.ds.state.IStateDs; import java.io.IOException; import java.io.ObjectInputStream; @@ -381,6 +383,9 @@ public boolean isNew() { private String name; @JsonRemoteProperty private boolean enabled; + + private IStateDs state; + private Map alarmLevels = new HashMap(); public boolean isEnabled() { @@ -391,6 +396,14 @@ public void setEnabled(boolean enabled) { this.enabled = enabled; } + public IStateDs getState() { + return state; + } + + public void setState(IStateDs state) { + this.state = state; + } + public int getId() { return id; } @@ -487,6 +500,8 @@ public final void addProperties(List list) { AuditEventType.addPropertyMessage(list, "dsEdit.head.name", name); AuditEventType.addPropertyMessage(list, "common.xid", xid); AuditEventType.addPropertyMessage(list, "common.enabled", enabled); + AuditEventType.addPropertyMessage(list, "common.state", state); + addPropertiesImpl(list); } @@ -500,6 +515,8 @@ public final void addPropertyChanges(List list, T from) { AuditEventType.maybeAddPropertyChangeMessage(list, "common.enabled", from.isEnabled(), enabled); + AuditEventType.maybeAddPropertyChangeMessage(list, "common.describeStatus", from.getState(), state); + addPropertyChangesImpl(list, from); } @@ -520,6 +537,7 @@ private void writeObject(ObjectOutputStream out) throws IOException { out.writeInt(version); out.writeBoolean(enabled); out.writeObject(alarmLevels); + out.writeObject(state); } @SuppressWarnings("unchecked") @@ -532,9 +550,20 @@ private void readObject(ObjectInputStream in) throws IOException, if (ver == 1) { enabled = in.readBoolean(); alarmLevels = new HashMap(); + try { + state = (IStateDs) in.readObject(); + } catch (Exception e) { + state = new MigrationOrErrorSerializeChangeEnableState(); + } + } else if (ver == 2) { enabled = in.readBoolean(); alarmLevels = (HashMap) in.readObject(); + try { + state = (IStateDs) in.readObject(); + } catch (Exception e) { + state = new MigrationOrErrorSerializeChangeEnableState(); + } } } diff --git a/src/com/serotonin/mango/vo/dataSource/http/HttpRetrieverDataSourceVO.java b/src/com/serotonin/mango/vo/dataSource/http/HttpRetrieverDataSourceVO.java index 7fccfbd6bc..b9897b2b0c 100644 --- a/src/com/serotonin/mango/vo/dataSource/http/HttpRetrieverDataSourceVO.java +++ b/src/com/serotonin/mango/vo/dataSource/http/HttpRetrieverDataSourceVO.java @@ -214,7 +214,6 @@ private void readObject(ObjectInputStream in) throws IOException { timeoutSeconds = in.readInt(); ; retries = in.readInt(); - // We don't check version we work on latest when is not correctly set default value; try { stop = in.readBoolean(); } catch (Exception e) { diff --git a/src/com/serotonin/mango/web/dwr/DataSourceListDwr.java b/src/com/serotonin/mango/web/dwr/DataSourceListDwr.java index dc8713589a..f360d2ed7c 100644 --- a/src/com/serotonin/mango/web/dwr/DataSourceListDwr.java +++ b/src/com/serotonin/mango/web/dwr/DataSourceListDwr.java @@ -39,6 +39,7 @@ import com.serotonin.mango.vo.dataSource.DataSourceVO.Type; import com.serotonin.mango.vo.permission.Permissions; import com.serotonin.web.dwr.DwrResponseI18n; +import org.scada_lts.ds.state.UserChangeEnableStateDs; /** * @author Matthew Lohbihler @@ -100,8 +101,10 @@ public Map toggleDataSource(int dataSourceId) { Map result = new HashMap(); dataSource.setEnabled(!dataSource.isEnabled()); + dataSource.setState(new UserChangeEnableStateDs()); runtimeManager.saveDataSource(dataSource); + result.put("state", dataSource.getState().getDescribe()); result.put("enabled", dataSource.isEnabled()); result.put("id", dataSourceId); return result; diff --git a/src/com/serotonin/mango/web/dwr/beans/ImportTask.java b/src/com/serotonin/mango/web/dwr/beans/ImportTask.java index fda21a181b..354fc13dd2 100644 --- a/src/com/serotonin/mango/web/dwr/beans/ImportTask.java +++ b/src/com/serotonin/mango/web/dwr/beans/ImportTask.java @@ -75,6 +75,7 @@ import com.serotonin.web.dwr.DwrMessageI18n; import com.serotonin.web.dwr.DwrResponseI18n; import com.serotonin.web.i18n.I18NUtils; +import org.scada_lts.ds.state.ImportChangeEnableStateDs; /** * @author Matthew Lohbihler @@ -214,6 +215,7 @@ private void preloadDataPoints() { .getId())) { disabledDataSources.add(dsvo.getId()); dsvo.setEnabled(false); + dsvo.setState(new ImportChangeEnableStateDs()); Common.ctx.getRuntimeManager().saveDataSource( dsvo); } @@ -360,6 +362,7 @@ protected void runImpl() { for (Integer id : disabledDataSources) { DataSourceVO ds = dataSourceDao.getDataSource(id); ds.setEnabled(true); + ds.setState(new ImportChangeEnableStateDs()); Common.ctx.getRuntimeManager().saveDataSource(ds); } } catch (Exception e) { @@ -427,6 +430,13 @@ private void importDataSource(JsonObject dataSource) { name == null ? "(undefined)" : name); else { DataSourceVO vo = dataSourceDao.getDataSource(xid); + if (vo != null) { + //Check the enable/disable is changed. And to test when don't have enable property when import data + boolean importedDsEnabled = dataSource.getBoolean("enabled"); + if (vo.isEnabled() != importedDsEnabled) { + vo.setState(new ImportChangeEnableStateDs()); + } + } if (vo == null) { String typeStr = dataSource.getString("type"); if (StringUtils.isEmpty(typeStr)) @@ -464,6 +474,7 @@ private void importDataSource(JsonObject dataSource) { else { // Sweet. Save it. boolean isnew = vo.isNew(); + vo.setState(new ImportChangeEnableStateDs()); Common.ctx.getRuntimeManager().saveDataSource(vo); addSuccessMessage(isnew, "emport.dataSource.prefix", xid); @@ -534,6 +545,7 @@ private void importDataPoint(JsonObject dataPoint) { && !disabledDataSources.contains(dsvo.getId())) { disabledDataSources.add(dsvo.getId()); dsvo.setEnabled(false); + dsvo.setState(new ImportChangeEnableStateDs()); Common.ctx.getRuntimeManager().saveDataSource(dsvo); } diff --git a/src/org/scada_lts/ds/StopDsRT.java b/src/org/scada_lts/ds/StopDsRT.java index f42890339b..bac6e662d5 100644 --- a/src/org/scada_lts/ds/StopDsRT.java +++ b/src/org/scada_lts/ds/StopDsRT.java @@ -3,6 +3,7 @@ import com.serotonin.mango.Common; import com.serotonin.mango.rt.RuntimeManager; import com.serotonin.mango.vo.dataSource.DataSourceVO; +import org.scada_lts.ds.state.StopChangeEnableStateDs; /** * @project Scada-LTS @@ -22,6 +23,7 @@ public void run() { RuntimeManager runtimeManager = Common.ctx.getRuntimeManager(); DataSourceVO dataSource = runtimeManager.getDataSource(idDs); dataSource.setEnabled(false); + dataSource.setState(new StopChangeEnableStateDs()); runtimeManager.saveDataSource(dataSource); } catch (Exception e) { diff --git a/src/org/scada_lts/ds/state/ApiChangeEnableStateDs.java b/src/org/scada_lts/ds/state/ApiChangeEnableStateDs.java new file mode 100644 index 0000000000..062a282a07 --- /dev/null +++ b/src/org/scada_lts/ds/state/ApiChangeEnableStateDs.java @@ -0,0 +1,20 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class ApiChangeEnableStateDs implements IStateDs, Serializable { + + private static final String API_CHANGE_ENABLE_STATE_DS = "ds.state.apiChangeEnableStateDs"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(API_CHANGE_ENABLE_STATE_DS, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/ds/state/IStateDs.java b/src/org/scada_lts/ds/state/IStateDs.java new file mode 100644 index 0000000000..7bce9548f1 --- /dev/null +++ b/src/org/scada_lts/ds/state/IStateDs.java @@ -0,0 +1,15 @@ +package org.scada_lts.ds.state; + +import com.serotonin.mango.vo.dataSource.DataSourceVO; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public interface IStateDs { + + //void change(DataSourceVO ds); + + String getDescribe(); + +} diff --git a/src/org/scada_lts/ds/state/ImportChangeEnableStateDs.java b/src/org/scada_lts/ds/state/ImportChangeEnableStateDs.java new file mode 100644 index 0000000000..2265cdbb2e --- /dev/null +++ b/src/org/scada_lts/ds/state/ImportChangeEnableStateDs.java @@ -0,0 +1,20 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class ImportChangeEnableStateDs implements IStateDs, Serializable { + + private static final String IMPORT = "ds.state.importChangeEnableStateDs"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(IMPORT, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/ds/state/MigrationOrErrorSerializeChangeEnableState.java b/src/org/scada_lts/ds/state/MigrationOrErrorSerializeChangeEnableState.java new file mode 100644 index 0000000000..9ec6d1ecad --- /dev/null +++ b/src/org/scada_lts/ds/state/MigrationOrErrorSerializeChangeEnableState.java @@ -0,0 +1,21 @@ +package org.scada_lts.ds.state; + + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class MigrationOrErrorSerializeChangeEnableState implements IStateDs, Serializable { + + private static final String MIGRATION = "ds.state.migrationOrErrorSerializeChangeEnableState"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(MIGRATION, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/ds/state/ScryptChangeEnableStateDs.java b/src/org/scada_lts/ds/state/ScryptChangeEnableStateDs.java new file mode 100644 index 0000000000..42ee014c30 --- /dev/null +++ b/src/org/scada_lts/ds/state/ScryptChangeEnableStateDs.java @@ -0,0 +1,20 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class ScryptChangeEnableStateDs implements IStateDs, Serializable { + + private static final String SCRYPT_CHANGE_ENABLE = "ds.state.scryptChangeEnable"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(SCRYPT_CHANGE_ENABLE, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/ds/state/StopChangeEnableStateDs.java b/src/org/scada_lts/ds/state/StopChangeEnableStateDs.java new file mode 100644 index 0000000000..261d4c3545 --- /dev/null +++ b/src/org/scada_lts/ds/state/StopChangeEnableStateDs.java @@ -0,0 +1,20 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class StopChangeEnableStateDs implements IStateDs, Serializable { + + private static final String STOP = "ds.state.stopChangeEnableStateDs"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(STOP, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/ds/state/UserChangeEnableStateDs.java b/src/org/scada_lts/ds/state/UserChangeEnableStateDs.java new file mode 100644 index 0000000000..70f34211d3 --- /dev/null +++ b/src/org/scada_lts/ds/state/UserChangeEnableStateDs.java @@ -0,0 +1,21 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class UserChangeEnableStateDs implements IStateDs, Serializable { + + private static final String USER = "ds.state.userChangeEnableStateDs"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(USER, new Object[]{}, Locale.getDefault()); + } + +} diff --git a/src/org/scada_lts/ds/state/UserCpChangeEnableStateDs.java b/src/org/scada_lts/ds/state/UserCpChangeEnableStateDs.java new file mode 100644 index 0000000000..1457b256aa --- /dev/null +++ b/src/org/scada_lts/ds/state/UserCpChangeEnableStateDs.java @@ -0,0 +1,20 @@ +package org.scada_lts.ds.state; + +import org.scada_lts.localization.ConfigLocalization; + +import java.io.Serializable; +import java.util.Locale; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 10.10.18 + */ +public class UserCpChangeEnableStateDs implements IStateDs, Serializable { + + private static final String USER_CP_DS = "ds.state.userCpChangeEnableStateDs"; + + @Override + public String getDescribe() { + return ConfigLocalization.getInstance().messageSource().getMessage(USER_CP_DS, new Object[]{}, Locale.getDefault()); + } +} diff --git a/src/org/scada_lts/localization/ConfigLocalization.java b/src/org/scada_lts/localization/ConfigLocalization.java new file mode 100644 index 0000000000..5fccbeaa3e --- /dev/null +++ b/src/org/scada_lts/localization/ConfigLocalization.java @@ -0,0 +1,29 @@ +package org.scada_lts.localization; + +import org.springframework.context.MessageSource; +import org.springframework.context.support.ReloadableResourceBundleMessageSource; + +/** + * @project Scada-LTS-master + * @autor grzegorz.bylica@gmail.com on 11.10.18 + */ +public class ConfigLocalization { + + private static ConfigLocalization ourInstance = new ConfigLocalization(); + private ReloadableResourceBundleMessageSource messageSource; + + public static ConfigLocalization getInstance() { + return ourInstance; + } + + private ConfigLocalization() { + messageSource = new ReloadableResourceBundleMessageSource(); + messageSource.setBasename("messages"); + messageSource.setDefaultEncoding("UTF-8"); + messageSource.setUseCodeAsDefaultMessage(true); + } + + public MessageSource messageSource () { + return messageSource; + } +} diff --git a/src/org/scada_lts/mango/service/DataSourceService.java b/src/org/scada_lts/mango/service/DataSourceService.java index c08cb7101d..4651a237a1 100644 --- a/src/org/scada_lts/mango/service/DataSourceService.java +++ b/src/org/scada_lts/mango/service/DataSourceService.java @@ -18,7 +18,6 @@ package org.scada_lts.mango.service; import com.serotonin.mango.Common; -import com.serotonin.mango.db.dao.DataPointDao; import com.serotonin.mango.vo.DataPointVO; import com.serotonin.mango.vo.User; import com.serotonin.mango.vo.dataSource.DataSourceVO; @@ -26,9 +25,9 @@ import com.serotonin.util.StringUtils; import com.serotonin.web.i18n.LocalizableMessage; import org.scada_lts.dao.DAO; -import org.scada_lts.dao.DataPointDAO; import org.scada_lts.dao.DataSourceDAO; import org.scada_lts.dao.MaintenanceEventDAO; +import org.scada_lts.ds.state.UserCpChangeEnableStateDs; import org.scada_lts.mango.adapter.MangoDataSource; import org.scada_lts.mango.adapter.MangoPointHierarchy; import org.springframework.dao.EmptyResultDataAccessException; @@ -137,6 +136,8 @@ public int copyDataSource(final int dataSourceId, final ResourceBundle bundle) { dataSourceCopy.setId(Common.NEW_ID); dataSourceCopy.setXid(generateUniqueXid()); dataSourceCopy.setEnabled(false); + dataSourceCopy.setState(new UserCpChangeEnableStateDs()); + //TODO seroUtils dataSourceCopy.setName(StringUtils.truncate(LocalizableMessage.getMessage(bundle, "common.copyPrefix", dataSource.getName()), 40));