use of com.serotonin.m2m2.vo.dataPoint.DataPointWithEventDetectors in project ma-core-public by infiniteautomation.
the class DataPointImporter method importImpl.
@Override
protected void importImpl() {
String xid = json.getString("xid");
DataSourceVO dsvo = null;
DataPointWithEventDetectors dp = null;
if (StringUtils.isBlank(xid)) {
xid = dataPointService.generateUniqueXid();
} else {
try {
dp = dataPointService.getWithEventDetectors(xid);
} catch (NotFoundException e) {
}
}
if (dp == null) {
// Locate the data source for the point.
String dsxid = json.getString("dataSourceXid");
try {
dsvo = dataSourceService.get(dsxid);
} catch (NotFoundException e) {
addFailureMessage("emport.dataPoint.badReference", xid);
return;
}
DataPointVO vo = new DataPointVO();
vo.setXid(xid);
vo.setDataSourceId(dsvo.getId());
vo.setDataSourceXid(dsxid);
vo.setPointLocator(dsvo.createPointLocator());
dp = new DataPointWithEventDetectors(vo, new ArrayList<>());
}
// If there is already an entry, merge the event detectors
DataPointWithEventDetectors existingMapping = dataPointMap.get(xid);
if (existingMapping != null) {
dp.getEventDetectors().addAll(existingMapping.getEventDetectors());
}
if (dp != null) {
try {
// Read into the VO to get all properties
ctx.getReader().readInto(dp.getDataPoint(), json);
// If the name is not provided, default to the XID
if (StringUtils.isBlank(dp.getDataPoint().getName()))
dp.getDataPoint().setName(xid);
// If the chart colour is null provide default of '' to handle legacy code that sets colour to null
if (dp.getDataPoint().getChartColour() == null)
dp.getDataPoint().setChartColour("");
// Ensure we have a default permission since null is valid in Mango 3.x
if (dp.getDataPoint().getReadPermission() == null) {
dp.getDataPoint().setReadPermission(new MangoPermission());
}
if (dp.getDataPoint().getEditPermission() == null) {
dp.getDataPoint().setEditPermission(new MangoPermission());
}
if (dp.getDataPoint().getSetPermission() == null) {
dp.getDataPoint().setSetPermission(new MangoPermission());
}
// Handle embedded event detectors
JsonArray pedArray = json.getJsonArray("eventDetectors");
if (pedArray != null) {
for (JsonValue jv : pedArray) {
JsonObject pedObject = jv.toJsonObject();
String pedXid = pedObject.getString("xid");
AbstractPointEventDetectorVO ped = null;
if (!StringUtils.isBlank(pedXid)) {
// Use the ped xid to lookup an existing ped.
for (AbstractPointEventDetectorVO existing : dp.getEventDetectors()) {
if (StringUtils.equals(pedXid, existing.getXid())) {
ped = existing;
break;
}
}
}
if (ped == null) {
String typeStr = pedObject.getString("type");
if (typeStr == null)
throw new TranslatableJsonException("emport.error.ped.missingAttr", "type");
// This assumes that all definitions used for data points are Data Point Event Detectors
PointEventDetectorDefinition<?> def = ModuleRegistry.getEventDetectorDefinition(typeStr);
if (def == null)
throw new TranslatableJsonException("emport.error.ped.invalid", "type", typeStr, ModuleRegistry.getEventDetectorDefinitionTypes());
else {
ped = def.baseCreateEventDetectorVO(dp.getDataPoint());
ped.setDefinition(def);
}
// Create a new one
ped.setId(Common.NEW_ID);
ped.setXid(pedXid);
dp.addOrReplaceDetector(ped);
}
JsonArray handlerXids = pedObject.getJsonArray("handlers");
if (handlerXids != null)
for (int k = 0; k < handlerXids.size(); k += 1) {
AbstractEventHandlerVO eh = EventHandlerDao.getInstance().getByXid(handlerXids.getString(k));
if (eh == null) {
throw new TranslatableJsonException("emport.eventHandler.missing", handlerXids.getString(k));
} else {
ped.addAddedEventHandler(eh);
}
}
ctx.getReader().readInto(ped, pedObject);
}
}
boolean isNew = dp.getDataPoint().isNew();
try {
if (Common.runtimeManager.getLifecycleState() == ILifecycleState.RUNNING) {
if (isNew) {
dataPointService.insert(dp.getDataPoint());
// Update all our event detector source Ids
for (AbstractPointEventDetectorVO ed : dp.getEventDetectors()) {
ed.setSourceId(dp.getDataPoint().getId());
}
} else {
dataPointService.update(dp.getDataPoint().getId(), dp.getDataPoint());
// Update all our event detector source Ids
for (AbstractPointEventDetectorVO ed : dp.getEventDetectors()) {
ed.setSourceId(dp.getDataPoint().getId());
}
}
dataPointMap.put(xid, dp);
addSuccessMessage(isNew, "emport.dataPoint.prefix", xid);
} else {
addFailureMessage("emport.dataPoint.runtimeManagerNotRunning", xid);
}
} catch (LicenseViolatedException e) {
addFailureMessage("emport.DataPoint.notImported", e.getErrorMessage(), xid);
addDetectorsFailureMessage(dp, xid);
}
} catch (ValidationException e) {
setValidationMessages(e.getValidationResult(), "emport.dataPoint.prefix", xid);
addDetectorsFailureMessage(dp, xid);
} catch (TranslatableJsonException e) {
addFailureMessage("emport.dataPoint.prefix", xid, e.getMsg());
addDetectorsFailureMessage(dp, xid);
} catch (JsonException e) {
addFailureMessage("emport.dataPoint.prefix", xid, getJsonExceptionMessage(e));
addDetectorsFailureMessage(dp, xid);
}
}
}
use of com.serotonin.m2m2.vo.dataPoint.DataPointWithEventDetectors in project ma-core-public by infiniteautomation.
the class EventDetectorImporter method importImpl.
@Override
protected void importImpl() {
String dataPointXid = json.getString("dataPointXid");
DataPointWithEventDetectors dp;
// Everyone is in the same thread so no synchronization on dataPointMap required.
if (dataPointMap.containsKey(dataPointXid))
dp = dataPointMap.get(dataPointXid);
else {
try {
dp = dataPointService.getWithEventDetectors(dataPointXid);
dataPointMap.put(dataPointXid, dp);
} catch (NotFoundException e) {
addFailureMessage("emport.error.missingPoint", dataPointXid);
return;
}
}
String typeStr = json.getString("type");
if (typeStr == null)
addFailureMessage("emport.error.ped.missingAttr", "type");
PointEventDetectorDefinition<?> def = ModuleRegistry.getEventDetectorDefinition(typeStr);
if (def == null) {
addFailureMessage("emport.error.ped.invalid", "type", typeStr, ModuleRegistry.getEventDetectorDefinitionTypes());
return;
}
String xid = json.getString("xid");
AbstractEventDetectorVO importing;
importing = EventDetectorDao.getInstance().getByXid(xid);
if (importing == null) {
importing = def.baseCreateEventDetectorVO(dp.getDataPoint());
importing.setDefinition(def);
// Create a new one
importing.setId(Common.NEW_ID);
importing.setXid(xid);
}
JsonArray handlerXids = json.getJsonArray("handlers");
if (handlerXids != null)
for (int k = 0; k < handlerXids.size(); k += 1) {
AbstractEventHandlerVO eh = EventHandlerDao.getInstance().getByXid(handlerXids.getString(k));
if (eh == null) {
addFailureMessage("emport.eventHandler.missing", handlerXids.getString(k));
return;
} else {
importing.addAddedEventHandler(eh);
}
}
AbstractPointEventDetectorVO dped = (AbstractPointEventDetectorVO) importing;
dp.addOrReplaceDetector(dped);
try {
ctx.getReader().readInto(importing, json);
} catch (TranslatableJsonException e) {
addFailureMessage("emport.eventDetector.prefix", xid, e.getMsg());
} catch (JsonException e) {
addFailureMessage("emport.eventDetector.prefix", xid, getJsonExceptionMessage(e));
}
}
use of com.serotonin.m2m2.vo.dataPoint.DataPointWithEventDetectors in project ma-core-public by infiniteautomation.
the class CompiledMangoJavaScript method initialize.
/**
* Clear the engine scope and initialize it with an expandable context which is filled with the ScriptContextVariables and returned
*
* @throws ScriptPermissionsException - permission denied executing a command
* @throws ScriptError - Execution failure, generally will have line and column number with message
* @throws DataPointStateException - If a point is not enabled or missing (unless testRun is true, then a dummy point is created)
*/
public Map<String, IDataPointValueSource> initialize(List<ScriptContextVariable> variables) throws ScriptPermissionsException, ScriptError, DataPointStateException {
Map<String, IDataPointValueSource> context = new HashMap<>();
if (variables != null) {
for (ScriptContextVariable variable : variables) {
DataPointVO dpvo = DataPointDao.getInstance().get(variable.getDataPointId());
if (dpvo != null) {
DataPointRT dprt = Common.runtimeManager.getDataPoint(dpvo.getId());
// So we can test with points disabled
if (dprt == null) {
if (testRun) {
if (dpvo.getDefaultCacheSize() == 0) {
dpvo.setDefaultCacheSize(1);
}
// Generate some fake event detectors
DataPointWithEventDetectors dp = new DataPointWithEventDetectors(dpvo, new ArrayList<>());
DataSourceRT<? extends DataSourceVO> dataSource = DataSourceDao.getInstance().get(dpvo.getDataSourceId()).createDataSourceRT();
dprt = new DataPointRT(dp, dpvo.getPointLocator().createRuntime(), dataSource, null, pointValueDao, pointValueCache);
} else {
throw new DataPointStateException(variable.getDataPointId(), new TranslatableMessage("event.script.contextPointDisabled", variable.getVariableName(), dpvo.getXid()));
}
}
if (dprt != null)
context.put(variable.getVariableName(), dprt);
} else {
throw new DataPointStateException(variable.getDataPointId(), new TranslatableMessage("event.script.contextPointMissing", variable.getVariableName(), variable.getDataPointId()));
}
}
}
this.initialize(context);
return context;
}
use of com.serotonin.m2m2.vo.dataPoint.DataPointWithEventDetectors in project ma-core-public by MangoAutomation.
the class DataPointImporter method importImpl.
@Override
protected void importImpl() {
String xid = json.getString("xid");
DataSourceVO dsvo = null;
DataPointWithEventDetectors dp = null;
if (StringUtils.isBlank(xid)) {
xid = dataPointService.generateUniqueXid();
} else {
try {
dp = dataPointService.getWithEventDetectors(xid);
} catch (NotFoundException e) {
}
}
if (dp == null) {
// Locate the data source for the point.
String dsxid = json.getString("dataSourceXid");
try {
dsvo = dataSourceService.get(dsxid);
} catch (NotFoundException e) {
addFailureMessage("emport.dataPoint.badReference", xid);
return;
}
DataPointVO vo = new DataPointVO();
vo.setXid(xid);
vo.setDataSourceId(dsvo.getId());
vo.setDataSourceXid(dsxid);
vo.setPointLocator(dsvo.createPointLocator());
dp = new DataPointWithEventDetectors(vo, new ArrayList<>());
}
// If there is already an entry, merge the event detectors
DataPointWithEventDetectors existingMapping = dataPointMap.get(xid);
if (existingMapping != null) {
dp.getEventDetectors().addAll(existingMapping.getEventDetectors());
}
if (dp != null) {
try {
// Read into the VO to get all properties
ctx.getReader().readInto(dp.getDataPoint(), json);
// If the name is not provided, default to the XID
if (StringUtils.isBlank(dp.getDataPoint().getName()))
dp.getDataPoint().setName(xid);
// If the chart colour is null provide default of '' to handle legacy code that sets colour to null
if (dp.getDataPoint().getChartColour() == null)
dp.getDataPoint().setChartColour("");
// Ensure we have a default permission since null is valid in Mango 3.x
if (dp.getDataPoint().getReadPermission() == null) {
dp.getDataPoint().setReadPermission(new MangoPermission());
}
if (dp.getDataPoint().getEditPermission() == null) {
dp.getDataPoint().setEditPermission(new MangoPermission());
}
if (dp.getDataPoint().getSetPermission() == null) {
dp.getDataPoint().setSetPermission(new MangoPermission());
}
// Handle embedded event detectors
JsonArray pedArray = json.getJsonArray("eventDetectors");
if (pedArray != null) {
for (JsonValue jv : pedArray) {
JsonObject pedObject = jv.toJsonObject();
String pedXid = pedObject.getString("xid");
AbstractPointEventDetectorVO ped = null;
if (!StringUtils.isBlank(pedXid)) {
// Use the ped xid to lookup an existing ped.
for (AbstractPointEventDetectorVO existing : dp.getEventDetectors()) {
if (StringUtils.equals(pedXid, existing.getXid())) {
ped = existing;
break;
}
}
}
if (ped == null) {
String typeStr = pedObject.getString("type");
if (typeStr == null)
throw new TranslatableJsonException("emport.error.ped.missingAttr", "type");
// This assumes that all definitions used for data points are Data Point Event Detectors
PointEventDetectorDefinition<?> def = ModuleRegistry.getEventDetectorDefinition(typeStr);
if (def == null)
throw new TranslatableJsonException("emport.error.ped.invalid", "type", typeStr, ModuleRegistry.getEventDetectorDefinitionTypes());
else {
ped = def.baseCreateEventDetectorVO(dp.getDataPoint());
ped.setDefinition(def);
}
// Create a new one
ped.setId(Common.NEW_ID);
ped.setXid(pedXid);
dp.addOrReplaceDetector(ped);
}
JsonArray handlerXids = pedObject.getJsonArray("handlers");
if (handlerXids != null)
for (int k = 0; k < handlerXids.size(); k += 1) {
AbstractEventHandlerVO eh = EventHandlerDao.getInstance().getByXid(handlerXids.getString(k));
if (eh == null) {
throw new TranslatableJsonException("emport.eventHandler.missing", handlerXids.getString(k));
} else {
ped.addAddedEventHandler(eh);
}
}
ctx.getReader().readInto(ped, pedObject);
}
}
boolean isNew = dp.getDataPoint().isNew();
try {
if (Common.runtimeManager.getLifecycleState() == ILifecycleState.RUNNING) {
if (isNew) {
dataPointService.insert(dp.getDataPoint());
// Update all our event detector source Ids
for (AbstractPointEventDetectorVO ed : dp.getEventDetectors()) {
ed.setSourceId(dp.getDataPoint().getId());
}
} else {
dataPointService.update(dp.getDataPoint().getId(), dp.getDataPoint());
// Update all our event detector source Ids
for (AbstractPointEventDetectorVO ed : dp.getEventDetectors()) {
ed.setSourceId(dp.getDataPoint().getId());
}
}
dataPointMap.put(xid, dp);
addSuccessMessage(isNew, "emport.dataPoint.prefix", xid);
} else {
addFailureMessage("emport.dataPoint.runtimeManagerNotRunning", xid);
}
} catch (LicenseViolatedException e) {
addFailureMessage("emport.DataPoint.notImported", e.getErrorMessage(), xid);
addDetectorsFailureMessage(dp, xid);
}
} catch (ValidationException e) {
setValidationMessages(e.getValidationResult(), "emport.dataPoint.prefix", xid);
addDetectorsFailureMessage(dp, xid);
} catch (TranslatableJsonException e) {
addFailureMessage("emport.dataPoint.prefix", xid, e.getMsg());
addDetectorsFailureMessage(dp, xid);
} catch (JsonException e) {
addFailureMessage("emport.dataPoint.prefix", xid, getJsonExceptionMessage(e));
addDetectorsFailureMessage(dp, xid);
}
}
}
use of com.serotonin.m2m2.vo.dataPoint.DataPointWithEventDetectors in project ma-core-public by MangoAutomation.
the class CompiledMangoJavaScript method initialize.
/**
* Clear the engine scope and initialize it with an expandable context which is filled with the ScriptContextVariables and returned
*
* @throws ScriptPermissionsException - permission denied executing a command
* @throws ScriptError - Execution failure, generally will have line and column number with message
* @throws DataPointStateException - If a point is not enabled or missing (unless testRun is true, then a dummy point is created)
*/
public Map<String, IDataPointValueSource> initialize(List<ScriptContextVariable> variables) throws ScriptPermissionsException, ScriptError, DataPointStateException {
Map<String, IDataPointValueSource> context = new HashMap<>();
if (variables != null) {
for (ScriptContextVariable variable : variables) {
DataPointVO dpvo = DataPointDao.getInstance().get(variable.getDataPointId());
if (dpvo != null) {
DataPointRT dprt = Common.runtimeManager.getDataPoint(dpvo.getId());
// So we can test with points disabled
if (dprt == null) {
if (testRun) {
if (dpvo.getDefaultCacheSize() == 0) {
dpvo.setDefaultCacheSize(1);
}
// Generate some fake event detectors
DataPointWithEventDetectors dp = new DataPointWithEventDetectors(dpvo, new ArrayList<>());
DataSourceRT<? extends DataSourceVO> dataSource = DataSourceDao.getInstance().get(dpvo.getDataSourceId()).createDataSourceRT();
dprt = new DataPointRT(dp, dpvo.getPointLocator().createRuntime(), dataSource, null, pointValueDao, pointValueCache);
} else {
throw new DataPointStateException(variable.getDataPointId(), new TranslatableMessage("event.script.contextPointDisabled", variable.getVariableName(), dpvo.getXid()));
}
}
if (dprt != null)
context.put(variable.getVariableName(), dprt);
} else {
throw new DataPointStateException(variable.getDataPointId(), new TranslatableMessage("event.script.contextPointMissing", variable.getVariableName(), variable.getDataPointId()));
}
}
}
this.initialize(context);
return context;
}
Aggregations